diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/EC2/CapacityManagerDataExport.hs b/gen/Stratosphere/EC2/CapacityManagerDataExport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityManagerDataExport.hs
@@ -0,0 +1,75 @@
+module Stratosphere.EC2.CapacityManagerDataExport (
+        CapacityManagerDataExport(..), mkCapacityManagerDataExport
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data CapacityManagerDataExport
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacitymanagerdataexport.html>
+    CapacityManagerDataExport {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacitymanagerdataexport.html#cfn-ec2-capacitymanagerdataexport-outputformat>
+                               outputFormat :: (Value Prelude.Text),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacitymanagerdataexport.html#cfn-ec2-capacitymanagerdataexport-s3bucketname>
+                               s3BucketName :: (Value Prelude.Text),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacitymanagerdataexport.html#cfn-ec2-capacitymanagerdataexport-s3bucketprefix>
+                               s3BucketPrefix :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacitymanagerdataexport.html#cfn-ec2-capacitymanagerdataexport-schedule>
+                               schedule :: (Value Prelude.Text),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacitymanagerdataexport.html#cfn-ec2-capacitymanagerdataexport-tags>
+                               tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityManagerDataExport ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> CapacityManagerDataExport
+mkCapacityManagerDataExport outputFormat s3BucketName schedule
+  = CapacityManagerDataExport
+      {haddock_workaround_ = (), outputFormat = outputFormat,
+       s3BucketName = s3BucketName, schedule = schedule,
+       s3BucketPrefix = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties CapacityManagerDataExport where
+  toResourceProperties CapacityManagerDataExport {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CapacityManagerDataExport",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["OutputFormat" JSON..= outputFormat,
+                            "S3BucketName" JSON..= s3BucketName, "Schedule" JSON..= schedule]
+                           (Prelude.catMaybes
+                              [(JSON..=) "S3BucketPrefix" Prelude.<$> s3BucketPrefix,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON CapacityManagerDataExport where
+  toJSON CapacityManagerDataExport {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["OutputFormat" JSON..= outputFormat,
+               "S3BucketName" JSON..= s3BucketName, "Schedule" JSON..= schedule]
+              (Prelude.catMaybes
+                 [(JSON..=) "S3BucketPrefix" Prelude.<$> s3BucketPrefix,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "OutputFormat" CapacityManagerDataExport where
+  type PropertyType "OutputFormat" CapacityManagerDataExport = Value Prelude.Text
+  set newValue CapacityManagerDataExport {..}
+    = CapacityManagerDataExport {outputFormat = newValue, ..}
+instance Property "S3BucketName" CapacityManagerDataExport where
+  type PropertyType "S3BucketName" CapacityManagerDataExport = Value Prelude.Text
+  set newValue CapacityManagerDataExport {..}
+    = CapacityManagerDataExport {s3BucketName = newValue, ..}
+instance Property "S3BucketPrefix" CapacityManagerDataExport where
+  type PropertyType "S3BucketPrefix" CapacityManagerDataExport = Value Prelude.Text
+  set newValue CapacityManagerDataExport {..}
+    = CapacityManagerDataExport
+        {s3BucketPrefix = Prelude.pure newValue, ..}
+instance Property "Schedule" CapacityManagerDataExport where
+  type PropertyType "Schedule" CapacityManagerDataExport = Value Prelude.Text
+  set newValue CapacityManagerDataExport {..}
+    = CapacityManagerDataExport {schedule = newValue, ..}
+instance Property "Tags" CapacityManagerDataExport where
+  type PropertyType "Tags" CapacityManagerDataExport = [Tag]
+  set newValue CapacityManagerDataExport {..}
+    = CapacityManagerDataExport {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/CapacityReservation.hs b/gen/Stratosphere/EC2/CapacityReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservation.hs
@@ -0,0 +1,173 @@
+module Stratosphere.EC2.CapacityReservation (
+        module Exports, CapacityReservation(..), mkCapacityReservation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.CapacityReservation.TagSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityReservation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html>
+    CapacityReservation {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-availabilityzone>
+                         availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-availabilityzoneid>
+                         availabilityZoneId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-ebsoptimized>
+                         ebsOptimized :: (Prelude.Maybe (Value Prelude.Bool)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-enddate>
+                         endDate :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-enddatetype>
+                         endDateType :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-ephemeralstorage>
+                         ephemeralStorage :: (Prelude.Maybe (Value Prelude.Bool)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-instancecount>
+                         instanceCount :: (Value Prelude.Integer),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-instancematchcriteria>
+                         instanceMatchCriteria :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-instanceplatform>
+                         instancePlatform :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-instancetype>
+                         instanceType :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-outpostarn>
+                         outPostArn :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-placementgrouparn>
+                         placementGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-tagspecifications>
+                         tagSpecifications :: (Prelude.Maybe [TagSpecificationProperty]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-tenancy>
+                         tenancy :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservation.html#cfn-ec2-capacityreservation-unusedreservationbillingownerid>
+                         unusedReservationBillingOwnerId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityReservation ::
+  Value Prelude.Integer
+  -> Value Prelude.Text -> Value Prelude.Text -> CapacityReservation
+mkCapacityReservation instanceCount instancePlatform instanceType
+  = CapacityReservation
+      {haddock_workaround_ = (), instanceCount = instanceCount,
+       instancePlatform = instancePlatform, instanceType = instanceType,
+       availabilityZone = Prelude.Nothing,
+       availabilityZoneId = Prelude.Nothing,
+       ebsOptimized = Prelude.Nothing, endDate = Prelude.Nothing,
+       endDateType = Prelude.Nothing, ephemeralStorage = Prelude.Nothing,
+       instanceMatchCriteria = Prelude.Nothing,
+       outPostArn = Prelude.Nothing, placementGroupArn = Prelude.Nothing,
+       tagSpecifications = Prelude.Nothing, tenancy = Prelude.Nothing,
+       unusedReservationBillingOwnerId = Prelude.Nothing}
+instance ToResourceProperties CapacityReservation where
+  toResourceProperties CapacityReservation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CapacityReservation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InstanceCount" JSON..= instanceCount,
+                            "InstancePlatform" JSON..= instancePlatform,
+                            "InstanceType" JSON..= instanceType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                               (JSON..=) "AvailabilityZoneId" Prelude.<$> availabilityZoneId,
+                               (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+                               (JSON..=) "EndDate" Prelude.<$> endDate,
+                               (JSON..=) "EndDateType" Prelude.<$> endDateType,
+                               (JSON..=) "EphemeralStorage" Prelude.<$> ephemeralStorage,
+                               (JSON..=) "InstanceMatchCriteria"
+                                 Prelude.<$> instanceMatchCriteria,
+                               (JSON..=) "OutPostArn" Prelude.<$> outPostArn,
+                               (JSON..=) "PlacementGroupArn" Prelude.<$> placementGroupArn,
+                               (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                               (JSON..=) "Tenancy" Prelude.<$> tenancy,
+                               (JSON..=) "UnusedReservationBillingOwnerId"
+                                 Prelude.<$> unusedReservationBillingOwnerId]))}
+instance JSON.ToJSON CapacityReservation where
+  toJSON CapacityReservation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InstanceCount" JSON..= instanceCount,
+               "InstancePlatform" JSON..= instancePlatform,
+               "InstanceType" JSON..= instanceType]
+              (Prelude.catMaybes
+                 [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                  (JSON..=) "AvailabilityZoneId" Prelude.<$> availabilityZoneId,
+                  (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+                  (JSON..=) "EndDate" Prelude.<$> endDate,
+                  (JSON..=) "EndDateType" Prelude.<$> endDateType,
+                  (JSON..=) "EphemeralStorage" Prelude.<$> ephemeralStorage,
+                  (JSON..=) "InstanceMatchCriteria"
+                    Prelude.<$> instanceMatchCriteria,
+                  (JSON..=) "OutPostArn" Prelude.<$> outPostArn,
+                  (JSON..=) "PlacementGroupArn" Prelude.<$> placementGroupArn,
+                  (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                  (JSON..=) "Tenancy" Prelude.<$> tenancy,
+                  (JSON..=) "UnusedReservationBillingOwnerId"
+                    Prelude.<$> unusedReservationBillingOwnerId])))
+instance Property "AvailabilityZone" CapacityReservation where
+  type PropertyType "AvailabilityZone" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation
+        {availabilityZone = Prelude.pure newValue, ..}
+instance Property "AvailabilityZoneId" CapacityReservation where
+  type PropertyType "AvailabilityZoneId" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation
+        {availabilityZoneId = Prelude.pure newValue, ..}
+instance Property "EbsOptimized" CapacityReservation where
+  type PropertyType "EbsOptimized" CapacityReservation = Value Prelude.Bool
+  set newValue CapacityReservation {..}
+    = CapacityReservation {ebsOptimized = Prelude.pure newValue, ..}
+instance Property "EndDate" CapacityReservation where
+  type PropertyType "EndDate" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation {endDate = Prelude.pure newValue, ..}
+instance Property "EndDateType" CapacityReservation where
+  type PropertyType "EndDateType" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation {endDateType = Prelude.pure newValue, ..}
+instance Property "EphemeralStorage" CapacityReservation where
+  type PropertyType "EphemeralStorage" CapacityReservation = Value Prelude.Bool
+  set newValue CapacityReservation {..}
+    = CapacityReservation
+        {ephemeralStorage = Prelude.pure newValue, ..}
+instance Property "InstanceCount" CapacityReservation where
+  type PropertyType "InstanceCount" CapacityReservation = Value Prelude.Integer
+  set newValue CapacityReservation {..}
+    = CapacityReservation {instanceCount = newValue, ..}
+instance Property "InstanceMatchCriteria" CapacityReservation where
+  type PropertyType "InstanceMatchCriteria" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation
+        {instanceMatchCriteria = Prelude.pure newValue, ..}
+instance Property "InstancePlatform" CapacityReservation where
+  type PropertyType "InstancePlatform" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation {instancePlatform = newValue, ..}
+instance Property "InstanceType" CapacityReservation where
+  type PropertyType "InstanceType" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation {instanceType = newValue, ..}
+instance Property "OutPostArn" CapacityReservation where
+  type PropertyType "OutPostArn" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation {outPostArn = Prelude.pure newValue, ..}
+instance Property "PlacementGroupArn" CapacityReservation where
+  type PropertyType "PlacementGroupArn" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation
+        {placementGroupArn = Prelude.pure newValue, ..}
+instance Property "TagSpecifications" CapacityReservation where
+  type PropertyType "TagSpecifications" CapacityReservation = [TagSpecificationProperty]
+  set newValue CapacityReservation {..}
+    = CapacityReservation
+        {tagSpecifications = Prelude.pure newValue, ..}
+instance Property "Tenancy" CapacityReservation where
+  type PropertyType "Tenancy" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation {tenancy = Prelude.pure newValue, ..}
+instance Property "UnusedReservationBillingOwnerId" CapacityReservation where
+  type PropertyType "UnusedReservationBillingOwnerId" CapacityReservation = Value Prelude.Text
+  set newValue CapacityReservation {..}
+    = CapacityReservation
+        {unusedReservationBillingOwnerId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/CapacityReservation/CapacityAllocationProperty.hs b/gen/Stratosphere/EC2/CapacityReservation/CapacityAllocationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservation/CapacityAllocationProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.EC2.CapacityReservation.CapacityAllocationProperty (
+        CapacityAllocationProperty(..), mkCapacityAllocationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityAllocationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-capacityallocation.html>
+    CapacityAllocationProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-capacityallocation.html#cfn-ec2-capacityreservation-capacityallocation-allocationtype>
+                                allocationType :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-capacityallocation.html#cfn-ec2-capacityreservation-capacityallocation-count>
+                                count :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityAllocationProperty :: CapacityAllocationProperty
+mkCapacityAllocationProperty
+  = CapacityAllocationProperty
+      {haddock_workaround_ = (), allocationType = Prelude.Nothing,
+       count = Prelude.Nothing}
+instance ToResourceProperties CapacityAllocationProperty where
+  toResourceProperties CapacityAllocationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CapacityReservation.CapacityAllocation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationType" Prelude.<$> allocationType,
+                            (JSON..=) "Count" Prelude.<$> count])}
+instance JSON.ToJSON CapacityAllocationProperty where
+  toJSON CapacityAllocationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationType" Prelude.<$> allocationType,
+               (JSON..=) "Count" Prelude.<$> count]))
+instance Property "AllocationType" CapacityAllocationProperty where
+  type PropertyType "AllocationType" CapacityAllocationProperty = Value Prelude.Text
+  set newValue CapacityAllocationProperty {..}
+    = CapacityAllocationProperty
+        {allocationType = Prelude.pure newValue, ..}
+instance Property "Count" CapacityAllocationProperty where
+  type PropertyType "Count" CapacityAllocationProperty = Value Prelude.Integer
+  set newValue CapacityAllocationProperty {..}
+    = CapacityAllocationProperty {count = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/CapacityReservation/CapacityAllocationProperty.hs-boot b/gen/Stratosphere/EC2/CapacityReservation/CapacityAllocationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservation/CapacityAllocationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.CapacityReservation.CapacityAllocationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityAllocationProperty :: Prelude.Type
+instance ToResourceProperties CapacityAllocationProperty
+instance Prelude.Eq CapacityAllocationProperty
+instance Prelude.Show CapacityAllocationProperty
+instance JSON.ToJSON CapacityAllocationProperty
diff --git a/gen/Stratosphere/EC2/CapacityReservation/CommitmentInfoProperty.hs b/gen/Stratosphere/EC2/CapacityReservation/CommitmentInfoProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservation/CommitmentInfoProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.CapacityReservation.CommitmentInfoProperty (
+        CommitmentInfoProperty(..), mkCommitmentInfoProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CommitmentInfoProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-commitmentinfo.html>
+    CommitmentInfoProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-commitmentinfo.html#cfn-ec2-capacityreservation-commitmentinfo-commitmentenddate>
+                            commitmentEndDate :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-commitmentinfo.html#cfn-ec2-capacityreservation-commitmentinfo-committedinstancecount>
+                            committedInstanceCount :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCommitmentInfoProperty :: CommitmentInfoProperty
+mkCommitmentInfoProperty
+  = CommitmentInfoProperty
+      {haddock_workaround_ = (), commitmentEndDate = Prelude.Nothing,
+       committedInstanceCount = Prelude.Nothing}
+instance ToResourceProperties CommitmentInfoProperty where
+  toResourceProperties CommitmentInfoProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CapacityReservation.CommitmentInfo",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CommitmentEndDate" Prelude.<$> commitmentEndDate,
+                            (JSON..=) "CommittedInstanceCount"
+                              Prelude.<$> committedInstanceCount])}
+instance JSON.ToJSON CommitmentInfoProperty where
+  toJSON CommitmentInfoProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CommitmentEndDate" Prelude.<$> commitmentEndDate,
+               (JSON..=) "CommittedInstanceCount"
+                 Prelude.<$> committedInstanceCount]))
+instance Property "CommitmentEndDate" CommitmentInfoProperty where
+  type PropertyType "CommitmentEndDate" CommitmentInfoProperty = Value Prelude.Text
+  set newValue CommitmentInfoProperty {..}
+    = CommitmentInfoProperty
+        {commitmentEndDate = Prelude.pure newValue, ..}
+instance Property "CommittedInstanceCount" CommitmentInfoProperty where
+  type PropertyType "CommittedInstanceCount" CommitmentInfoProperty = Value Prelude.Integer
+  set newValue CommitmentInfoProperty {..}
+    = CommitmentInfoProperty
+        {committedInstanceCount = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/CapacityReservation/CommitmentInfoProperty.hs-boot b/gen/Stratosphere/EC2/CapacityReservation/CommitmentInfoProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservation/CommitmentInfoProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.CapacityReservation.CommitmentInfoProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CommitmentInfoProperty :: Prelude.Type
+instance ToResourceProperties CommitmentInfoProperty
+instance Prelude.Eq CommitmentInfoProperty
+instance Prelude.Show CommitmentInfoProperty
+instance JSON.ToJSON CommitmentInfoProperty
diff --git a/gen/Stratosphere/EC2/CapacityReservation/TagSpecificationProperty.hs b/gen/Stratosphere/EC2/CapacityReservation/TagSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservation/TagSpecificationProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.CapacityReservation.TagSpecificationProperty (
+        TagSpecificationProperty(..), mkTagSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TagSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-tagspecification.html>
+    TagSpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-tagspecification.html#cfn-ec2-capacityreservation-tagspecification-resourcetype>
+                              resourceType :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservation-tagspecification.html#cfn-ec2-capacityreservation-tagspecification-tags>
+                              tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTagSpecificationProperty :: TagSpecificationProperty
+mkTagSpecificationProperty
+  = TagSpecificationProperty
+      {haddock_workaround_ = (), resourceType = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties TagSpecificationProperty where
+  toResourceProperties TagSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CapacityReservation.TagSpecification",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON TagSpecificationProperty where
+  toJSON TagSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ResourceType" TagSpecificationProperty where
+  type PropertyType "ResourceType" TagSpecificationProperty = Value Prelude.Text
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty
+        {resourceType = Prelude.pure newValue, ..}
+instance Property "Tags" TagSpecificationProperty where
+  type PropertyType "Tags" TagSpecificationProperty = [Tag]
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/CapacityReservation/TagSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/CapacityReservation/TagSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservation/TagSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.CapacityReservation.TagSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TagSpecificationProperty :: Prelude.Type
+instance ToResourceProperties TagSpecificationProperty
+instance Prelude.Eq TagSpecificationProperty
+instance Prelude.Show TagSpecificationProperty
+instance JSON.ToJSON TagSpecificationProperty
diff --git a/gen/Stratosphere/EC2/CapacityReservationFleet.hs b/gen/Stratosphere/EC2/CapacityReservationFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservationFleet.hs
@@ -0,0 +1,119 @@
+module Stratosphere.EC2.CapacityReservationFleet (
+        module Exports, CapacityReservationFleet(..),
+        mkCapacityReservationFleet
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.CapacityReservationFleet.InstanceTypeSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.CapacityReservationFleet.TagSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityReservationFleet
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html>
+    CapacityReservationFleet {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html#cfn-ec2-capacityreservationfleet-allocationstrategy>
+                              allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html#cfn-ec2-capacityreservationfleet-enddate>
+                              endDate :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html#cfn-ec2-capacityreservationfleet-instancematchcriteria>
+                              instanceMatchCriteria :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html#cfn-ec2-capacityreservationfleet-instancetypespecifications>
+                              instanceTypeSpecifications :: (Prelude.Maybe [InstanceTypeSpecificationProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html#cfn-ec2-capacityreservationfleet-noremoveenddate>
+                              noRemoveEndDate :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html#cfn-ec2-capacityreservationfleet-removeenddate>
+                              removeEndDate :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html#cfn-ec2-capacityreservationfleet-tagspecifications>
+                              tagSpecifications :: (Prelude.Maybe [TagSpecificationProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html#cfn-ec2-capacityreservationfleet-tenancy>
+                              tenancy :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-capacityreservationfleet.html#cfn-ec2-capacityreservationfleet-totaltargetcapacity>
+                              totalTargetCapacity :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityReservationFleet :: CapacityReservationFleet
+mkCapacityReservationFleet
+  = CapacityReservationFleet
+      {haddock_workaround_ = (), allocationStrategy = Prelude.Nothing,
+       endDate = Prelude.Nothing, instanceMatchCriteria = Prelude.Nothing,
+       instanceTypeSpecifications = Prelude.Nothing,
+       noRemoveEndDate = Prelude.Nothing, removeEndDate = Prelude.Nothing,
+       tagSpecifications = Prelude.Nothing, tenancy = Prelude.Nothing,
+       totalTargetCapacity = Prelude.Nothing}
+instance ToResourceProperties CapacityReservationFleet where
+  toResourceProperties CapacityReservationFleet {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CapacityReservationFleet",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                            (JSON..=) "EndDate" Prelude.<$> endDate,
+                            (JSON..=) "InstanceMatchCriteria"
+                              Prelude.<$> instanceMatchCriteria,
+                            (JSON..=) "InstanceTypeSpecifications"
+                              Prelude.<$> instanceTypeSpecifications,
+                            (JSON..=) "NoRemoveEndDate" Prelude.<$> noRemoveEndDate,
+                            (JSON..=) "RemoveEndDate" Prelude.<$> removeEndDate,
+                            (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                            (JSON..=) "Tenancy" Prelude.<$> tenancy,
+                            (JSON..=) "TotalTargetCapacity" Prelude.<$> totalTargetCapacity])}
+instance JSON.ToJSON CapacityReservationFleet where
+  toJSON CapacityReservationFleet {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+               (JSON..=) "EndDate" Prelude.<$> endDate,
+               (JSON..=) "InstanceMatchCriteria"
+                 Prelude.<$> instanceMatchCriteria,
+               (JSON..=) "InstanceTypeSpecifications"
+                 Prelude.<$> instanceTypeSpecifications,
+               (JSON..=) "NoRemoveEndDate" Prelude.<$> noRemoveEndDate,
+               (JSON..=) "RemoveEndDate" Prelude.<$> removeEndDate,
+               (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+               (JSON..=) "Tenancy" Prelude.<$> tenancy,
+               (JSON..=) "TotalTargetCapacity" Prelude.<$> totalTargetCapacity]))
+instance Property "AllocationStrategy" CapacityReservationFleet where
+  type PropertyType "AllocationStrategy" CapacityReservationFleet = Value Prelude.Text
+  set newValue CapacityReservationFleet {..}
+    = CapacityReservationFleet
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "EndDate" CapacityReservationFleet where
+  type PropertyType "EndDate" CapacityReservationFleet = Value Prelude.Text
+  set newValue CapacityReservationFleet {..}
+    = CapacityReservationFleet {endDate = Prelude.pure newValue, ..}
+instance Property "InstanceMatchCriteria" CapacityReservationFleet where
+  type PropertyType "InstanceMatchCriteria" CapacityReservationFleet = Value Prelude.Text
+  set newValue CapacityReservationFleet {..}
+    = CapacityReservationFleet
+        {instanceMatchCriteria = Prelude.pure newValue, ..}
+instance Property "InstanceTypeSpecifications" CapacityReservationFleet where
+  type PropertyType "InstanceTypeSpecifications" CapacityReservationFleet = [InstanceTypeSpecificationProperty]
+  set newValue CapacityReservationFleet {..}
+    = CapacityReservationFleet
+        {instanceTypeSpecifications = Prelude.pure newValue, ..}
+instance Property "NoRemoveEndDate" CapacityReservationFleet where
+  type PropertyType "NoRemoveEndDate" CapacityReservationFleet = Value Prelude.Bool
+  set newValue CapacityReservationFleet {..}
+    = CapacityReservationFleet
+        {noRemoveEndDate = Prelude.pure newValue, ..}
+instance Property "RemoveEndDate" CapacityReservationFleet where
+  type PropertyType "RemoveEndDate" CapacityReservationFleet = Value Prelude.Bool
+  set newValue CapacityReservationFleet {..}
+    = CapacityReservationFleet
+        {removeEndDate = Prelude.pure newValue, ..}
+instance Property "TagSpecifications" CapacityReservationFleet where
+  type PropertyType "TagSpecifications" CapacityReservationFleet = [TagSpecificationProperty]
+  set newValue CapacityReservationFleet {..}
+    = CapacityReservationFleet
+        {tagSpecifications = Prelude.pure newValue, ..}
+instance Property "Tenancy" CapacityReservationFleet where
+  type PropertyType "Tenancy" CapacityReservationFleet = Value Prelude.Text
+  set newValue CapacityReservationFleet {..}
+    = CapacityReservationFleet {tenancy = Prelude.pure newValue, ..}
+instance Property "TotalTargetCapacity" CapacityReservationFleet where
+  type PropertyType "TotalTargetCapacity" CapacityReservationFleet = Value Prelude.Integer
+  set newValue CapacityReservationFleet {..}
+    = CapacityReservationFleet
+        {totalTargetCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/CapacityReservationFleet/InstanceTypeSpecificationProperty.hs b/gen/Stratosphere/EC2/CapacityReservationFleet/InstanceTypeSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservationFleet/InstanceTypeSpecificationProperty.hs
@@ -0,0 +1,97 @@
+module Stratosphere.EC2.CapacityReservationFleet.InstanceTypeSpecificationProperty (
+        InstanceTypeSpecificationProperty(..),
+        mkInstanceTypeSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceTypeSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-instancetypespecification.html>
+    InstanceTypeSpecificationProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-instancetypespecification.html#cfn-ec2-capacityreservationfleet-instancetypespecification-availabilityzone>
+                                       availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-instancetypespecification.html#cfn-ec2-capacityreservationfleet-instancetypespecification-availabilityzoneid>
+                                       availabilityZoneId :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-instancetypespecification.html#cfn-ec2-capacityreservationfleet-instancetypespecification-ebsoptimized>
+                                       ebsOptimized :: (Prelude.Maybe (Value Prelude.Bool)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-instancetypespecification.html#cfn-ec2-capacityreservationfleet-instancetypespecification-instanceplatform>
+                                       instancePlatform :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-instancetypespecification.html#cfn-ec2-capacityreservationfleet-instancetypespecification-instancetype>
+                                       instanceType :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-instancetypespecification.html#cfn-ec2-capacityreservationfleet-instancetypespecification-priority>
+                                       priority :: (Prelude.Maybe (Value Prelude.Integer)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-instancetypespecification.html#cfn-ec2-capacityreservationfleet-instancetypespecification-weight>
+                                       weight :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceTypeSpecificationProperty ::
+  InstanceTypeSpecificationProperty
+mkInstanceTypeSpecificationProperty
+  = InstanceTypeSpecificationProperty
+      {haddock_workaround_ = (), availabilityZone = Prelude.Nothing,
+       availabilityZoneId = Prelude.Nothing,
+       ebsOptimized = Prelude.Nothing, instancePlatform = Prelude.Nothing,
+       instanceType = Prelude.Nothing, priority = Prelude.Nothing,
+       weight = Prelude.Nothing}
+instance ToResourceProperties InstanceTypeSpecificationProperty where
+  toResourceProperties InstanceTypeSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CapacityReservationFleet.InstanceTypeSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                            (JSON..=) "AvailabilityZoneId" Prelude.<$> availabilityZoneId,
+                            (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+                            (JSON..=) "InstancePlatform" Prelude.<$> instancePlatform,
+                            (JSON..=) "InstanceType" Prelude.<$> instanceType,
+                            (JSON..=) "Priority" Prelude.<$> priority,
+                            (JSON..=) "Weight" Prelude.<$> weight])}
+instance JSON.ToJSON InstanceTypeSpecificationProperty where
+  toJSON InstanceTypeSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+               (JSON..=) "AvailabilityZoneId" Prelude.<$> availabilityZoneId,
+               (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+               (JSON..=) "InstancePlatform" Prelude.<$> instancePlatform,
+               (JSON..=) "InstanceType" Prelude.<$> instanceType,
+               (JSON..=) "Priority" Prelude.<$> priority,
+               (JSON..=) "Weight" Prelude.<$> weight]))
+instance Property "AvailabilityZone" InstanceTypeSpecificationProperty where
+  type PropertyType "AvailabilityZone" InstanceTypeSpecificationProperty = Value Prelude.Text
+  set newValue InstanceTypeSpecificationProperty {..}
+    = InstanceTypeSpecificationProperty
+        {availabilityZone = Prelude.pure newValue, ..}
+instance Property "AvailabilityZoneId" InstanceTypeSpecificationProperty where
+  type PropertyType "AvailabilityZoneId" InstanceTypeSpecificationProperty = Value Prelude.Text
+  set newValue InstanceTypeSpecificationProperty {..}
+    = InstanceTypeSpecificationProperty
+        {availabilityZoneId = Prelude.pure newValue, ..}
+instance Property "EbsOptimized" InstanceTypeSpecificationProperty where
+  type PropertyType "EbsOptimized" InstanceTypeSpecificationProperty = Value Prelude.Bool
+  set newValue InstanceTypeSpecificationProperty {..}
+    = InstanceTypeSpecificationProperty
+        {ebsOptimized = Prelude.pure newValue, ..}
+instance Property "InstancePlatform" InstanceTypeSpecificationProperty where
+  type PropertyType "InstancePlatform" InstanceTypeSpecificationProperty = Value Prelude.Text
+  set newValue InstanceTypeSpecificationProperty {..}
+    = InstanceTypeSpecificationProperty
+        {instancePlatform = Prelude.pure newValue, ..}
+instance Property "InstanceType" InstanceTypeSpecificationProperty where
+  type PropertyType "InstanceType" InstanceTypeSpecificationProperty = Value Prelude.Text
+  set newValue InstanceTypeSpecificationProperty {..}
+    = InstanceTypeSpecificationProperty
+        {instanceType = Prelude.pure newValue, ..}
+instance Property "Priority" InstanceTypeSpecificationProperty where
+  type PropertyType "Priority" InstanceTypeSpecificationProperty = Value Prelude.Integer
+  set newValue InstanceTypeSpecificationProperty {..}
+    = InstanceTypeSpecificationProperty
+        {priority = Prelude.pure newValue, ..}
+instance Property "Weight" InstanceTypeSpecificationProperty where
+  type PropertyType "Weight" InstanceTypeSpecificationProperty = Value Prelude.Double
+  set newValue InstanceTypeSpecificationProperty {..}
+    = InstanceTypeSpecificationProperty
+        {weight = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/CapacityReservationFleet/InstanceTypeSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/CapacityReservationFleet/InstanceTypeSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservationFleet/InstanceTypeSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.CapacityReservationFleet.InstanceTypeSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceTypeSpecificationProperty :: Prelude.Type
+instance ToResourceProperties InstanceTypeSpecificationProperty
+instance Prelude.Eq InstanceTypeSpecificationProperty
+instance Prelude.Show InstanceTypeSpecificationProperty
+instance JSON.ToJSON InstanceTypeSpecificationProperty
diff --git a/gen/Stratosphere/EC2/CapacityReservationFleet/TagSpecificationProperty.hs b/gen/Stratosphere/EC2/CapacityReservationFleet/TagSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservationFleet/TagSpecificationProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.CapacityReservationFleet.TagSpecificationProperty (
+        TagSpecificationProperty(..), mkTagSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TagSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-tagspecification.html>
+    TagSpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-tagspecification.html#cfn-ec2-capacityreservationfleet-tagspecification-resourcetype>
+                              resourceType :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-capacityreservationfleet-tagspecification.html#cfn-ec2-capacityreservationfleet-tagspecification-tags>
+                              tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTagSpecificationProperty :: TagSpecificationProperty
+mkTagSpecificationProperty
+  = TagSpecificationProperty
+      {haddock_workaround_ = (), resourceType = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties TagSpecificationProperty where
+  toResourceProperties TagSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CapacityReservationFleet.TagSpecification",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON TagSpecificationProperty where
+  toJSON TagSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ResourceType" TagSpecificationProperty where
+  type PropertyType "ResourceType" TagSpecificationProperty = Value Prelude.Text
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty
+        {resourceType = Prelude.pure newValue, ..}
+instance Property "Tags" TagSpecificationProperty where
+  type PropertyType "Tags" TagSpecificationProperty = [Tag]
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/CapacityReservationFleet/TagSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/CapacityReservationFleet/TagSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CapacityReservationFleet/TagSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.CapacityReservationFleet.TagSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TagSpecificationProperty :: Prelude.Type
+instance ToResourceProperties TagSpecificationProperty
+instance Prelude.Eq TagSpecificationProperty
+instance Prelude.Show TagSpecificationProperty
+instance JSON.ToJSON TagSpecificationProperty
diff --git a/gen/Stratosphere/EC2/CarrierGateway.hs b/gen/Stratosphere/EC2/CarrierGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CarrierGateway.hs
@@ -0,0 +1,44 @@
+module Stratosphere.EC2.CarrierGateway (
+        CarrierGateway(..), mkCarrierGateway
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data CarrierGateway
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-carriergateway.html>
+    CarrierGateway {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-carriergateway.html#cfn-ec2-carriergateway-tags>
+                    tags :: (Prelude.Maybe [Tag]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-carriergateway.html#cfn-ec2-carriergateway-vpcid>
+                    vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCarrierGateway :: Value Prelude.Text -> CarrierGateway
+mkCarrierGateway vpcId
+  = CarrierGateway
+      {haddock_workaround_ = (), vpcId = vpcId, tags = Prelude.Nothing}
+instance ToResourceProperties CarrierGateway where
+  toResourceProperties CarrierGateway {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CarrierGateway", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON CarrierGateway where
+  toJSON CarrierGateway {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcId" JSON..= vpcId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Tags" CarrierGateway where
+  type PropertyType "Tags" CarrierGateway = [Tag]
+  set newValue CarrierGateway {..}
+    = CarrierGateway {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" CarrierGateway where
+  type PropertyType "VpcId" CarrierGateway = Value Prelude.Text
+  set newValue CarrierGateway {..}
+    = CarrierGateway {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnAuthorizationRule.hs b/gen/Stratosphere/EC2/ClientVpnAuthorizationRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnAuthorizationRule.hs
@@ -0,0 +1,80 @@
+module Stratosphere.EC2.ClientVpnAuthorizationRule (
+        ClientVpnAuthorizationRule(..), mkClientVpnAuthorizationRule
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClientVpnAuthorizationRule
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnauthorizationrule.html>
+    ClientVpnAuthorizationRule {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnauthorizationrule.html#cfn-ec2-clientvpnauthorizationrule-accessgroupid>
+                                accessGroupId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnauthorizationrule.html#cfn-ec2-clientvpnauthorizationrule-authorizeallgroups>
+                                authorizeAllGroups :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnauthorizationrule.html#cfn-ec2-clientvpnauthorizationrule-clientvpnendpointid>
+                                clientVpnEndpointId :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnauthorizationrule.html#cfn-ec2-clientvpnauthorizationrule-description>
+                                description :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnauthorizationrule.html#cfn-ec2-clientvpnauthorizationrule-targetnetworkcidr>
+                                targetNetworkCidr :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClientVpnAuthorizationRule ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> ClientVpnAuthorizationRule
+mkClientVpnAuthorizationRule clientVpnEndpointId targetNetworkCidr
+  = ClientVpnAuthorizationRule
+      {haddock_workaround_ = (),
+       clientVpnEndpointId = clientVpnEndpointId,
+       targetNetworkCidr = targetNetworkCidr,
+       accessGroupId = Prelude.Nothing,
+       authorizeAllGroups = Prelude.Nothing,
+       description = Prelude.Nothing}
+instance ToResourceProperties ClientVpnAuthorizationRule where
+  toResourceProperties ClientVpnAuthorizationRule {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnAuthorizationRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ClientVpnEndpointId" JSON..= clientVpnEndpointId,
+                            "TargetNetworkCidr" JSON..= targetNetworkCidr]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AccessGroupId" Prelude.<$> accessGroupId,
+                               (JSON..=) "AuthorizeAllGroups" Prelude.<$> authorizeAllGroups,
+                               (JSON..=) "Description" Prelude.<$> description]))}
+instance JSON.ToJSON ClientVpnAuthorizationRule where
+  toJSON ClientVpnAuthorizationRule {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ClientVpnEndpointId" JSON..= clientVpnEndpointId,
+               "TargetNetworkCidr" JSON..= targetNetworkCidr]
+              (Prelude.catMaybes
+                 [(JSON..=) "AccessGroupId" Prelude.<$> accessGroupId,
+                  (JSON..=) "AuthorizeAllGroups" Prelude.<$> authorizeAllGroups,
+                  (JSON..=) "Description" Prelude.<$> description])))
+instance Property "AccessGroupId" ClientVpnAuthorizationRule where
+  type PropertyType "AccessGroupId" ClientVpnAuthorizationRule = Value Prelude.Text
+  set newValue ClientVpnAuthorizationRule {..}
+    = ClientVpnAuthorizationRule
+        {accessGroupId = Prelude.pure newValue, ..}
+instance Property "AuthorizeAllGroups" ClientVpnAuthorizationRule where
+  type PropertyType "AuthorizeAllGroups" ClientVpnAuthorizationRule = Value Prelude.Bool
+  set newValue ClientVpnAuthorizationRule {..}
+    = ClientVpnAuthorizationRule
+        {authorizeAllGroups = Prelude.pure newValue, ..}
+instance Property "ClientVpnEndpointId" ClientVpnAuthorizationRule where
+  type PropertyType "ClientVpnEndpointId" ClientVpnAuthorizationRule = Value Prelude.Text
+  set newValue ClientVpnAuthorizationRule {..}
+    = ClientVpnAuthorizationRule {clientVpnEndpointId = newValue, ..}
+instance Property "Description" ClientVpnAuthorizationRule where
+  type PropertyType "Description" ClientVpnAuthorizationRule = Value Prelude.Text
+  set newValue ClientVpnAuthorizationRule {..}
+    = ClientVpnAuthorizationRule
+        {description = Prelude.pure newValue, ..}
+instance Property "TargetNetworkCidr" ClientVpnAuthorizationRule where
+  type PropertyType "TargetNetworkCidr" ClientVpnAuthorizationRule = Value Prelude.Text
+  set newValue ClientVpnAuthorizationRule {..}
+    = ClientVpnAuthorizationRule {targetNetworkCidr = newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint.hs
@@ -0,0 +1,212 @@
+module Stratosphere.EC2.ClientVpnEndpoint (
+        module Exports, ClientVpnEndpoint(..), mkClientVpnEndpoint
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.ClientVpnEndpoint.ClientAuthenticationRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.ClientVpnEndpoint.ClientConnectOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.ClientVpnEndpoint.ClientLoginBannerOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.ClientVpnEndpoint.ClientRouteEnforcementOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.ClientVpnEndpoint.ConnectionLogOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.ClientVpnEndpoint.TagSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClientVpnEndpoint
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html>
+    ClientVpnEndpoint {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-authenticationoptions>
+                       authenticationOptions :: [ClientAuthenticationRequestProperty],
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-clientcidrblock>
+                       clientCidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-clientconnectoptions>
+                       clientConnectOptions :: (Prelude.Maybe ClientConnectOptionsProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-clientloginbanneroptions>
+                       clientLoginBannerOptions :: (Prelude.Maybe ClientLoginBannerOptionsProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-clientrouteenforcementoptions>
+                       clientRouteEnforcementOptions :: (Prelude.Maybe ClientRouteEnforcementOptionsProperty),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-connectionlogoptions>
+                       connectionLogOptions :: ConnectionLogOptionsProperty,
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-description>
+                       description :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-disconnectonsessiontimeout>
+                       disconnectOnSessionTimeout :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-dnsservers>
+                       dnsServers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-securitygroupids>
+                       securityGroupIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-selfserviceportal>
+                       selfServicePortal :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-servercertificatearn>
+                       serverCertificateArn :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-sessiontimeouthours>
+                       sessionTimeoutHours :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-splittunnel>
+                       splitTunnel :: (Prelude.Maybe (Value Prelude.Bool)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-tagspecifications>
+                       tagSpecifications :: (Prelude.Maybe [TagSpecificationProperty]),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-transportprotocol>
+                       transportProtocol :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-vpcid>
+                       vpcId :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnendpoint.html#cfn-ec2-clientvpnendpoint-vpnport>
+                       vpnPort :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClientVpnEndpoint ::
+  [ClientAuthenticationRequestProperty]
+  -> ConnectionLogOptionsProperty
+     -> Value Prelude.Text -> ClientVpnEndpoint
+mkClientVpnEndpoint
+  authenticationOptions
+  connectionLogOptions
+  serverCertificateArn
+  = ClientVpnEndpoint
+      {haddock_workaround_ = (),
+       authenticationOptions = authenticationOptions,
+       connectionLogOptions = connectionLogOptions,
+       serverCertificateArn = serverCertificateArn,
+       clientCidrBlock = Prelude.Nothing,
+       clientConnectOptions = Prelude.Nothing,
+       clientLoginBannerOptions = Prelude.Nothing,
+       clientRouteEnforcementOptions = Prelude.Nothing,
+       description = Prelude.Nothing,
+       disconnectOnSessionTimeout = Prelude.Nothing,
+       dnsServers = Prelude.Nothing, securityGroupIds = Prelude.Nothing,
+       selfServicePortal = Prelude.Nothing,
+       sessionTimeoutHours = Prelude.Nothing,
+       splitTunnel = Prelude.Nothing, tagSpecifications = Prelude.Nothing,
+       transportProtocol = Prelude.Nothing, vpcId = Prelude.Nothing,
+       vpnPort = Prelude.Nothing}
+instance ToResourceProperties ClientVpnEndpoint where
+  toResourceProperties ClientVpnEndpoint {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AuthenticationOptions" JSON..= authenticationOptions,
+                            "ConnectionLogOptions" JSON..= connectionLogOptions,
+                            "ServerCertificateArn" JSON..= serverCertificateArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ClientCidrBlock" Prelude.<$> clientCidrBlock,
+                               (JSON..=) "ClientConnectOptions" Prelude.<$> clientConnectOptions,
+                               (JSON..=) "ClientLoginBannerOptions"
+                                 Prelude.<$> clientLoginBannerOptions,
+                               (JSON..=) "ClientRouteEnforcementOptions"
+                                 Prelude.<$> clientRouteEnforcementOptions,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DisconnectOnSessionTimeout"
+                                 Prelude.<$> disconnectOnSessionTimeout,
+                               (JSON..=) "DnsServers" Prelude.<$> dnsServers,
+                               (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                               (JSON..=) "SelfServicePortal" Prelude.<$> selfServicePortal,
+                               (JSON..=) "SessionTimeoutHours" Prelude.<$> sessionTimeoutHours,
+                               (JSON..=) "SplitTunnel" Prelude.<$> splitTunnel,
+                               (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                               (JSON..=) "TransportProtocol" Prelude.<$> transportProtocol,
+                               (JSON..=) "VpcId" Prelude.<$> vpcId,
+                               (JSON..=) "VpnPort" Prelude.<$> vpnPort]))}
+instance JSON.ToJSON ClientVpnEndpoint where
+  toJSON ClientVpnEndpoint {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AuthenticationOptions" JSON..= authenticationOptions,
+               "ConnectionLogOptions" JSON..= connectionLogOptions,
+               "ServerCertificateArn" JSON..= serverCertificateArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "ClientCidrBlock" Prelude.<$> clientCidrBlock,
+                  (JSON..=) "ClientConnectOptions" Prelude.<$> clientConnectOptions,
+                  (JSON..=) "ClientLoginBannerOptions"
+                    Prelude.<$> clientLoginBannerOptions,
+                  (JSON..=) "ClientRouteEnforcementOptions"
+                    Prelude.<$> clientRouteEnforcementOptions,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DisconnectOnSessionTimeout"
+                    Prelude.<$> disconnectOnSessionTimeout,
+                  (JSON..=) "DnsServers" Prelude.<$> dnsServers,
+                  (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                  (JSON..=) "SelfServicePortal" Prelude.<$> selfServicePortal,
+                  (JSON..=) "SessionTimeoutHours" Prelude.<$> sessionTimeoutHours,
+                  (JSON..=) "SplitTunnel" Prelude.<$> splitTunnel,
+                  (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                  (JSON..=) "TransportProtocol" Prelude.<$> transportProtocol,
+                  (JSON..=) "VpcId" Prelude.<$> vpcId,
+                  (JSON..=) "VpnPort" Prelude.<$> vpnPort])))
+instance Property "AuthenticationOptions" ClientVpnEndpoint where
+  type PropertyType "AuthenticationOptions" ClientVpnEndpoint = [ClientAuthenticationRequestProperty]
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {authenticationOptions = newValue, ..}
+instance Property "ClientCidrBlock" ClientVpnEndpoint where
+  type PropertyType "ClientCidrBlock" ClientVpnEndpoint = Value Prelude.Text
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {clientCidrBlock = Prelude.pure newValue, ..}
+instance Property "ClientConnectOptions" ClientVpnEndpoint where
+  type PropertyType "ClientConnectOptions" ClientVpnEndpoint = ClientConnectOptionsProperty
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint
+        {clientConnectOptions = Prelude.pure newValue, ..}
+instance Property "ClientLoginBannerOptions" ClientVpnEndpoint where
+  type PropertyType "ClientLoginBannerOptions" ClientVpnEndpoint = ClientLoginBannerOptionsProperty
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint
+        {clientLoginBannerOptions = Prelude.pure newValue, ..}
+instance Property "ClientRouteEnforcementOptions" ClientVpnEndpoint where
+  type PropertyType "ClientRouteEnforcementOptions" ClientVpnEndpoint = ClientRouteEnforcementOptionsProperty
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint
+        {clientRouteEnforcementOptions = Prelude.pure newValue, ..}
+instance Property "ConnectionLogOptions" ClientVpnEndpoint where
+  type PropertyType "ConnectionLogOptions" ClientVpnEndpoint = ConnectionLogOptionsProperty
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {connectionLogOptions = newValue, ..}
+instance Property "Description" ClientVpnEndpoint where
+  type PropertyType "Description" ClientVpnEndpoint = Value Prelude.Text
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {description = Prelude.pure newValue, ..}
+instance Property "DisconnectOnSessionTimeout" ClientVpnEndpoint where
+  type PropertyType "DisconnectOnSessionTimeout" ClientVpnEndpoint = Value Prelude.Bool
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint
+        {disconnectOnSessionTimeout = Prelude.pure newValue, ..}
+instance Property "DnsServers" ClientVpnEndpoint where
+  type PropertyType "DnsServers" ClientVpnEndpoint = ValueList Prelude.Text
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {dnsServers = Prelude.pure newValue, ..}
+instance Property "SecurityGroupIds" ClientVpnEndpoint where
+  type PropertyType "SecurityGroupIds" ClientVpnEndpoint = ValueList Prelude.Text
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {securityGroupIds = Prelude.pure newValue, ..}
+instance Property "SelfServicePortal" ClientVpnEndpoint where
+  type PropertyType "SelfServicePortal" ClientVpnEndpoint = Value Prelude.Text
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {selfServicePortal = Prelude.pure newValue, ..}
+instance Property "ServerCertificateArn" ClientVpnEndpoint where
+  type PropertyType "ServerCertificateArn" ClientVpnEndpoint = Value Prelude.Text
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {serverCertificateArn = newValue, ..}
+instance Property "SessionTimeoutHours" ClientVpnEndpoint where
+  type PropertyType "SessionTimeoutHours" ClientVpnEndpoint = Value Prelude.Integer
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint
+        {sessionTimeoutHours = Prelude.pure newValue, ..}
+instance Property "SplitTunnel" ClientVpnEndpoint where
+  type PropertyType "SplitTunnel" ClientVpnEndpoint = Value Prelude.Bool
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {splitTunnel = Prelude.pure newValue, ..}
+instance Property "TagSpecifications" ClientVpnEndpoint where
+  type PropertyType "TagSpecifications" ClientVpnEndpoint = [TagSpecificationProperty]
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {tagSpecifications = Prelude.pure newValue, ..}
+instance Property "TransportProtocol" ClientVpnEndpoint where
+  type PropertyType "TransportProtocol" ClientVpnEndpoint = Value Prelude.Text
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {transportProtocol = Prelude.pure newValue, ..}
+instance Property "VpcId" ClientVpnEndpoint where
+  type PropertyType "VpcId" ClientVpnEndpoint = Value Prelude.Text
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {vpcId = Prelude.pure newValue, ..}
+instance Property "VpnPort" ClientVpnEndpoint where
+  type PropertyType "VpnPort" ClientVpnEndpoint = Value Prelude.Integer
+  set newValue ClientVpnEndpoint {..}
+    = ClientVpnEndpoint {vpnPort = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/CertificateAuthenticationRequestProperty.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint/CertificateAuthenticationRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/CertificateAuthenticationRequestProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.ClientVpnEndpoint.CertificateAuthenticationRequestProperty (
+        CertificateAuthenticationRequestProperty(..),
+        mkCertificateAuthenticationRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CertificateAuthenticationRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-certificateauthenticationrequest.html>
+    CertificateAuthenticationRequestProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-certificateauthenticationrequest.html#cfn-ec2-clientvpnendpoint-certificateauthenticationrequest-clientrootcertificatechainarn>
+                                              clientRootCertificateChainArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCertificateAuthenticationRequestProperty ::
+  Value Prelude.Text -> CertificateAuthenticationRequestProperty
+mkCertificateAuthenticationRequestProperty
+  clientRootCertificateChainArn
+  = CertificateAuthenticationRequestProperty
+      {haddock_workaround_ = (),
+       clientRootCertificateChainArn = clientRootCertificateChainArn}
+instance ToResourceProperties CertificateAuthenticationRequestProperty where
+  toResourceProperties CertificateAuthenticationRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint.CertificateAuthenticationRequest",
+         supportsTags = Prelude.False,
+         properties = ["ClientRootCertificateChainArn"
+                         JSON..= clientRootCertificateChainArn]}
+instance JSON.ToJSON CertificateAuthenticationRequestProperty where
+  toJSON CertificateAuthenticationRequestProperty {..}
+    = JSON.object
+        ["ClientRootCertificateChainArn"
+           JSON..= clientRootCertificateChainArn]
+instance Property "ClientRootCertificateChainArn" CertificateAuthenticationRequestProperty where
+  type PropertyType "ClientRootCertificateChainArn" CertificateAuthenticationRequestProperty = Value Prelude.Text
+  set newValue CertificateAuthenticationRequestProperty {..}
+    = CertificateAuthenticationRequestProperty
+        {clientRootCertificateChainArn = newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/CertificateAuthenticationRequestProperty.hs-boot b/gen/Stratosphere/EC2/ClientVpnEndpoint/CertificateAuthenticationRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/CertificateAuthenticationRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.ClientVpnEndpoint.CertificateAuthenticationRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CertificateAuthenticationRequestProperty :: Prelude.Type
+instance ToResourceProperties CertificateAuthenticationRequestProperty
+instance Prelude.Eq CertificateAuthenticationRequestProperty
+instance Prelude.Show CertificateAuthenticationRequestProperty
+instance JSON.ToJSON CertificateAuthenticationRequestProperty
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientAuthenticationRequestProperty.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientAuthenticationRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientAuthenticationRequestProperty.hs
@@ -0,0 +1,77 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ClientAuthenticationRequestProperty (
+        module Exports, ClientAuthenticationRequestProperty(..),
+        mkClientAuthenticationRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.ClientVpnEndpoint.CertificateAuthenticationRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.ClientVpnEndpoint.DirectoryServiceAuthenticationRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.ClientVpnEndpoint.FederatedAuthenticationRequestProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClientAuthenticationRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientauthenticationrequest.html>
+    ClientAuthenticationRequestProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientauthenticationrequest.html#cfn-ec2-clientvpnendpoint-clientauthenticationrequest-activedirectory>
+                                         activeDirectory :: (Prelude.Maybe DirectoryServiceAuthenticationRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientauthenticationrequest.html#cfn-ec2-clientvpnendpoint-clientauthenticationrequest-federatedauthentication>
+                                         federatedAuthentication :: (Prelude.Maybe FederatedAuthenticationRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientauthenticationrequest.html#cfn-ec2-clientvpnendpoint-clientauthenticationrequest-mutualauthentication>
+                                         mutualAuthentication :: (Prelude.Maybe CertificateAuthenticationRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientauthenticationrequest.html#cfn-ec2-clientvpnendpoint-clientauthenticationrequest-type>
+                                         type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClientAuthenticationRequestProperty ::
+  Value Prelude.Text -> ClientAuthenticationRequestProperty
+mkClientAuthenticationRequestProperty type'
+  = ClientAuthenticationRequestProperty
+      {haddock_workaround_ = (), type' = type',
+       activeDirectory = Prelude.Nothing,
+       federatedAuthentication = Prelude.Nothing,
+       mutualAuthentication = Prelude.Nothing}
+instance ToResourceProperties ClientAuthenticationRequestProperty where
+  toResourceProperties ClientAuthenticationRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint.ClientAuthenticationRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "ActiveDirectory" Prelude.<$> activeDirectory,
+                               (JSON..=) "FederatedAuthentication"
+                                 Prelude.<$> federatedAuthentication,
+                               (JSON..=) "MutualAuthentication"
+                                 Prelude.<$> mutualAuthentication]))}
+instance JSON.ToJSON ClientAuthenticationRequestProperty where
+  toJSON ClientAuthenticationRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "ActiveDirectory" Prelude.<$> activeDirectory,
+                  (JSON..=) "FederatedAuthentication"
+                    Prelude.<$> federatedAuthentication,
+                  (JSON..=) "MutualAuthentication"
+                    Prelude.<$> mutualAuthentication])))
+instance Property "ActiveDirectory" ClientAuthenticationRequestProperty where
+  type PropertyType "ActiveDirectory" ClientAuthenticationRequestProperty = DirectoryServiceAuthenticationRequestProperty
+  set newValue ClientAuthenticationRequestProperty {..}
+    = ClientAuthenticationRequestProperty
+        {activeDirectory = Prelude.pure newValue, ..}
+instance Property "FederatedAuthentication" ClientAuthenticationRequestProperty where
+  type PropertyType "FederatedAuthentication" ClientAuthenticationRequestProperty = FederatedAuthenticationRequestProperty
+  set newValue ClientAuthenticationRequestProperty {..}
+    = ClientAuthenticationRequestProperty
+        {federatedAuthentication = Prelude.pure newValue, ..}
+instance Property "MutualAuthentication" ClientAuthenticationRequestProperty where
+  type PropertyType "MutualAuthentication" ClientAuthenticationRequestProperty = CertificateAuthenticationRequestProperty
+  set newValue ClientAuthenticationRequestProperty {..}
+    = ClientAuthenticationRequestProperty
+        {mutualAuthentication = Prelude.pure newValue, ..}
+instance Property "Type" ClientAuthenticationRequestProperty where
+  type PropertyType "Type" ClientAuthenticationRequestProperty = Value Prelude.Text
+  set newValue ClientAuthenticationRequestProperty {..}
+    = ClientAuthenticationRequestProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientAuthenticationRequestProperty.hs-boot b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientAuthenticationRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientAuthenticationRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ClientAuthenticationRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ClientAuthenticationRequestProperty :: Prelude.Type
+instance ToResourceProperties ClientAuthenticationRequestProperty
+instance Prelude.Eq ClientAuthenticationRequestProperty
+instance Prelude.Show ClientAuthenticationRequestProperty
+instance JSON.ToJSON ClientAuthenticationRequestProperty
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientConnectOptionsProperty.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientConnectOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientConnectOptionsProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ClientConnectOptionsProperty (
+        ClientConnectOptionsProperty(..), mkClientConnectOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClientConnectOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientconnectoptions.html>
+    ClientConnectOptionsProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientconnectoptions.html#cfn-ec2-clientvpnendpoint-clientconnectoptions-enabled>
+                                  enabled :: (Value Prelude.Bool),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientconnectoptions.html#cfn-ec2-clientvpnendpoint-clientconnectoptions-lambdafunctionarn>
+                                  lambdaFunctionArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClientConnectOptionsProperty ::
+  Value Prelude.Bool -> ClientConnectOptionsProperty
+mkClientConnectOptionsProperty enabled
+  = ClientConnectOptionsProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       lambdaFunctionArn = Prelude.Nothing}
+instance ToResourceProperties ClientConnectOptionsProperty where
+  toResourceProperties ClientConnectOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint.ClientConnectOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LambdaFunctionArn" Prelude.<$> lambdaFunctionArn]))}
+instance JSON.ToJSON ClientConnectOptionsProperty where
+  toJSON ClientConnectOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "LambdaFunctionArn" Prelude.<$> lambdaFunctionArn])))
+instance Property "Enabled" ClientConnectOptionsProperty where
+  type PropertyType "Enabled" ClientConnectOptionsProperty = Value Prelude.Bool
+  set newValue ClientConnectOptionsProperty {..}
+    = ClientConnectOptionsProperty {enabled = newValue, ..}
+instance Property "LambdaFunctionArn" ClientConnectOptionsProperty where
+  type PropertyType "LambdaFunctionArn" ClientConnectOptionsProperty = Value Prelude.Text
+  set newValue ClientConnectOptionsProperty {..}
+    = ClientConnectOptionsProperty
+        {lambdaFunctionArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientConnectOptionsProperty.hs-boot b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientConnectOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientConnectOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ClientConnectOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ClientConnectOptionsProperty :: Prelude.Type
+instance ToResourceProperties ClientConnectOptionsProperty
+instance Prelude.Eq ClientConnectOptionsProperty
+instance Prelude.Show ClientConnectOptionsProperty
+instance JSON.ToJSON ClientConnectOptionsProperty
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientLoginBannerOptionsProperty.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientLoginBannerOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientLoginBannerOptionsProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ClientLoginBannerOptionsProperty (
+        ClientLoginBannerOptionsProperty(..),
+        mkClientLoginBannerOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClientLoginBannerOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientloginbanneroptions.html>
+    ClientLoginBannerOptionsProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientloginbanneroptions.html#cfn-ec2-clientvpnendpoint-clientloginbanneroptions-bannertext>
+                                      bannerText :: (Prelude.Maybe (Value Prelude.Text)),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientloginbanneroptions.html#cfn-ec2-clientvpnendpoint-clientloginbanneroptions-enabled>
+                                      enabled :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClientLoginBannerOptionsProperty ::
+  Value Prelude.Bool -> ClientLoginBannerOptionsProperty
+mkClientLoginBannerOptionsProperty enabled
+  = ClientLoginBannerOptionsProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       bannerText = Prelude.Nothing}
+instance ToResourceProperties ClientLoginBannerOptionsProperty where
+  toResourceProperties ClientLoginBannerOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint.ClientLoginBannerOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BannerText" Prelude.<$> bannerText]))}
+instance JSON.ToJSON ClientLoginBannerOptionsProperty where
+  toJSON ClientLoginBannerOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "BannerText" Prelude.<$> bannerText])))
+instance Property "BannerText" ClientLoginBannerOptionsProperty where
+  type PropertyType "BannerText" ClientLoginBannerOptionsProperty = Value Prelude.Text
+  set newValue ClientLoginBannerOptionsProperty {..}
+    = ClientLoginBannerOptionsProperty
+        {bannerText = Prelude.pure newValue, ..}
+instance Property "Enabled" ClientLoginBannerOptionsProperty where
+  type PropertyType "Enabled" ClientLoginBannerOptionsProperty = Value Prelude.Bool
+  set newValue ClientLoginBannerOptionsProperty {..}
+    = ClientLoginBannerOptionsProperty {enabled = newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientLoginBannerOptionsProperty.hs-boot b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientLoginBannerOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientLoginBannerOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ClientLoginBannerOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ClientLoginBannerOptionsProperty :: Prelude.Type
+instance ToResourceProperties ClientLoginBannerOptionsProperty
+instance Prelude.Eq ClientLoginBannerOptionsProperty
+instance Prelude.Show ClientLoginBannerOptionsProperty
+instance JSON.ToJSON ClientLoginBannerOptionsProperty
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientRouteEnforcementOptionsProperty.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientRouteEnforcementOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientRouteEnforcementOptionsProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ClientRouteEnforcementOptionsProperty (
+        ClientRouteEnforcementOptionsProperty(..),
+        mkClientRouteEnforcementOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClientRouteEnforcementOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientrouteenforcementoptions.html>
+    ClientRouteEnforcementOptionsProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-clientrouteenforcementoptions.html#cfn-ec2-clientvpnendpoint-clientrouteenforcementoptions-enforced>
+                                           enforced :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClientRouteEnforcementOptionsProperty ::
+  ClientRouteEnforcementOptionsProperty
+mkClientRouteEnforcementOptionsProperty
+  = ClientRouteEnforcementOptionsProperty
+      {haddock_workaround_ = (), enforced = Prelude.Nothing}
+instance ToResourceProperties ClientRouteEnforcementOptionsProperty where
+  toResourceProperties ClientRouteEnforcementOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint.ClientRouteEnforcementOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Enforced" Prelude.<$> enforced])}
+instance JSON.ToJSON ClientRouteEnforcementOptionsProperty where
+  toJSON ClientRouteEnforcementOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Enforced" Prelude.<$> enforced]))
+instance Property "Enforced" ClientRouteEnforcementOptionsProperty where
+  type PropertyType "Enforced" ClientRouteEnforcementOptionsProperty = Value Prelude.Bool
+  set newValue ClientRouteEnforcementOptionsProperty {..}
+    = ClientRouteEnforcementOptionsProperty
+        {enforced = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientRouteEnforcementOptionsProperty.hs-boot b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientRouteEnforcementOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ClientRouteEnforcementOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ClientRouteEnforcementOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ClientRouteEnforcementOptionsProperty :: Prelude.Type
+instance ToResourceProperties ClientRouteEnforcementOptionsProperty
+instance Prelude.Eq ClientRouteEnforcementOptionsProperty
+instance Prelude.Show ClientRouteEnforcementOptionsProperty
+instance JSON.ToJSON ClientRouteEnforcementOptionsProperty
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ConnectionLogOptionsProperty.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint/ConnectionLogOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ConnectionLogOptionsProperty.hs
@@ -0,0 +1,59 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ConnectionLogOptionsProperty (
+        ConnectionLogOptionsProperty(..), mkConnectionLogOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConnectionLogOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-connectionlogoptions.html>
+    ConnectionLogOptionsProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-connectionlogoptions.html#cfn-ec2-clientvpnendpoint-connectionlogoptions-cloudwatchloggroup>
+                                  cloudwatchLogGroup :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-connectionlogoptions.html#cfn-ec2-clientvpnendpoint-connectionlogoptions-cloudwatchlogstream>
+                                  cloudwatchLogStream :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-connectionlogoptions.html#cfn-ec2-clientvpnendpoint-connectionlogoptions-enabled>
+                                  enabled :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConnectionLogOptionsProperty ::
+  Value Prelude.Bool -> ConnectionLogOptionsProperty
+mkConnectionLogOptionsProperty enabled
+  = ConnectionLogOptionsProperty
+      {haddock_workaround_ = (), enabled = enabled,
+       cloudwatchLogGroup = Prelude.Nothing,
+       cloudwatchLogStream = Prelude.Nothing}
+instance ToResourceProperties ConnectionLogOptionsProperty where
+  toResourceProperties ConnectionLogOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint.ConnectionLogOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Enabled" JSON..= enabled]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CloudwatchLogGroup" Prelude.<$> cloudwatchLogGroup,
+                               (JSON..=) "CloudwatchLogStream" Prelude.<$> cloudwatchLogStream]))}
+instance JSON.ToJSON ConnectionLogOptionsProperty where
+  toJSON ConnectionLogOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Enabled" JSON..= enabled]
+              (Prelude.catMaybes
+                 [(JSON..=) "CloudwatchLogGroup" Prelude.<$> cloudwatchLogGroup,
+                  (JSON..=) "CloudwatchLogStream" Prelude.<$> cloudwatchLogStream])))
+instance Property "CloudwatchLogGroup" ConnectionLogOptionsProperty where
+  type PropertyType "CloudwatchLogGroup" ConnectionLogOptionsProperty = Value Prelude.Text
+  set newValue ConnectionLogOptionsProperty {..}
+    = ConnectionLogOptionsProperty
+        {cloudwatchLogGroup = Prelude.pure newValue, ..}
+instance Property "CloudwatchLogStream" ConnectionLogOptionsProperty where
+  type PropertyType "CloudwatchLogStream" ConnectionLogOptionsProperty = Value Prelude.Text
+  set newValue ConnectionLogOptionsProperty {..}
+    = ConnectionLogOptionsProperty
+        {cloudwatchLogStream = Prelude.pure newValue, ..}
+instance Property "Enabled" ConnectionLogOptionsProperty where
+  type PropertyType "Enabled" ConnectionLogOptionsProperty = Value Prelude.Bool
+  set newValue ConnectionLogOptionsProperty {..}
+    = ConnectionLogOptionsProperty {enabled = newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/ConnectionLogOptionsProperty.hs-boot b/gen/Stratosphere/EC2/ClientVpnEndpoint/ConnectionLogOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/ConnectionLogOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.ClientVpnEndpoint.ConnectionLogOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConnectionLogOptionsProperty :: Prelude.Type
+instance ToResourceProperties ConnectionLogOptionsProperty
+instance Prelude.Eq ConnectionLogOptionsProperty
+instance Prelude.Show ConnectionLogOptionsProperty
+instance JSON.ToJSON ConnectionLogOptionsProperty
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/DirectoryServiceAuthenticationRequestProperty.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint/DirectoryServiceAuthenticationRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/DirectoryServiceAuthenticationRequestProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.EC2.ClientVpnEndpoint.DirectoryServiceAuthenticationRequestProperty (
+        DirectoryServiceAuthenticationRequestProperty(..),
+        mkDirectoryServiceAuthenticationRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DirectoryServiceAuthenticationRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-directoryserviceauthenticationrequest.html>
+    DirectoryServiceAuthenticationRequestProperty {haddock_workaround_ :: (),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-directoryserviceauthenticationrequest.html#cfn-ec2-clientvpnendpoint-directoryserviceauthenticationrequest-directoryid>
+                                                   directoryId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDirectoryServiceAuthenticationRequestProperty ::
+  Value Prelude.Text -> DirectoryServiceAuthenticationRequestProperty
+mkDirectoryServiceAuthenticationRequestProperty directoryId
+  = DirectoryServiceAuthenticationRequestProperty
+      {haddock_workaround_ = (), directoryId = directoryId}
+instance ToResourceProperties DirectoryServiceAuthenticationRequestProperty where
+  toResourceProperties
+    DirectoryServiceAuthenticationRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint.DirectoryServiceAuthenticationRequest",
+         supportsTags = Prelude.False,
+         properties = ["DirectoryId" JSON..= directoryId]}
+instance JSON.ToJSON DirectoryServiceAuthenticationRequestProperty where
+  toJSON DirectoryServiceAuthenticationRequestProperty {..}
+    = JSON.object ["DirectoryId" JSON..= directoryId]
+instance Property "DirectoryId" DirectoryServiceAuthenticationRequestProperty where
+  type PropertyType "DirectoryId" DirectoryServiceAuthenticationRequestProperty = Value Prelude.Text
+  set newValue DirectoryServiceAuthenticationRequestProperty {..}
+    = DirectoryServiceAuthenticationRequestProperty
+        {directoryId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/DirectoryServiceAuthenticationRequestProperty.hs-boot b/gen/Stratosphere/EC2/ClientVpnEndpoint/DirectoryServiceAuthenticationRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/DirectoryServiceAuthenticationRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.ClientVpnEndpoint.DirectoryServiceAuthenticationRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DirectoryServiceAuthenticationRequestProperty :: Prelude.Type
+instance ToResourceProperties DirectoryServiceAuthenticationRequestProperty
+instance Prelude.Eq DirectoryServiceAuthenticationRequestProperty
+instance Prelude.Show DirectoryServiceAuthenticationRequestProperty
+instance JSON.ToJSON DirectoryServiceAuthenticationRequestProperty
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/FederatedAuthenticationRequestProperty.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint/FederatedAuthenticationRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/FederatedAuthenticationRequestProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.EC2.ClientVpnEndpoint.FederatedAuthenticationRequestProperty (
+        FederatedAuthenticationRequestProperty(..),
+        mkFederatedAuthenticationRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FederatedAuthenticationRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-federatedauthenticationrequest.html>
+    FederatedAuthenticationRequestProperty {haddock_workaround_ :: (),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-federatedauthenticationrequest.html#cfn-ec2-clientvpnendpoint-federatedauthenticationrequest-samlproviderarn>
+                                            sAMLProviderArn :: (Value Prelude.Text),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-federatedauthenticationrequest.html#cfn-ec2-clientvpnendpoint-federatedauthenticationrequest-selfservicesamlproviderarn>
+                                            selfServiceSAMLProviderArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFederatedAuthenticationRequestProperty ::
+  Value Prelude.Text -> FederatedAuthenticationRequestProperty
+mkFederatedAuthenticationRequestProperty sAMLProviderArn
+  = FederatedAuthenticationRequestProperty
+      {haddock_workaround_ = (), sAMLProviderArn = sAMLProviderArn,
+       selfServiceSAMLProviderArn = Prelude.Nothing}
+instance ToResourceProperties FederatedAuthenticationRequestProperty where
+  toResourceProperties FederatedAuthenticationRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint.FederatedAuthenticationRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SAMLProviderArn" JSON..= sAMLProviderArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SelfServiceSAMLProviderArn"
+                                 Prelude.<$> selfServiceSAMLProviderArn]))}
+instance JSON.ToJSON FederatedAuthenticationRequestProperty where
+  toJSON FederatedAuthenticationRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SAMLProviderArn" JSON..= sAMLProviderArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "SelfServiceSAMLProviderArn"
+                    Prelude.<$> selfServiceSAMLProviderArn])))
+instance Property "SAMLProviderArn" FederatedAuthenticationRequestProperty where
+  type PropertyType "SAMLProviderArn" FederatedAuthenticationRequestProperty = Value Prelude.Text
+  set newValue FederatedAuthenticationRequestProperty {..}
+    = FederatedAuthenticationRequestProperty
+        {sAMLProviderArn = newValue, ..}
+instance Property "SelfServiceSAMLProviderArn" FederatedAuthenticationRequestProperty where
+  type PropertyType "SelfServiceSAMLProviderArn" FederatedAuthenticationRequestProperty = Value Prelude.Text
+  set newValue FederatedAuthenticationRequestProperty {..}
+    = FederatedAuthenticationRequestProperty
+        {selfServiceSAMLProviderArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/FederatedAuthenticationRequestProperty.hs-boot b/gen/Stratosphere/EC2/ClientVpnEndpoint/FederatedAuthenticationRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/FederatedAuthenticationRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.ClientVpnEndpoint.FederatedAuthenticationRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FederatedAuthenticationRequestProperty :: Prelude.Type
+instance ToResourceProperties FederatedAuthenticationRequestProperty
+instance Prelude.Eq FederatedAuthenticationRequestProperty
+instance Prelude.Show FederatedAuthenticationRequestProperty
+instance JSON.ToJSON FederatedAuthenticationRequestProperty
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/TagSpecificationProperty.hs b/gen/Stratosphere/EC2/ClientVpnEndpoint/TagSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/TagSpecificationProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.EC2.ClientVpnEndpoint.TagSpecificationProperty (
+        TagSpecificationProperty(..), mkTagSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TagSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-tagspecification.html>
+    TagSpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-tagspecification.html#cfn-ec2-clientvpnendpoint-tagspecification-resourcetype>
+                              resourceType :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-clientvpnendpoint-tagspecification.html#cfn-ec2-clientvpnendpoint-tagspecification-tags>
+                              tags :: [Tag]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTagSpecificationProperty ::
+  Value Prelude.Text -> [Tag] -> TagSpecificationProperty
+mkTagSpecificationProperty resourceType tags
+  = TagSpecificationProperty
+      {haddock_workaround_ = (), resourceType = resourceType,
+       tags = tags}
+instance ToResourceProperties TagSpecificationProperty where
+  toResourceProperties TagSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnEndpoint.TagSpecification",
+         supportsTags = Prelude.True,
+         properties = ["ResourceType" JSON..= resourceType,
+                       "Tags" JSON..= tags]}
+instance JSON.ToJSON TagSpecificationProperty where
+  toJSON TagSpecificationProperty {..}
+    = JSON.object
+        ["ResourceType" JSON..= resourceType, "Tags" JSON..= tags]
+instance Property "ResourceType" TagSpecificationProperty where
+  type PropertyType "ResourceType" TagSpecificationProperty = Value Prelude.Text
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty {resourceType = newValue, ..}
+instance Property "Tags" TagSpecificationProperty where
+  type PropertyType "Tags" TagSpecificationProperty = [Tag]
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty {tags = newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnEndpoint/TagSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/ClientVpnEndpoint/TagSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnEndpoint/TagSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.ClientVpnEndpoint.TagSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TagSpecificationProperty :: Prelude.Type
+instance ToResourceProperties TagSpecificationProperty
+instance Prelude.Eq TagSpecificationProperty
+instance Prelude.Show TagSpecificationProperty
+instance JSON.ToJSON TagSpecificationProperty
diff --git a/gen/Stratosphere/EC2/ClientVpnRoute.hs b/gen/Stratosphere/EC2/ClientVpnRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnRoute.hs
@@ -0,0 +1,71 @@
+module Stratosphere.EC2.ClientVpnRoute (
+        ClientVpnRoute(..), mkClientVpnRoute
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClientVpnRoute
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnroute.html>
+    ClientVpnRoute {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnroute.html#cfn-ec2-clientvpnroute-clientvpnendpointid>
+                    clientVpnEndpointId :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnroute.html#cfn-ec2-clientvpnroute-description>
+                    description :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnroute.html#cfn-ec2-clientvpnroute-destinationcidrblock>
+                    destinationCidrBlock :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnroute.html#cfn-ec2-clientvpnroute-targetvpcsubnetid>
+                    targetVpcSubnetId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClientVpnRoute ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> Value Prelude.Text -> ClientVpnRoute
+mkClientVpnRoute
+  clientVpnEndpointId
+  destinationCidrBlock
+  targetVpcSubnetId
+  = ClientVpnRoute
+      {haddock_workaround_ = (),
+       clientVpnEndpointId = clientVpnEndpointId,
+       destinationCidrBlock = destinationCidrBlock,
+       targetVpcSubnetId = targetVpcSubnetId,
+       description = Prelude.Nothing}
+instance ToResourceProperties ClientVpnRoute where
+  toResourceProperties ClientVpnRoute {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnRoute",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ClientVpnEndpointId" JSON..= clientVpnEndpointId,
+                            "DestinationCidrBlock" JSON..= destinationCidrBlock,
+                            "TargetVpcSubnetId" JSON..= targetVpcSubnetId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description]))}
+instance JSON.ToJSON ClientVpnRoute where
+  toJSON ClientVpnRoute {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ClientVpnEndpointId" JSON..= clientVpnEndpointId,
+               "DestinationCidrBlock" JSON..= destinationCidrBlock,
+               "TargetVpcSubnetId" JSON..= targetVpcSubnetId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description])))
+instance Property "ClientVpnEndpointId" ClientVpnRoute where
+  type PropertyType "ClientVpnEndpointId" ClientVpnRoute = Value Prelude.Text
+  set newValue ClientVpnRoute {..}
+    = ClientVpnRoute {clientVpnEndpointId = newValue, ..}
+instance Property "Description" ClientVpnRoute where
+  type PropertyType "Description" ClientVpnRoute = Value Prelude.Text
+  set newValue ClientVpnRoute {..}
+    = ClientVpnRoute {description = Prelude.pure newValue, ..}
+instance Property "DestinationCidrBlock" ClientVpnRoute where
+  type PropertyType "DestinationCidrBlock" ClientVpnRoute = Value Prelude.Text
+  set newValue ClientVpnRoute {..}
+    = ClientVpnRoute {destinationCidrBlock = newValue, ..}
+instance Property "TargetVpcSubnetId" ClientVpnRoute where
+  type PropertyType "TargetVpcSubnetId" ClientVpnRoute = Value Prelude.Text
+  set newValue ClientVpnRoute {..}
+    = ClientVpnRoute {targetVpcSubnetId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/ClientVpnTargetNetworkAssociation.hs b/gen/Stratosphere/EC2/ClientVpnTargetNetworkAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/ClientVpnTargetNetworkAssociation.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.ClientVpnTargetNetworkAssociation (
+        ClientVpnTargetNetworkAssociation(..),
+        mkClientVpnTargetNetworkAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClientVpnTargetNetworkAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpntargetnetworkassociation.html>
+    ClientVpnTargetNetworkAssociation {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpntargetnetworkassociation.html#cfn-ec2-clientvpntargetnetworkassociation-clientvpnendpointid>
+                                       clientVpnEndpointId :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpntargetnetworkassociation.html#cfn-ec2-clientvpntargetnetworkassociation-subnetid>
+                                       subnetId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClientVpnTargetNetworkAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> ClientVpnTargetNetworkAssociation
+mkClientVpnTargetNetworkAssociation clientVpnEndpointId subnetId
+  = ClientVpnTargetNetworkAssociation
+      {haddock_workaround_ = (),
+       clientVpnEndpointId = clientVpnEndpointId, subnetId = subnetId}
+instance ToResourceProperties ClientVpnTargetNetworkAssociation where
+  toResourceProperties ClientVpnTargetNetworkAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::ClientVpnTargetNetworkAssociation",
+         supportsTags = Prelude.False,
+         properties = ["ClientVpnEndpointId" JSON..= clientVpnEndpointId,
+                       "SubnetId" JSON..= subnetId]}
+instance JSON.ToJSON ClientVpnTargetNetworkAssociation where
+  toJSON ClientVpnTargetNetworkAssociation {..}
+    = JSON.object
+        ["ClientVpnEndpointId" JSON..= clientVpnEndpointId,
+         "SubnetId" JSON..= subnetId]
+instance Property "ClientVpnEndpointId" ClientVpnTargetNetworkAssociation where
+  type PropertyType "ClientVpnEndpointId" ClientVpnTargetNetworkAssociation = Value Prelude.Text
+  set newValue ClientVpnTargetNetworkAssociation {..}
+    = ClientVpnTargetNetworkAssociation
+        {clientVpnEndpointId = newValue, ..}
+instance Property "SubnetId" ClientVpnTargetNetworkAssociation where
+  type PropertyType "SubnetId" ClientVpnTargetNetworkAssociation = Value Prelude.Text
+  set newValue ClientVpnTargetNetworkAssociation {..}
+    = ClientVpnTargetNetworkAssociation {subnetId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/CustomerGateway.hs b/gen/Stratosphere/EC2/CustomerGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/CustomerGateway.hs
@@ -0,0 +1,89 @@
+module Stratosphere.EC2.CustomerGateway (
+        CustomerGateway(..), mkCustomerGateway
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data CustomerGateway
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customergateway.html>
+    CustomerGateway {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customergateway.html#cfn-ec2-customergateway-bgpasn>
+                     bgpAsn :: (Prelude.Maybe (Value Prelude.Integer)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customergateway.html#cfn-ec2-customergateway-bgpasnextended>
+                     bgpAsnExtended :: (Prelude.Maybe (Value Prelude.Double)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customergateway.html#cfn-ec2-customergateway-certificatearn>
+                     certificateArn :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customergateway.html#cfn-ec2-customergateway-devicename>
+                     deviceName :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customergateway.html#cfn-ec2-customergateway-ipaddress>
+                     ipAddress :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customergateway.html#cfn-ec2-customergateway-tags>
+                     tags :: (Prelude.Maybe [Tag]),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customergateway.html#cfn-ec2-customergateway-type>
+                     type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCustomerGateway ::
+  Value Prelude.Text -> Value Prelude.Text -> CustomerGateway
+mkCustomerGateway ipAddress type'
+  = CustomerGateway
+      {haddock_workaround_ = (), ipAddress = ipAddress, type' = type',
+       bgpAsn = Prelude.Nothing, bgpAsnExtended = Prelude.Nothing,
+       certificateArn = Prelude.Nothing, deviceName = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties CustomerGateway where
+  toResourceProperties CustomerGateway {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::CustomerGateway",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IpAddress" JSON..= ipAddress, "Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "BgpAsn" Prelude.<$> bgpAsn,
+                               (JSON..=) "BgpAsnExtended" Prelude.<$> bgpAsnExtended,
+                               (JSON..=) "CertificateArn" Prelude.<$> certificateArn,
+                               (JSON..=) "DeviceName" Prelude.<$> deviceName,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON CustomerGateway where
+  toJSON CustomerGateway {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IpAddress" JSON..= ipAddress, "Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "BgpAsn" Prelude.<$> bgpAsn,
+                  (JSON..=) "BgpAsnExtended" Prelude.<$> bgpAsnExtended,
+                  (JSON..=) "CertificateArn" Prelude.<$> certificateArn,
+                  (JSON..=) "DeviceName" Prelude.<$> deviceName,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "BgpAsn" CustomerGateway where
+  type PropertyType "BgpAsn" CustomerGateway = Value Prelude.Integer
+  set newValue CustomerGateway {..}
+    = CustomerGateway {bgpAsn = Prelude.pure newValue, ..}
+instance Property "BgpAsnExtended" CustomerGateway where
+  type PropertyType "BgpAsnExtended" CustomerGateway = Value Prelude.Double
+  set newValue CustomerGateway {..}
+    = CustomerGateway {bgpAsnExtended = Prelude.pure newValue, ..}
+instance Property "CertificateArn" CustomerGateway where
+  type PropertyType "CertificateArn" CustomerGateway = Value Prelude.Text
+  set newValue CustomerGateway {..}
+    = CustomerGateway {certificateArn = Prelude.pure newValue, ..}
+instance Property "DeviceName" CustomerGateway where
+  type PropertyType "DeviceName" CustomerGateway = Value Prelude.Text
+  set newValue CustomerGateway {..}
+    = CustomerGateway {deviceName = Prelude.pure newValue, ..}
+instance Property "IpAddress" CustomerGateway where
+  type PropertyType "IpAddress" CustomerGateway = Value Prelude.Text
+  set newValue CustomerGateway {..}
+    = CustomerGateway {ipAddress = newValue, ..}
+instance Property "Tags" CustomerGateway where
+  type PropertyType "Tags" CustomerGateway = [Tag]
+  set newValue CustomerGateway {..}
+    = CustomerGateway {tags = Prelude.pure newValue, ..}
+instance Property "Type" CustomerGateway where
+  type PropertyType "Type" CustomerGateway = Value Prelude.Text
+  set newValue CustomerGateway {..}
+    = CustomerGateway {type' = newValue, ..}
diff --git a/gen/Stratosphere/EC2/DHCPOptions.hs b/gen/Stratosphere/EC2/DHCPOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/DHCPOptions.hs
@@ -0,0 +1,92 @@
+module Stratosphere.EC2.DHCPOptions (
+        DHCPOptions(..), mkDHCPOptions
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data DHCPOptions
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcpoptions.html>
+    DHCPOptions {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcpoptions.html#cfn-ec2-dhcpoptions-domainname>
+                 domainName :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcpoptions.html#cfn-ec2-dhcpoptions-domainnameservers>
+                 domainNameServers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcpoptions.html#cfn-ec2-dhcpoptions-ipv6addresspreferredleasetime>
+                 ipv6AddressPreferredLeaseTime :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcpoptions.html#cfn-ec2-dhcpoptions-netbiosnameservers>
+                 netbiosNameServers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcpoptions.html#cfn-ec2-dhcpoptions-netbiosnodetype>
+                 netbiosNodeType :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcpoptions.html#cfn-ec2-dhcpoptions-ntpservers>
+                 ntpServers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-dhcpoptions.html#cfn-ec2-dhcpoptions-tags>
+                 tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDHCPOptions :: DHCPOptions
+mkDHCPOptions
+  = DHCPOptions
+      {haddock_workaround_ = (), domainName = Prelude.Nothing,
+       domainNameServers = Prelude.Nothing,
+       ipv6AddressPreferredLeaseTime = Prelude.Nothing,
+       netbiosNameServers = Prelude.Nothing,
+       netbiosNodeType = Prelude.Nothing, ntpServers = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties DHCPOptions where
+  toResourceProperties DHCPOptions {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::DHCPOptions", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DomainName" Prelude.<$> domainName,
+                            (JSON..=) "DomainNameServers" Prelude.<$> domainNameServers,
+                            (JSON..=) "Ipv6AddressPreferredLeaseTime"
+                              Prelude.<$> ipv6AddressPreferredLeaseTime,
+                            (JSON..=) "NetbiosNameServers" Prelude.<$> netbiosNameServers,
+                            (JSON..=) "NetbiosNodeType" Prelude.<$> netbiosNodeType,
+                            (JSON..=) "NtpServers" Prelude.<$> ntpServers,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON DHCPOptions where
+  toJSON DHCPOptions {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DomainName" Prelude.<$> domainName,
+               (JSON..=) "DomainNameServers" Prelude.<$> domainNameServers,
+               (JSON..=) "Ipv6AddressPreferredLeaseTime"
+                 Prelude.<$> ipv6AddressPreferredLeaseTime,
+               (JSON..=) "NetbiosNameServers" Prelude.<$> netbiosNameServers,
+               (JSON..=) "NetbiosNodeType" Prelude.<$> netbiosNodeType,
+               (JSON..=) "NtpServers" Prelude.<$> ntpServers,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "DomainName" DHCPOptions where
+  type PropertyType "DomainName" DHCPOptions = Value Prelude.Text
+  set newValue DHCPOptions {..}
+    = DHCPOptions {domainName = Prelude.pure newValue, ..}
+instance Property "DomainNameServers" DHCPOptions where
+  type PropertyType "DomainNameServers" DHCPOptions = ValueList Prelude.Text
+  set newValue DHCPOptions {..}
+    = DHCPOptions {domainNameServers = Prelude.pure newValue, ..}
+instance Property "Ipv6AddressPreferredLeaseTime" DHCPOptions where
+  type PropertyType "Ipv6AddressPreferredLeaseTime" DHCPOptions = Value Prelude.Integer
+  set newValue DHCPOptions {..}
+    = DHCPOptions
+        {ipv6AddressPreferredLeaseTime = Prelude.pure newValue, ..}
+instance Property "NetbiosNameServers" DHCPOptions where
+  type PropertyType "NetbiosNameServers" DHCPOptions = ValueList Prelude.Text
+  set newValue DHCPOptions {..}
+    = DHCPOptions {netbiosNameServers = Prelude.pure newValue, ..}
+instance Property "NetbiosNodeType" DHCPOptions where
+  type PropertyType "NetbiosNodeType" DHCPOptions = Value Prelude.Integer
+  set newValue DHCPOptions {..}
+    = DHCPOptions {netbiosNodeType = Prelude.pure newValue, ..}
+instance Property "NtpServers" DHCPOptions where
+  type PropertyType "NtpServers" DHCPOptions = ValueList Prelude.Text
+  set newValue DHCPOptions {..}
+    = DHCPOptions {ntpServers = Prelude.pure newValue, ..}
+instance Property "Tags" DHCPOptions where
+  type PropertyType "Tags" DHCPOptions = [Tag]
+  set newValue DHCPOptions {..}
+    = DHCPOptions {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet.hs b/gen/Stratosphere/EC2/EC2Fleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet.hs
@@ -0,0 +1,150 @@
+module Stratosphere.EC2.EC2Fleet (
+        module Exports, EC2Fleet(..), mkEC2Fleet
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateConfigRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.OnDemandOptionsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.SpotOptionsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.TagSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.TargetCapacitySpecificationRequestProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EC2Fleet
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html>
+    EC2Fleet {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-context>
+              context :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-excesscapacityterminationpolicy>
+              excessCapacityTerminationPolicy :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-launchtemplateconfigs>
+              launchTemplateConfigs :: [FleetLaunchTemplateConfigRequestProperty],
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-ondemandoptions>
+              onDemandOptions :: (Prelude.Maybe OnDemandOptionsRequestProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-replaceunhealthyinstances>
+              replaceUnhealthyInstances :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-spotoptions>
+              spotOptions :: (Prelude.Maybe SpotOptionsRequestProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-tagspecifications>
+              tagSpecifications :: (Prelude.Maybe [TagSpecificationProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-targetcapacityspecification>
+              targetCapacitySpecification :: TargetCapacitySpecificationRequestProperty,
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-terminateinstanceswithexpiration>
+              terminateInstancesWithExpiration :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-type>
+              type' :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-validfrom>
+              validFrom :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ec2fleet.html#cfn-ec2-ec2fleet-validuntil>
+              validUntil :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEC2Fleet ::
+  [FleetLaunchTemplateConfigRequestProperty]
+  -> TargetCapacitySpecificationRequestProperty -> EC2Fleet
+mkEC2Fleet launchTemplateConfigs targetCapacitySpecification
+  = EC2Fleet
+      {haddock_workaround_ = (),
+       launchTemplateConfigs = launchTemplateConfigs,
+       targetCapacitySpecification = targetCapacitySpecification,
+       context = Prelude.Nothing,
+       excessCapacityTerminationPolicy = Prelude.Nothing,
+       onDemandOptions = Prelude.Nothing,
+       replaceUnhealthyInstances = Prelude.Nothing,
+       spotOptions = Prelude.Nothing, tagSpecifications = Prelude.Nothing,
+       terminateInstancesWithExpiration = Prelude.Nothing,
+       type' = Prelude.Nothing, validFrom = Prelude.Nothing,
+       validUntil = Prelude.Nothing}
+instance ToResourceProperties EC2Fleet where
+  toResourceProperties EC2Fleet {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LaunchTemplateConfigs" JSON..= launchTemplateConfigs,
+                            "TargetCapacitySpecification" JSON..= targetCapacitySpecification]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Context" Prelude.<$> context,
+                               (JSON..=) "ExcessCapacityTerminationPolicy"
+                                 Prelude.<$> excessCapacityTerminationPolicy,
+                               (JSON..=) "OnDemandOptions" Prelude.<$> onDemandOptions,
+                               (JSON..=) "ReplaceUnhealthyInstances"
+                                 Prelude.<$> replaceUnhealthyInstances,
+                               (JSON..=) "SpotOptions" Prelude.<$> spotOptions,
+                               (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                               (JSON..=) "TerminateInstancesWithExpiration"
+                                 Prelude.<$> terminateInstancesWithExpiration,
+                               (JSON..=) "Type" Prelude.<$> type',
+                               (JSON..=) "ValidFrom" Prelude.<$> validFrom,
+                               (JSON..=) "ValidUntil" Prelude.<$> validUntil]))}
+instance JSON.ToJSON EC2Fleet where
+  toJSON EC2Fleet {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LaunchTemplateConfigs" JSON..= launchTemplateConfigs,
+               "TargetCapacitySpecification" JSON..= targetCapacitySpecification]
+              (Prelude.catMaybes
+                 [(JSON..=) "Context" Prelude.<$> context,
+                  (JSON..=) "ExcessCapacityTerminationPolicy"
+                    Prelude.<$> excessCapacityTerminationPolicy,
+                  (JSON..=) "OnDemandOptions" Prelude.<$> onDemandOptions,
+                  (JSON..=) "ReplaceUnhealthyInstances"
+                    Prelude.<$> replaceUnhealthyInstances,
+                  (JSON..=) "SpotOptions" Prelude.<$> spotOptions,
+                  (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                  (JSON..=) "TerminateInstancesWithExpiration"
+                    Prelude.<$> terminateInstancesWithExpiration,
+                  (JSON..=) "Type" Prelude.<$> type',
+                  (JSON..=) "ValidFrom" Prelude.<$> validFrom,
+                  (JSON..=) "ValidUntil" Prelude.<$> validUntil])))
+instance Property "Context" EC2Fleet where
+  type PropertyType "Context" EC2Fleet = Value Prelude.Text
+  set newValue EC2Fleet {..}
+    = EC2Fleet {context = Prelude.pure newValue, ..}
+instance Property "ExcessCapacityTerminationPolicy" EC2Fleet where
+  type PropertyType "ExcessCapacityTerminationPolicy" EC2Fleet = Value Prelude.Text
+  set newValue EC2Fleet {..}
+    = EC2Fleet
+        {excessCapacityTerminationPolicy = Prelude.pure newValue, ..}
+instance Property "LaunchTemplateConfigs" EC2Fleet where
+  type PropertyType "LaunchTemplateConfigs" EC2Fleet = [FleetLaunchTemplateConfigRequestProperty]
+  set newValue EC2Fleet {..}
+    = EC2Fleet {launchTemplateConfigs = newValue, ..}
+instance Property "OnDemandOptions" EC2Fleet where
+  type PropertyType "OnDemandOptions" EC2Fleet = OnDemandOptionsRequestProperty
+  set newValue EC2Fleet {..}
+    = EC2Fleet {onDemandOptions = Prelude.pure newValue, ..}
+instance Property "ReplaceUnhealthyInstances" EC2Fleet where
+  type PropertyType "ReplaceUnhealthyInstances" EC2Fleet = Value Prelude.Bool
+  set newValue EC2Fleet {..}
+    = EC2Fleet {replaceUnhealthyInstances = Prelude.pure newValue, ..}
+instance Property "SpotOptions" EC2Fleet where
+  type PropertyType "SpotOptions" EC2Fleet = SpotOptionsRequestProperty
+  set newValue EC2Fleet {..}
+    = EC2Fleet {spotOptions = Prelude.pure newValue, ..}
+instance Property "TagSpecifications" EC2Fleet where
+  type PropertyType "TagSpecifications" EC2Fleet = [TagSpecificationProperty]
+  set newValue EC2Fleet {..}
+    = EC2Fleet {tagSpecifications = Prelude.pure newValue, ..}
+instance Property "TargetCapacitySpecification" EC2Fleet where
+  type PropertyType "TargetCapacitySpecification" EC2Fleet = TargetCapacitySpecificationRequestProperty
+  set newValue EC2Fleet {..}
+    = EC2Fleet {targetCapacitySpecification = newValue, ..}
+instance Property "TerminateInstancesWithExpiration" EC2Fleet where
+  type PropertyType "TerminateInstancesWithExpiration" EC2Fleet = Value Prelude.Bool
+  set newValue EC2Fleet {..}
+    = EC2Fleet
+        {terminateInstancesWithExpiration = Prelude.pure newValue, ..}
+instance Property "Type" EC2Fleet where
+  type PropertyType "Type" EC2Fleet = Value Prelude.Text
+  set newValue EC2Fleet {..}
+    = EC2Fleet {type' = Prelude.pure newValue, ..}
+instance Property "ValidFrom" EC2Fleet where
+  type PropertyType "ValidFrom" EC2Fleet = Value Prelude.Text
+  set newValue EC2Fleet {..}
+    = EC2Fleet {validFrom = Prelude.pure newValue, ..}
+instance Property "ValidUntil" EC2Fleet where
+  type PropertyType "ValidUntil" EC2Fleet = Value Prelude.Text
+  set newValue EC2Fleet {..}
+    = EC2Fleet {validUntil = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/AcceleratorCountRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/AcceleratorCountRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/AcceleratorCountRequestProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.EC2Fleet.AcceleratorCountRequestProperty (
+        AcceleratorCountRequestProperty(..),
+        mkAcceleratorCountRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AcceleratorCountRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-acceleratorcountrequest.html>
+    AcceleratorCountRequestProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-acceleratorcountrequest.html#cfn-ec2-ec2fleet-acceleratorcountrequest-max>
+                                     max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-acceleratorcountrequest.html#cfn-ec2-ec2fleet-acceleratorcountrequest-min>
+                                     min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAcceleratorCountRequestProperty ::
+  AcceleratorCountRequestProperty
+mkAcceleratorCountRequestProperty
+  = AcceleratorCountRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties AcceleratorCountRequestProperty where
+  toResourceProperties AcceleratorCountRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.AcceleratorCountRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON AcceleratorCountRequestProperty where
+  toJSON AcceleratorCountRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" AcceleratorCountRequestProperty where
+  type PropertyType "Max" AcceleratorCountRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorCountRequestProperty {..}
+    = AcceleratorCountRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" AcceleratorCountRequestProperty where
+  type PropertyType "Min" AcceleratorCountRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorCountRequestProperty {..}
+    = AcceleratorCountRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/AcceleratorCountRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/AcceleratorCountRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/AcceleratorCountRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.AcceleratorCountRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AcceleratorCountRequestProperty :: Prelude.Type
+instance ToResourceProperties AcceleratorCountRequestProperty
+instance Prelude.Eq AcceleratorCountRequestProperty
+instance Prelude.Show AcceleratorCountRequestProperty
+instance JSON.ToJSON AcceleratorCountRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/AcceleratorTotalMemoryMiBRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/AcceleratorTotalMemoryMiBRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/AcceleratorTotalMemoryMiBRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.EC2Fleet.AcceleratorTotalMemoryMiBRequestProperty (
+        AcceleratorTotalMemoryMiBRequestProperty(..),
+        mkAcceleratorTotalMemoryMiBRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AcceleratorTotalMemoryMiBRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-acceleratortotalmemorymibrequest.html>
+    AcceleratorTotalMemoryMiBRequestProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-acceleratortotalmemorymibrequest.html#cfn-ec2-ec2fleet-acceleratortotalmemorymibrequest-max>
+                                              max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-acceleratortotalmemorymibrequest.html#cfn-ec2-ec2fleet-acceleratortotalmemorymibrequest-min>
+                                              min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAcceleratorTotalMemoryMiBRequestProperty ::
+  AcceleratorTotalMemoryMiBRequestProperty
+mkAcceleratorTotalMemoryMiBRequestProperty
+  = AcceleratorTotalMemoryMiBRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties AcceleratorTotalMemoryMiBRequestProperty where
+  toResourceProperties AcceleratorTotalMemoryMiBRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.AcceleratorTotalMemoryMiBRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON AcceleratorTotalMemoryMiBRequestProperty where
+  toJSON AcceleratorTotalMemoryMiBRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" AcceleratorTotalMemoryMiBRequestProperty where
+  type PropertyType "Max" AcceleratorTotalMemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorTotalMemoryMiBRequestProperty {..}
+    = AcceleratorTotalMemoryMiBRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" AcceleratorTotalMemoryMiBRequestProperty where
+  type PropertyType "Min" AcceleratorTotalMemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorTotalMemoryMiBRequestProperty {..}
+    = AcceleratorTotalMemoryMiBRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/AcceleratorTotalMemoryMiBRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/AcceleratorTotalMemoryMiBRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/AcceleratorTotalMemoryMiBRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.AcceleratorTotalMemoryMiBRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AcceleratorTotalMemoryMiBRequestProperty :: Prelude.Type
+instance ToResourceProperties AcceleratorTotalMemoryMiBRequestProperty
+instance Prelude.Eq AcceleratorTotalMemoryMiBRequestProperty
+instance Prelude.Show AcceleratorTotalMemoryMiBRequestProperty
+instance JSON.ToJSON AcceleratorTotalMemoryMiBRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/BaselineEbsBandwidthMbpsRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/BaselineEbsBandwidthMbpsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/BaselineEbsBandwidthMbpsRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.EC2Fleet.BaselineEbsBandwidthMbpsRequestProperty (
+        BaselineEbsBandwidthMbpsRequestProperty(..),
+        mkBaselineEbsBandwidthMbpsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BaselineEbsBandwidthMbpsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-baselineebsbandwidthmbpsrequest.html>
+    BaselineEbsBandwidthMbpsRequestProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-baselineebsbandwidthmbpsrequest.html#cfn-ec2-ec2fleet-baselineebsbandwidthmbpsrequest-max>
+                                             max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-baselineebsbandwidthmbpsrequest.html#cfn-ec2-ec2fleet-baselineebsbandwidthmbpsrequest-min>
+                                             min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBaselineEbsBandwidthMbpsRequestProperty ::
+  BaselineEbsBandwidthMbpsRequestProperty
+mkBaselineEbsBandwidthMbpsRequestProperty
+  = BaselineEbsBandwidthMbpsRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties BaselineEbsBandwidthMbpsRequestProperty where
+  toResourceProperties BaselineEbsBandwidthMbpsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.BaselineEbsBandwidthMbpsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON BaselineEbsBandwidthMbpsRequestProperty where
+  toJSON BaselineEbsBandwidthMbpsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" BaselineEbsBandwidthMbpsRequestProperty where
+  type PropertyType "Max" BaselineEbsBandwidthMbpsRequestProperty = Value Prelude.Integer
+  set newValue BaselineEbsBandwidthMbpsRequestProperty {..}
+    = BaselineEbsBandwidthMbpsRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" BaselineEbsBandwidthMbpsRequestProperty where
+  type PropertyType "Min" BaselineEbsBandwidthMbpsRequestProperty = Value Prelude.Integer
+  set newValue BaselineEbsBandwidthMbpsRequestProperty {..}
+    = BaselineEbsBandwidthMbpsRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/BaselineEbsBandwidthMbpsRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/BaselineEbsBandwidthMbpsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/BaselineEbsBandwidthMbpsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.BaselineEbsBandwidthMbpsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BaselineEbsBandwidthMbpsRequestProperty :: Prelude.Type
+instance ToResourceProperties BaselineEbsBandwidthMbpsRequestProperty
+instance Prelude.Eq BaselineEbsBandwidthMbpsRequestProperty
+instance Prelude.Show BaselineEbsBandwidthMbpsRequestProperty
+instance JSON.ToJSON BaselineEbsBandwidthMbpsRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/BaselinePerformanceFactorsRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/BaselinePerformanceFactorsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/BaselinePerformanceFactorsRequestProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.EC2Fleet.BaselinePerformanceFactorsRequestProperty (
+        module Exports, BaselinePerformanceFactorsRequestProperty(..),
+        mkBaselinePerformanceFactorsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.CpuPerformanceFactorRequestProperty as Exports
+import Stratosphere.ResourceProperties
+data BaselinePerformanceFactorsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-baselineperformancefactorsrequest.html>
+    BaselinePerformanceFactorsRequestProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-baselineperformancefactorsrequest.html#cfn-ec2-ec2fleet-baselineperformancefactorsrequest-cpu>
+                                               cpu :: (Prelude.Maybe CpuPerformanceFactorRequestProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBaselinePerformanceFactorsRequestProperty ::
+  BaselinePerformanceFactorsRequestProperty
+mkBaselinePerformanceFactorsRequestProperty
+  = BaselinePerformanceFactorsRequestProperty
+      {haddock_workaround_ = (), cpu = Prelude.Nothing}
+instance ToResourceProperties BaselinePerformanceFactorsRequestProperty where
+  toResourceProperties BaselinePerformanceFactorsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.BaselinePerformanceFactorsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Cpu" Prelude.<$> cpu])}
+instance JSON.ToJSON BaselinePerformanceFactorsRequestProperty where
+  toJSON BaselinePerformanceFactorsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Cpu" Prelude.<$> cpu]))
+instance Property "Cpu" BaselinePerformanceFactorsRequestProperty where
+  type PropertyType "Cpu" BaselinePerformanceFactorsRequestProperty = CpuPerformanceFactorRequestProperty
+  set newValue BaselinePerformanceFactorsRequestProperty {..}
+    = BaselinePerformanceFactorsRequestProperty
+        {cpu = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/BaselinePerformanceFactorsRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/BaselinePerformanceFactorsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/BaselinePerformanceFactorsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.BaselinePerformanceFactorsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BaselinePerformanceFactorsRequestProperty :: Prelude.Type
+instance ToResourceProperties BaselinePerformanceFactorsRequestProperty
+instance Prelude.Eq BaselinePerformanceFactorsRequestProperty
+instance Prelude.Show BaselinePerformanceFactorsRequestProperty
+instance JSON.ToJSON BaselinePerformanceFactorsRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/BlockDeviceMappingProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/BlockDeviceMappingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/BlockDeviceMappingProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.EC2.EC2Fleet.BlockDeviceMappingProperty (
+        module Exports, BlockDeviceMappingProperty(..),
+        mkBlockDeviceMappingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.EbsBlockDeviceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BlockDeviceMappingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-blockdevicemapping.html>
+    BlockDeviceMappingProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-blockdevicemapping.html#cfn-ec2-ec2fleet-blockdevicemapping-devicename>
+                                deviceName :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-blockdevicemapping.html#cfn-ec2-ec2fleet-blockdevicemapping-ebs>
+                                ebs :: (Prelude.Maybe EbsBlockDeviceProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-blockdevicemapping.html#cfn-ec2-ec2fleet-blockdevicemapping-nodevice>
+                                noDevice :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-blockdevicemapping.html#cfn-ec2-ec2fleet-blockdevicemapping-virtualname>
+                                virtualName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBlockDeviceMappingProperty :: BlockDeviceMappingProperty
+mkBlockDeviceMappingProperty
+  = BlockDeviceMappingProperty
+      {haddock_workaround_ = (), deviceName = Prelude.Nothing,
+       ebs = Prelude.Nothing, noDevice = Prelude.Nothing,
+       virtualName = Prelude.Nothing}
+instance ToResourceProperties BlockDeviceMappingProperty where
+  toResourceProperties BlockDeviceMappingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.BlockDeviceMapping",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeviceName" Prelude.<$> deviceName,
+                            (JSON..=) "Ebs" Prelude.<$> ebs,
+                            (JSON..=) "NoDevice" Prelude.<$> noDevice,
+                            (JSON..=) "VirtualName" Prelude.<$> virtualName])}
+instance JSON.ToJSON BlockDeviceMappingProperty where
+  toJSON BlockDeviceMappingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeviceName" Prelude.<$> deviceName,
+               (JSON..=) "Ebs" Prelude.<$> ebs,
+               (JSON..=) "NoDevice" Prelude.<$> noDevice,
+               (JSON..=) "VirtualName" Prelude.<$> virtualName]))
+instance Property "DeviceName" BlockDeviceMappingProperty where
+  type PropertyType "DeviceName" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty
+        {deviceName = Prelude.pure newValue, ..}
+instance Property "Ebs" BlockDeviceMappingProperty where
+  type PropertyType "Ebs" BlockDeviceMappingProperty = EbsBlockDeviceProperty
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {ebs = Prelude.pure newValue, ..}
+instance Property "NoDevice" BlockDeviceMappingProperty where
+  type PropertyType "NoDevice" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {noDevice = Prelude.pure newValue, ..}
+instance Property "VirtualName" BlockDeviceMappingProperty where
+  type PropertyType "VirtualName" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty
+        {virtualName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/BlockDeviceMappingProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/BlockDeviceMappingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/BlockDeviceMappingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.BlockDeviceMappingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BlockDeviceMappingProperty :: Prelude.Type
+instance ToResourceProperties BlockDeviceMappingProperty
+instance Prelude.Eq BlockDeviceMappingProperty
+instance Prelude.Show BlockDeviceMappingProperty
+instance JSON.ToJSON BlockDeviceMappingProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/CapacityRebalanceProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/CapacityRebalanceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/CapacityRebalanceProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.EC2Fleet.CapacityRebalanceProperty (
+        CapacityRebalanceProperty(..), mkCapacityRebalanceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityRebalanceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-capacityrebalance.html>
+    CapacityRebalanceProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-capacityrebalance.html#cfn-ec2-ec2fleet-capacityrebalance-replacementstrategy>
+                               replacementStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-capacityrebalance.html#cfn-ec2-ec2fleet-capacityrebalance-terminationdelay>
+                               terminationDelay :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityRebalanceProperty :: CapacityRebalanceProperty
+mkCapacityRebalanceProperty
+  = CapacityRebalanceProperty
+      {haddock_workaround_ = (), replacementStrategy = Prelude.Nothing,
+       terminationDelay = Prelude.Nothing}
+instance ToResourceProperties CapacityRebalanceProperty where
+  toResourceProperties CapacityRebalanceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.CapacityRebalance",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReplacementStrategy" Prelude.<$> replacementStrategy,
+                            (JSON..=) "TerminationDelay" Prelude.<$> terminationDelay])}
+instance JSON.ToJSON CapacityRebalanceProperty where
+  toJSON CapacityRebalanceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReplacementStrategy" Prelude.<$> replacementStrategy,
+               (JSON..=) "TerminationDelay" Prelude.<$> terminationDelay]))
+instance Property "ReplacementStrategy" CapacityRebalanceProperty where
+  type PropertyType "ReplacementStrategy" CapacityRebalanceProperty = Value Prelude.Text
+  set newValue CapacityRebalanceProperty {..}
+    = CapacityRebalanceProperty
+        {replacementStrategy = Prelude.pure newValue, ..}
+instance Property "TerminationDelay" CapacityRebalanceProperty where
+  type PropertyType "TerminationDelay" CapacityRebalanceProperty = Value Prelude.Integer
+  set newValue CapacityRebalanceProperty {..}
+    = CapacityRebalanceProperty
+        {terminationDelay = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/CapacityRebalanceProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/CapacityRebalanceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/CapacityRebalanceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.CapacityRebalanceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityRebalanceProperty :: Prelude.Type
+instance ToResourceProperties CapacityRebalanceProperty
+instance Prelude.Eq CapacityRebalanceProperty
+instance Prelude.Show CapacityRebalanceProperty
+instance JSON.ToJSON CapacityRebalanceProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/CapacityReservationOptionsRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/CapacityReservationOptionsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/CapacityReservationOptionsRequestProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.EC2Fleet.CapacityReservationOptionsRequestProperty (
+        CapacityReservationOptionsRequestProperty(..),
+        mkCapacityReservationOptionsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityReservationOptionsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-capacityreservationoptionsrequest.html>
+    CapacityReservationOptionsRequestProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-capacityreservationoptionsrequest.html#cfn-ec2-ec2fleet-capacityreservationoptionsrequest-usagestrategy>
+                                               usageStrategy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityReservationOptionsRequestProperty ::
+  CapacityReservationOptionsRequestProperty
+mkCapacityReservationOptionsRequestProperty
+  = CapacityReservationOptionsRequestProperty
+      {haddock_workaround_ = (), usageStrategy = Prelude.Nothing}
+instance ToResourceProperties CapacityReservationOptionsRequestProperty where
+  toResourceProperties CapacityReservationOptionsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.CapacityReservationOptionsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "UsageStrategy" Prelude.<$> usageStrategy])}
+instance JSON.ToJSON CapacityReservationOptionsRequestProperty where
+  toJSON CapacityReservationOptionsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "UsageStrategy" Prelude.<$> usageStrategy]))
+instance Property "UsageStrategy" CapacityReservationOptionsRequestProperty where
+  type PropertyType "UsageStrategy" CapacityReservationOptionsRequestProperty = Value Prelude.Text
+  set newValue CapacityReservationOptionsRequestProperty {..}
+    = CapacityReservationOptionsRequestProperty
+        {usageStrategy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/CapacityReservationOptionsRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/CapacityReservationOptionsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/CapacityReservationOptionsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.CapacityReservationOptionsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityReservationOptionsRequestProperty :: Prelude.Type
+instance ToResourceProperties CapacityReservationOptionsRequestProperty
+instance Prelude.Eq CapacityReservationOptionsRequestProperty
+instance Prelude.Show CapacityReservationOptionsRequestProperty
+instance JSON.ToJSON CapacityReservationOptionsRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/CpuPerformanceFactorRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/CpuPerformanceFactorRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/CpuPerformanceFactorRequestProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.EC2Fleet.CpuPerformanceFactorRequestProperty (
+        module Exports, CpuPerformanceFactorRequestProperty(..),
+        mkCpuPerformanceFactorRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.PerformanceFactorReferenceRequestProperty as Exports
+import Stratosphere.ResourceProperties
+data CpuPerformanceFactorRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-cpuperformancefactorrequest.html>
+    CpuPerformanceFactorRequestProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-cpuperformancefactorrequest.html#cfn-ec2-ec2fleet-cpuperformancefactorrequest-references>
+                                         references :: (Prelude.Maybe [PerformanceFactorReferenceRequestProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCpuPerformanceFactorRequestProperty ::
+  CpuPerformanceFactorRequestProperty
+mkCpuPerformanceFactorRequestProperty
+  = CpuPerformanceFactorRequestProperty
+      {haddock_workaround_ = (), references = Prelude.Nothing}
+instance ToResourceProperties CpuPerformanceFactorRequestProperty where
+  toResourceProperties CpuPerformanceFactorRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.CpuPerformanceFactorRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "References" Prelude.<$> references])}
+instance JSON.ToJSON CpuPerformanceFactorRequestProperty where
+  toJSON CpuPerformanceFactorRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "References" Prelude.<$> references]))
+instance Property "References" CpuPerformanceFactorRequestProperty where
+  type PropertyType "References" CpuPerformanceFactorRequestProperty = [PerformanceFactorReferenceRequestProperty]
+  set newValue CpuPerformanceFactorRequestProperty {..}
+    = CpuPerformanceFactorRequestProperty
+        {references = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/CpuPerformanceFactorRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/CpuPerformanceFactorRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/CpuPerformanceFactorRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.CpuPerformanceFactorRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CpuPerformanceFactorRequestProperty :: Prelude.Type
+instance ToResourceProperties CpuPerformanceFactorRequestProperty
+instance Prelude.Eq CpuPerformanceFactorRequestProperty
+instance Prelude.Show CpuPerformanceFactorRequestProperty
+instance JSON.ToJSON CpuPerformanceFactorRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/EbsBlockDeviceProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/EbsBlockDeviceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/EbsBlockDeviceProperty.hs
@@ -0,0 +1,88 @@
+module Stratosphere.EC2.EC2Fleet.EbsBlockDeviceProperty (
+        EbsBlockDeviceProperty(..), mkEbsBlockDeviceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsBlockDeviceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ebsblockdevice.html>
+    EbsBlockDeviceProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ebsblockdevice.html#cfn-ec2-ec2fleet-ebsblockdevice-deleteontermination>
+                            deleteOnTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ebsblockdevice.html#cfn-ec2-ec2fleet-ebsblockdevice-encrypted>
+                            encrypted :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ebsblockdevice.html#cfn-ec2-ec2fleet-ebsblockdevice-iops>
+                            iops :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ebsblockdevice.html#cfn-ec2-ec2fleet-ebsblockdevice-kmskeyid>
+                            kmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ebsblockdevice.html#cfn-ec2-ec2fleet-ebsblockdevice-snapshotid>
+                            snapshotId :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ebsblockdevice.html#cfn-ec2-ec2fleet-ebsblockdevice-volumesize>
+                            volumeSize :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ebsblockdevice.html#cfn-ec2-ec2fleet-ebsblockdevice-volumetype>
+                            volumeType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsBlockDeviceProperty :: EbsBlockDeviceProperty
+mkEbsBlockDeviceProperty
+  = EbsBlockDeviceProperty
+      {haddock_workaround_ = (), deleteOnTermination = Prelude.Nothing,
+       encrypted = Prelude.Nothing, iops = Prelude.Nothing,
+       kmsKeyId = Prelude.Nothing, snapshotId = Prelude.Nothing,
+       volumeSize = Prelude.Nothing, volumeType = Prelude.Nothing}
+instance ToResourceProperties EbsBlockDeviceProperty where
+  toResourceProperties EbsBlockDeviceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.EbsBlockDevice",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                            (JSON..=) "Encrypted" Prelude.<$> encrypted,
+                            (JSON..=) "Iops" Prelude.<$> iops,
+                            (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                            (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+                            (JSON..=) "VolumeSize" Prelude.<$> volumeSize,
+                            (JSON..=) "VolumeType" Prelude.<$> volumeType])}
+instance JSON.ToJSON EbsBlockDeviceProperty where
+  toJSON EbsBlockDeviceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+               (JSON..=) "Encrypted" Prelude.<$> encrypted,
+               (JSON..=) "Iops" Prelude.<$> iops,
+               (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+               (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+               (JSON..=) "VolumeSize" Prelude.<$> volumeSize,
+               (JSON..=) "VolumeType" Prelude.<$> volumeType]))
+instance Property "DeleteOnTermination" EbsBlockDeviceProperty where
+  type PropertyType "DeleteOnTermination" EbsBlockDeviceProperty = Value Prelude.Bool
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty
+        {deleteOnTermination = Prelude.pure newValue, ..}
+instance Property "Encrypted" EbsBlockDeviceProperty where
+  type PropertyType "Encrypted" EbsBlockDeviceProperty = Value Prelude.Bool
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {encrypted = Prelude.pure newValue, ..}
+instance Property "Iops" EbsBlockDeviceProperty where
+  type PropertyType "Iops" EbsBlockDeviceProperty = Value Prelude.Integer
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {iops = Prelude.pure newValue, ..}
+instance Property "KmsKeyId" EbsBlockDeviceProperty where
+  type PropertyType "KmsKeyId" EbsBlockDeviceProperty = Value Prelude.Text
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {kmsKeyId = Prelude.pure newValue, ..}
+instance Property "SnapshotId" EbsBlockDeviceProperty where
+  type PropertyType "SnapshotId" EbsBlockDeviceProperty = Value Prelude.Text
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {snapshotId = Prelude.pure newValue, ..}
+instance Property "VolumeSize" EbsBlockDeviceProperty where
+  type PropertyType "VolumeSize" EbsBlockDeviceProperty = Value Prelude.Integer
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {volumeSize = Prelude.pure newValue, ..}
+instance Property "VolumeType" EbsBlockDeviceProperty where
+  type PropertyType "VolumeType" EbsBlockDeviceProperty = Value Prelude.Text
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {volumeType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/EbsBlockDeviceProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/EbsBlockDeviceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/EbsBlockDeviceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.EbsBlockDeviceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsBlockDeviceProperty :: Prelude.Type
+instance ToResourceProperties EbsBlockDeviceProperty
+instance Prelude.Eq EbsBlockDeviceProperty
+instance Prelude.Show EbsBlockDeviceProperty
+instance JSON.ToJSON EbsBlockDeviceProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateConfigRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateConfigRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateConfigRequestProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateConfigRequestProperty (
+        module Exports, FleetLaunchTemplateConfigRequestProperty(..),
+        mkFleetLaunchTemplateConfigRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateOverridesRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateSpecificationRequestProperty as Exports
+import Stratosphere.ResourceProperties
+data FleetLaunchTemplateConfigRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateconfigrequest.html>
+    FleetLaunchTemplateConfigRequestProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateconfigrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateconfigrequest-launchtemplatespecification>
+                                              launchTemplateSpecification :: (Prelude.Maybe FleetLaunchTemplateSpecificationRequestProperty),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateconfigrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateconfigrequest-overrides>
+                                              overrides :: (Prelude.Maybe [FleetLaunchTemplateOverridesRequestProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFleetLaunchTemplateConfigRequestProperty ::
+  FleetLaunchTemplateConfigRequestProperty
+mkFleetLaunchTemplateConfigRequestProperty
+  = FleetLaunchTemplateConfigRequestProperty
+      {haddock_workaround_ = (),
+       launchTemplateSpecification = Prelude.Nothing,
+       overrides = Prelude.Nothing}
+instance ToResourceProperties FleetLaunchTemplateConfigRequestProperty where
+  toResourceProperties FleetLaunchTemplateConfigRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.FleetLaunchTemplateConfigRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LaunchTemplateSpecification"
+                              Prelude.<$> launchTemplateSpecification,
+                            (JSON..=) "Overrides" Prelude.<$> overrides])}
+instance JSON.ToJSON FleetLaunchTemplateConfigRequestProperty where
+  toJSON FleetLaunchTemplateConfigRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LaunchTemplateSpecification"
+                 Prelude.<$> launchTemplateSpecification,
+               (JSON..=) "Overrides" Prelude.<$> overrides]))
+instance Property "LaunchTemplateSpecification" FleetLaunchTemplateConfigRequestProperty where
+  type PropertyType "LaunchTemplateSpecification" FleetLaunchTemplateConfigRequestProperty = FleetLaunchTemplateSpecificationRequestProperty
+  set newValue FleetLaunchTemplateConfigRequestProperty {..}
+    = FleetLaunchTemplateConfigRequestProperty
+        {launchTemplateSpecification = Prelude.pure newValue, ..}
+instance Property "Overrides" FleetLaunchTemplateConfigRequestProperty where
+  type PropertyType "Overrides" FleetLaunchTemplateConfigRequestProperty = [FleetLaunchTemplateOverridesRequestProperty]
+  set newValue FleetLaunchTemplateConfigRequestProperty {..}
+    = FleetLaunchTemplateConfigRequestProperty
+        {overrides = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateConfigRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateConfigRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateConfigRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateConfigRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FleetLaunchTemplateConfigRequestProperty :: Prelude.Type
+instance ToResourceProperties FleetLaunchTemplateConfigRequestProperty
+instance Prelude.Eq FleetLaunchTemplateConfigRequestProperty
+instance Prelude.Show FleetLaunchTemplateConfigRequestProperty
+instance JSON.ToJSON FleetLaunchTemplateConfigRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateOverridesRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateOverridesRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateOverridesRequestProperty.hs
@@ -0,0 +1,120 @@
+module Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateOverridesRequestProperty (
+        module Exports, FleetLaunchTemplateOverridesRequestProperty(..),
+        mkFleetLaunchTemplateOverridesRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.BlockDeviceMappingProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.InstanceRequirementsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.PlacementProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FleetLaunchTemplateOverridesRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html>
+    FleetLaunchTemplateOverridesRequestProperty {haddock_workaround_ :: (),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest-availabilityzone>
+                                                 availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest-blockdevicemappings>
+                                                 blockDeviceMappings :: (Prelude.Maybe [BlockDeviceMappingProperty]),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest-instancerequirements>
+                                                 instanceRequirements :: (Prelude.Maybe InstanceRequirementsRequestProperty),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest-instancetype>
+                                                 instanceType :: (Prelude.Maybe (Value Prelude.Text)),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest-maxprice>
+                                                 maxPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest-placement>
+                                                 placement :: (Prelude.Maybe PlacementProperty),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest-priority>
+                                                 priority :: (Prelude.Maybe (Value Prelude.Double)),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest-subnetid>
+                                                 subnetId :: (Prelude.Maybe (Value Prelude.Text)),
+                                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplateoverridesrequest-weightedcapacity>
+                                                 weightedCapacity :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFleetLaunchTemplateOverridesRequestProperty ::
+  FleetLaunchTemplateOverridesRequestProperty
+mkFleetLaunchTemplateOverridesRequestProperty
+  = FleetLaunchTemplateOverridesRequestProperty
+      {haddock_workaround_ = (), availabilityZone = Prelude.Nothing,
+       blockDeviceMappings = Prelude.Nothing,
+       instanceRequirements = Prelude.Nothing,
+       instanceType = Prelude.Nothing, maxPrice = Prelude.Nothing,
+       placement = Prelude.Nothing, priority = Prelude.Nothing,
+       subnetId = Prelude.Nothing, weightedCapacity = Prelude.Nothing}
+instance ToResourceProperties FleetLaunchTemplateOverridesRequestProperty where
+  toResourceProperties
+    FleetLaunchTemplateOverridesRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.FleetLaunchTemplateOverridesRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                            (JSON..=) "BlockDeviceMappings" Prelude.<$> blockDeviceMappings,
+                            (JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+                            (JSON..=) "InstanceType" Prelude.<$> instanceType,
+                            (JSON..=) "MaxPrice" Prelude.<$> maxPrice,
+                            (JSON..=) "Placement" Prelude.<$> placement,
+                            (JSON..=) "Priority" Prelude.<$> priority,
+                            (JSON..=) "SubnetId" Prelude.<$> subnetId,
+                            (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity])}
+instance JSON.ToJSON FleetLaunchTemplateOverridesRequestProperty where
+  toJSON FleetLaunchTemplateOverridesRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+               (JSON..=) "BlockDeviceMappings" Prelude.<$> blockDeviceMappings,
+               (JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+               (JSON..=) "InstanceType" Prelude.<$> instanceType,
+               (JSON..=) "MaxPrice" Prelude.<$> maxPrice,
+               (JSON..=) "Placement" Prelude.<$> placement,
+               (JSON..=) "Priority" Prelude.<$> priority,
+               (JSON..=) "SubnetId" Prelude.<$> subnetId,
+               (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity]))
+instance Property "AvailabilityZone" FleetLaunchTemplateOverridesRequestProperty where
+  type PropertyType "AvailabilityZone" FleetLaunchTemplateOverridesRequestProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateOverridesRequestProperty {..}
+    = FleetLaunchTemplateOverridesRequestProperty
+        {availabilityZone = Prelude.pure newValue, ..}
+instance Property "BlockDeviceMappings" FleetLaunchTemplateOverridesRequestProperty where
+  type PropertyType "BlockDeviceMappings" FleetLaunchTemplateOverridesRequestProperty = [BlockDeviceMappingProperty]
+  set newValue FleetLaunchTemplateOverridesRequestProperty {..}
+    = FleetLaunchTemplateOverridesRequestProperty
+        {blockDeviceMappings = Prelude.pure newValue, ..}
+instance Property "InstanceRequirements" FleetLaunchTemplateOverridesRequestProperty where
+  type PropertyType "InstanceRequirements" FleetLaunchTemplateOverridesRequestProperty = InstanceRequirementsRequestProperty
+  set newValue FleetLaunchTemplateOverridesRequestProperty {..}
+    = FleetLaunchTemplateOverridesRequestProperty
+        {instanceRequirements = Prelude.pure newValue, ..}
+instance Property "InstanceType" FleetLaunchTemplateOverridesRequestProperty where
+  type PropertyType "InstanceType" FleetLaunchTemplateOverridesRequestProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateOverridesRequestProperty {..}
+    = FleetLaunchTemplateOverridesRequestProperty
+        {instanceType = Prelude.pure newValue, ..}
+instance Property "MaxPrice" FleetLaunchTemplateOverridesRequestProperty where
+  type PropertyType "MaxPrice" FleetLaunchTemplateOverridesRequestProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateOverridesRequestProperty {..}
+    = FleetLaunchTemplateOverridesRequestProperty
+        {maxPrice = Prelude.pure newValue, ..}
+instance Property "Placement" FleetLaunchTemplateOverridesRequestProperty where
+  type PropertyType "Placement" FleetLaunchTemplateOverridesRequestProperty = PlacementProperty
+  set newValue FleetLaunchTemplateOverridesRequestProperty {..}
+    = FleetLaunchTemplateOverridesRequestProperty
+        {placement = Prelude.pure newValue, ..}
+instance Property "Priority" FleetLaunchTemplateOverridesRequestProperty where
+  type PropertyType "Priority" FleetLaunchTemplateOverridesRequestProperty = Value Prelude.Double
+  set newValue FleetLaunchTemplateOverridesRequestProperty {..}
+    = FleetLaunchTemplateOverridesRequestProperty
+        {priority = Prelude.pure newValue, ..}
+instance Property "SubnetId" FleetLaunchTemplateOverridesRequestProperty where
+  type PropertyType "SubnetId" FleetLaunchTemplateOverridesRequestProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateOverridesRequestProperty {..}
+    = FleetLaunchTemplateOverridesRequestProperty
+        {subnetId = Prelude.pure newValue, ..}
+instance Property "WeightedCapacity" FleetLaunchTemplateOverridesRequestProperty where
+  type PropertyType "WeightedCapacity" FleetLaunchTemplateOverridesRequestProperty = Value Prelude.Double
+  set newValue FleetLaunchTemplateOverridesRequestProperty {..}
+    = FleetLaunchTemplateOverridesRequestProperty
+        {weightedCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateOverridesRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateOverridesRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateOverridesRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateOverridesRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FleetLaunchTemplateOverridesRequestProperty :: Prelude.Type
+instance ToResourceProperties FleetLaunchTemplateOverridesRequestProperty
+instance Prelude.Eq FleetLaunchTemplateOverridesRequestProperty
+instance Prelude.Show FleetLaunchTemplateOverridesRequestProperty
+instance JSON.ToJSON FleetLaunchTemplateOverridesRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateSpecificationRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateSpecificationRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateSpecificationRequestProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateSpecificationRequestProperty (
+        FleetLaunchTemplateSpecificationRequestProperty(..),
+        mkFleetLaunchTemplateSpecificationRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FleetLaunchTemplateSpecificationRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplatespecificationrequest.html>
+    FleetLaunchTemplateSpecificationRequestProperty {haddock_workaround_ :: (),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplatespecificationrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplatespecificationrequest-launchtemplateid>
+                                                     launchTemplateId :: (Prelude.Maybe (Value Prelude.Text)),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplatespecificationrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplatespecificationrequest-launchtemplatename>
+                                                     launchTemplateName :: (Prelude.Maybe (Value Prelude.Text)),
+                                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-fleetlaunchtemplatespecificationrequest.html#cfn-ec2-ec2fleet-fleetlaunchtemplatespecificationrequest-version>
+                                                     version :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFleetLaunchTemplateSpecificationRequestProperty ::
+  Value Prelude.Text
+  -> FleetLaunchTemplateSpecificationRequestProperty
+mkFleetLaunchTemplateSpecificationRequestProperty version
+  = FleetLaunchTemplateSpecificationRequestProperty
+      {haddock_workaround_ = (), version = version,
+       launchTemplateId = Prelude.Nothing,
+       launchTemplateName = Prelude.Nothing}
+instance ToResourceProperties FleetLaunchTemplateSpecificationRequestProperty where
+  toResourceProperties
+    FleetLaunchTemplateSpecificationRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.FleetLaunchTemplateSpecificationRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Version" JSON..= version]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LaunchTemplateId" Prelude.<$> launchTemplateId,
+                               (JSON..=) "LaunchTemplateName" Prelude.<$> launchTemplateName]))}
+instance JSON.ToJSON FleetLaunchTemplateSpecificationRequestProperty where
+  toJSON FleetLaunchTemplateSpecificationRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Version" JSON..= version]
+              (Prelude.catMaybes
+                 [(JSON..=) "LaunchTemplateId" Prelude.<$> launchTemplateId,
+                  (JSON..=) "LaunchTemplateName" Prelude.<$> launchTemplateName])))
+instance Property "LaunchTemplateId" FleetLaunchTemplateSpecificationRequestProperty where
+  type PropertyType "LaunchTemplateId" FleetLaunchTemplateSpecificationRequestProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateSpecificationRequestProperty {..}
+    = FleetLaunchTemplateSpecificationRequestProperty
+        {launchTemplateId = Prelude.pure newValue, ..}
+instance Property "LaunchTemplateName" FleetLaunchTemplateSpecificationRequestProperty where
+  type PropertyType "LaunchTemplateName" FleetLaunchTemplateSpecificationRequestProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateSpecificationRequestProperty {..}
+    = FleetLaunchTemplateSpecificationRequestProperty
+        {launchTemplateName = Prelude.pure newValue, ..}
+instance Property "Version" FleetLaunchTemplateSpecificationRequestProperty where
+  type PropertyType "Version" FleetLaunchTemplateSpecificationRequestProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateSpecificationRequestProperty {..}
+    = FleetLaunchTemplateSpecificationRequestProperty
+        {version = newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateSpecificationRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateSpecificationRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/FleetLaunchTemplateSpecificationRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateSpecificationRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FleetLaunchTemplateSpecificationRequestProperty :: Prelude.Type
+instance ToResourceProperties FleetLaunchTemplateSpecificationRequestProperty
+instance Prelude.Eq FleetLaunchTemplateSpecificationRequestProperty
+instance Prelude.Show FleetLaunchTemplateSpecificationRequestProperty
+instance JSON.ToJSON FleetLaunchTemplateSpecificationRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/InstanceRequirementsRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/InstanceRequirementsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/InstanceRequirementsRequestProperty.hs
@@ -0,0 +1,310 @@
+module Stratosphere.EC2.EC2Fleet.InstanceRequirementsRequestProperty (
+        module Exports, InstanceRequirementsRequestProperty(..),
+        mkInstanceRequirementsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.AcceleratorCountRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.AcceleratorTotalMemoryMiBRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.BaselineEbsBandwidthMbpsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.BaselinePerformanceFactorsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.MemoryGiBPerVCpuRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.MemoryMiBRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.NetworkBandwidthGbpsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.NetworkInterfaceCountRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.TotalLocalStorageGBRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.VCpuCountRangeRequestProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceRequirementsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html>
+    InstanceRequirementsRequestProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-acceleratorcount>
+                                         acceleratorCount :: (Prelude.Maybe AcceleratorCountRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-acceleratormanufacturers>
+                                         acceleratorManufacturers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-acceleratornames>
+                                         acceleratorNames :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-acceleratortotalmemorymib>
+                                         acceleratorTotalMemoryMiB :: (Prelude.Maybe AcceleratorTotalMemoryMiBRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-acceleratortypes>
+                                         acceleratorTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-allowedinstancetypes>
+                                         allowedInstanceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-baremetal>
+                                         bareMetal :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-baselineebsbandwidthmbps>
+                                         baselineEbsBandwidthMbps :: (Prelude.Maybe BaselineEbsBandwidthMbpsRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-baselineperformancefactors>
+                                         baselinePerformanceFactors :: (Prelude.Maybe BaselinePerformanceFactorsRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-burstableperformance>
+                                         burstablePerformance :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-cpumanufacturers>
+                                         cpuManufacturers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-excludedinstancetypes>
+                                         excludedInstanceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-instancegenerations>
+                                         instanceGenerations :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-localstorage>
+                                         localStorage :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-localstoragetypes>
+                                         localStorageTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-maxspotpriceaspercentageofoptimalondemandprice>
+                                         maxSpotPriceAsPercentageOfOptimalOnDemandPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-memorygibpervcpu>
+                                         memoryGiBPerVCpu :: (Prelude.Maybe MemoryGiBPerVCpuRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-memorymib>
+                                         memoryMiB :: (Prelude.Maybe MemoryMiBRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-networkbandwidthgbps>
+                                         networkBandwidthGbps :: (Prelude.Maybe NetworkBandwidthGbpsRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-networkinterfacecount>
+                                         networkInterfaceCount :: (Prelude.Maybe NetworkInterfaceCountRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-ondemandmaxpricepercentageoverlowestprice>
+                                         onDemandMaxPricePercentageOverLowestPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-requirehibernatesupport>
+                                         requireHibernateSupport :: (Prelude.Maybe (Value Prelude.Bool)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-spotmaxpricepercentageoverlowestprice>
+                                         spotMaxPricePercentageOverLowestPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-totallocalstoragegb>
+                                         totalLocalStorageGB :: (Prelude.Maybe TotalLocalStorageGBRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-instancerequirementsrequest.html#cfn-ec2-ec2fleet-instancerequirementsrequest-vcpucount>
+                                         vCpuCount :: (Prelude.Maybe VCpuCountRangeRequestProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceRequirementsRequestProperty ::
+  InstanceRequirementsRequestProperty
+mkInstanceRequirementsRequestProperty
+  = InstanceRequirementsRequestProperty
+      {haddock_workaround_ = (), acceleratorCount = Prelude.Nothing,
+       acceleratorManufacturers = Prelude.Nothing,
+       acceleratorNames = Prelude.Nothing,
+       acceleratorTotalMemoryMiB = Prelude.Nothing,
+       acceleratorTypes = Prelude.Nothing,
+       allowedInstanceTypes = Prelude.Nothing,
+       bareMetal = Prelude.Nothing,
+       baselineEbsBandwidthMbps = Prelude.Nothing,
+       baselinePerformanceFactors = Prelude.Nothing,
+       burstablePerformance = Prelude.Nothing,
+       cpuManufacturers = Prelude.Nothing,
+       excludedInstanceTypes = Prelude.Nothing,
+       instanceGenerations = Prelude.Nothing,
+       localStorage = Prelude.Nothing,
+       localStorageTypes = Prelude.Nothing,
+       maxSpotPriceAsPercentageOfOptimalOnDemandPrice = Prelude.Nothing,
+       memoryGiBPerVCpu = Prelude.Nothing, memoryMiB = Prelude.Nothing,
+       networkBandwidthGbps = Prelude.Nothing,
+       networkInterfaceCount = Prelude.Nothing,
+       onDemandMaxPricePercentageOverLowestPrice = Prelude.Nothing,
+       requireHibernateSupport = Prelude.Nothing,
+       spotMaxPricePercentageOverLowestPrice = Prelude.Nothing,
+       totalLocalStorageGB = Prelude.Nothing, vCpuCount = Prelude.Nothing}
+instance ToResourceProperties InstanceRequirementsRequestProperty where
+  toResourceProperties InstanceRequirementsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.InstanceRequirementsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AcceleratorCount" Prelude.<$> acceleratorCount,
+                            (JSON..=) "AcceleratorManufacturers"
+                              Prelude.<$> acceleratorManufacturers,
+                            (JSON..=) "AcceleratorNames" Prelude.<$> acceleratorNames,
+                            (JSON..=) "AcceleratorTotalMemoryMiB"
+                              Prelude.<$> acceleratorTotalMemoryMiB,
+                            (JSON..=) "AcceleratorTypes" Prelude.<$> acceleratorTypes,
+                            (JSON..=) "AllowedInstanceTypes" Prelude.<$> allowedInstanceTypes,
+                            (JSON..=) "BareMetal" Prelude.<$> bareMetal,
+                            (JSON..=) "BaselineEbsBandwidthMbps"
+                              Prelude.<$> baselineEbsBandwidthMbps,
+                            (JSON..=) "BaselinePerformanceFactors"
+                              Prelude.<$> baselinePerformanceFactors,
+                            (JSON..=) "BurstablePerformance" Prelude.<$> burstablePerformance,
+                            (JSON..=) "CpuManufacturers" Prelude.<$> cpuManufacturers,
+                            (JSON..=) "ExcludedInstanceTypes"
+                              Prelude.<$> excludedInstanceTypes,
+                            (JSON..=) "InstanceGenerations" Prelude.<$> instanceGenerations,
+                            (JSON..=) "LocalStorage" Prelude.<$> localStorage,
+                            (JSON..=) "LocalStorageTypes" Prelude.<$> localStorageTypes,
+                            (JSON..=) "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice"
+                              Prelude.<$> maxSpotPriceAsPercentageOfOptimalOnDemandPrice,
+                            (JSON..=) "MemoryGiBPerVCpu" Prelude.<$> memoryGiBPerVCpu,
+                            (JSON..=) "MemoryMiB" Prelude.<$> memoryMiB,
+                            (JSON..=) "NetworkBandwidthGbps" Prelude.<$> networkBandwidthGbps,
+                            (JSON..=) "NetworkInterfaceCount"
+                              Prelude.<$> networkInterfaceCount,
+                            (JSON..=) "OnDemandMaxPricePercentageOverLowestPrice"
+                              Prelude.<$> onDemandMaxPricePercentageOverLowestPrice,
+                            (JSON..=) "RequireHibernateSupport"
+                              Prelude.<$> requireHibernateSupport,
+                            (JSON..=) "SpotMaxPricePercentageOverLowestPrice"
+                              Prelude.<$> spotMaxPricePercentageOverLowestPrice,
+                            (JSON..=) "TotalLocalStorageGB" Prelude.<$> totalLocalStorageGB,
+                            (JSON..=) "VCpuCount" Prelude.<$> vCpuCount])}
+instance JSON.ToJSON InstanceRequirementsRequestProperty where
+  toJSON InstanceRequirementsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AcceleratorCount" Prelude.<$> acceleratorCount,
+               (JSON..=) "AcceleratorManufacturers"
+                 Prelude.<$> acceleratorManufacturers,
+               (JSON..=) "AcceleratorNames" Prelude.<$> acceleratorNames,
+               (JSON..=) "AcceleratorTotalMemoryMiB"
+                 Prelude.<$> acceleratorTotalMemoryMiB,
+               (JSON..=) "AcceleratorTypes" Prelude.<$> acceleratorTypes,
+               (JSON..=) "AllowedInstanceTypes" Prelude.<$> allowedInstanceTypes,
+               (JSON..=) "BareMetal" Prelude.<$> bareMetal,
+               (JSON..=) "BaselineEbsBandwidthMbps"
+                 Prelude.<$> baselineEbsBandwidthMbps,
+               (JSON..=) "BaselinePerformanceFactors"
+                 Prelude.<$> baselinePerformanceFactors,
+               (JSON..=) "BurstablePerformance" Prelude.<$> burstablePerformance,
+               (JSON..=) "CpuManufacturers" Prelude.<$> cpuManufacturers,
+               (JSON..=) "ExcludedInstanceTypes"
+                 Prelude.<$> excludedInstanceTypes,
+               (JSON..=) "InstanceGenerations" Prelude.<$> instanceGenerations,
+               (JSON..=) "LocalStorage" Prelude.<$> localStorage,
+               (JSON..=) "LocalStorageTypes" Prelude.<$> localStorageTypes,
+               (JSON..=) "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice"
+                 Prelude.<$> maxSpotPriceAsPercentageOfOptimalOnDemandPrice,
+               (JSON..=) "MemoryGiBPerVCpu" Prelude.<$> memoryGiBPerVCpu,
+               (JSON..=) "MemoryMiB" Prelude.<$> memoryMiB,
+               (JSON..=) "NetworkBandwidthGbps" Prelude.<$> networkBandwidthGbps,
+               (JSON..=) "NetworkInterfaceCount"
+                 Prelude.<$> networkInterfaceCount,
+               (JSON..=) "OnDemandMaxPricePercentageOverLowestPrice"
+                 Prelude.<$> onDemandMaxPricePercentageOverLowestPrice,
+               (JSON..=) "RequireHibernateSupport"
+                 Prelude.<$> requireHibernateSupport,
+               (JSON..=) "SpotMaxPricePercentageOverLowestPrice"
+                 Prelude.<$> spotMaxPricePercentageOverLowestPrice,
+               (JSON..=) "TotalLocalStorageGB" Prelude.<$> totalLocalStorageGB,
+               (JSON..=) "VCpuCount" Prelude.<$> vCpuCount]))
+instance Property "AcceleratorCount" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorCount" InstanceRequirementsRequestProperty = AcceleratorCountRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorCount = Prelude.pure newValue, ..}
+instance Property "AcceleratorManufacturers" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorManufacturers" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorManufacturers = Prelude.pure newValue, ..}
+instance Property "AcceleratorNames" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorNames" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorNames = Prelude.pure newValue, ..}
+instance Property "AcceleratorTotalMemoryMiB" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorTotalMemoryMiB" InstanceRequirementsRequestProperty = AcceleratorTotalMemoryMiBRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorTotalMemoryMiB = Prelude.pure newValue, ..}
+instance Property "AcceleratorTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorTypes = Prelude.pure newValue, ..}
+instance Property "AllowedInstanceTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "AllowedInstanceTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {allowedInstanceTypes = Prelude.pure newValue, ..}
+instance Property "BareMetal" InstanceRequirementsRequestProperty where
+  type PropertyType "BareMetal" InstanceRequirementsRequestProperty = Value Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {bareMetal = Prelude.pure newValue, ..}
+instance Property "BaselineEbsBandwidthMbps" InstanceRequirementsRequestProperty where
+  type PropertyType "BaselineEbsBandwidthMbps" InstanceRequirementsRequestProperty = BaselineEbsBandwidthMbpsRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {baselineEbsBandwidthMbps = Prelude.pure newValue, ..}
+instance Property "BaselinePerformanceFactors" InstanceRequirementsRequestProperty where
+  type PropertyType "BaselinePerformanceFactors" InstanceRequirementsRequestProperty = BaselinePerformanceFactorsRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {baselinePerformanceFactors = Prelude.pure newValue, ..}
+instance Property "BurstablePerformance" InstanceRequirementsRequestProperty where
+  type PropertyType "BurstablePerformance" InstanceRequirementsRequestProperty = Value Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {burstablePerformance = Prelude.pure newValue, ..}
+instance Property "CpuManufacturers" InstanceRequirementsRequestProperty where
+  type PropertyType "CpuManufacturers" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {cpuManufacturers = Prelude.pure newValue, ..}
+instance Property "ExcludedInstanceTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "ExcludedInstanceTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {excludedInstanceTypes = Prelude.pure newValue, ..}
+instance Property "InstanceGenerations" InstanceRequirementsRequestProperty where
+  type PropertyType "InstanceGenerations" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {instanceGenerations = Prelude.pure newValue, ..}
+instance Property "LocalStorage" InstanceRequirementsRequestProperty where
+  type PropertyType "LocalStorage" InstanceRequirementsRequestProperty = Value Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {localStorage = Prelude.pure newValue, ..}
+instance Property "LocalStorageTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "LocalStorageTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {localStorageTypes = Prelude.pure newValue, ..}
+instance Property "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" InstanceRequirementsRequestProperty where
+  type PropertyType "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" InstanceRequirementsRequestProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {maxSpotPriceAsPercentageOfOptimalOnDemandPrice = Prelude.pure
+                                                            newValue,
+         ..}
+instance Property "MemoryGiBPerVCpu" InstanceRequirementsRequestProperty where
+  type PropertyType "MemoryGiBPerVCpu" InstanceRequirementsRequestProperty = MemoryGiBPerVCpuRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {memoryGiBPerVCpu = Prelude.pure newValue, ..}
+instance Property "MemoryMiB" InstanceRequirementsRequestProperty where
+  type PropertyType "MemoryMiB" InstanceRequirementsRequestProperty = MemoryMiBRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {memoryMiB = Prelude.pure newValue, ..}
+instance Property "NetworkBandwidthGbps" InstanceRequirementsRequestProperty where
+  type PropertyType "NetworkBandwidthGbps" InstanceRequirementsRequestProperty = NetworkBandwidthGbpsRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {networkBandwidthGbps = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceCount" InstanceRequirementsRequestProperty where
+  type PropertyType "NetworkInterfaceCount" InstanceRequirementsRequestProperty = NetworkInterfaceCountRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {networkInterfaceCount = Prelude.pure newValue, ..}
+instance Property "OnDemandMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty where
+  type PropertyType "OnDemandMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {onDemandMaxPricePercentageOverLowestPrice = Prelude.pure newValue,
+         ..}
+instance Property "RequireHibernateSupport" InstanceRequirementsRequestProperty where
+  type PropertyType "RequireHibernateSupport" InstanceRequirementsRequestProperty = Value Prelude.Bool
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {requireHibernateSupport = Prelude.pure newValue, ..}
+instance Property "SpotMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty where
+  type PropertyType "SpotMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {spotMaxPricePercentageOverLowestPrice = Prelude.pure newValue, ..}
+instance Property "TotalLocalStorageGB" InstanceRequirementsRequestProperty where
+  type PropertyType "TotalLocalStorageGB" InstanceRequirementsRequestProperty = TotalLocalStorageGBRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {totalLocalStorageGB = Prelude.pure newValue, ..}
+instance Property "VCpuCount" InstanceRequirementsRequestProperty where
+  type PropertyType "VCpuCount" InstanceRequirementsRequestProperty = VCpuCountRangeRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {vCpuCount = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/InstanceRequirementsRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/InstanceRequirementsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/InstanceRequirementsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.InstanceRequirementsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceRequirementsRequestProperty :: Prelude.Type
+instance ToResourceProperties InstanceRequirementsRequestProperty
+instance Prelude.Eq InstanceRequirementsRequestProperty
+instance Prelude.Show InstanceRequirementsRequestProperty
+instance JSON.ToJSON InstanceRequirementsRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/MaintenanceStrategiesProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/MaintenanceStrategiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/MaintenanceStrategiesProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EC2.EC2Fleet.MaintenanceStrategiesProperty (
+        module Exports, MaintenanceStrategiesProperty(..),
+        mkMaintenanceStrategiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.CapacityRebalanceProperty as Exports
+import Stratosphere.ResourceProperties
+data MaintenanceStrategiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-maintenancestrategies.html>
+    MaintenanceStrategiesProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-maintenancestrategies.html#cfn-ec2-ec2fleet-maintenancestrategies-capacityrebalance>
+                                   capacityRebalance :: (Prelude.Maybe CapacityRebalanceProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMaintenanceStrategiesProperty :: MaintenanceStrategiesProperty
+mkMaintenanceStrategiesProperty
+  = MaintenanceStrategiesProperty
+      {haddock_workaround_ = (), capacityRebalance = Prelude.Nothing}
+instance ToResourceProperties MaintenanceStrategiesProperty where
+  toResourceProperties MaintenanceStrategiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.MaintenanceStrategies",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CapacityRebalance" Prelude.<$> capacityRebalance])}
+instance JSON.ToJSON MaintenanceStrategiesProperty where
+  toJSON MaintenanceStrategiesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CapacityRebalance" Prelude.<$> capacityRebalance]))
+instance Property "CapacityRebalance" MaintenanceStrategiesProperty where
+  type PropertyType "CapacityRebalance" MaintenanceStrategiesProperty = CapacityRebalanceProperty
+  set newValue MaintenanceStrategiesProperty {..}
+    = MaintenanceStrategiesProperty
+        {capacityRebalance = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/MaintenanceStrategiesProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/MaintenanceStrategiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/MaintenanceStrategiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.MaintenanceStrategiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MaintenanceStrategiesProperty :: Prelude.Type
+instance ToResourceProperties MaintenanceStrategiesProperty
+instance Prelude.Eq MaintenanceStrategiesProperty
+instance Prelude.Show MaintenanceStrategiesProperty
+instance JSON.ToJSON MaintenanceStrategiesProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/MemoryGiBPerVCpuRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/MemoryGiBPerVCpuRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/MemoryGiBPerVCpuRequestProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.EC2Fleet.MemoryGiBPerVCpuRequestProperty (
+        MemoryGiBPerVCpuRequestProperty(..),
+        mkMemoryGiBPerVCpuRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MemoryGiBPerVCpuRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-memorygibpervcpurequest.html>
+    MemoryGiBPerVCpuRequestProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-memorygibpervcpurequest.html#cfn-ec2-ec2fleet-memorygibpervcpurequest-max>
+                                     max :: (Prelude.Maybe (Value Prelude.Double)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-memorygibpervcpurequest.html#cfn-ec2-ec2fleet-memorygibpervcpurequest-min>
+                                     min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMemoryGiBPerVCpuRequestProperty ::
+  MemoryGiBPerVCpuRequestProperty
+mkMemoryGiBPerVCpuRequestProperty
+  = MemoryGiBPerVCpuRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties MemoryGiBPerVCpuRequestProperty where
+  toResourceProperties MemoryGiBPerVCpuRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.MemoryGiBPerVCpuRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON MemoryGiBPerVCpuRequestProperty where
+  toJSON MemoryGiBPerVCpuRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" MemoryGiBPerVCpuRequestProperty where
+  type PropertyType "Max" MemoryGiBPerVCpuRequestProperty = Value Prelude.Double
+  set newValue MemoryGiBPerVCpuRequestProperty {..}
+    = MemoryGiBPerVCpuRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" MemoryGiBPerVCpuRequestProperty where
+  type PropertyType "Min" MemoryGiBPerVCpuRequestProperty = Value Prelude.Double
+  set newValue MemoryGiBPerVCpuRequestProperty {..}
+    = MemoryGiBPerVCpuRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/MemoryGiBPerVCpuRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/MemoryGiBPerVCpuRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/MemoryGiBPerVCpuRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.MemoryGiBPerVCpuRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MemoryGiBPerVCpuRequestProperty :: Prelude.Type
+instance ToResourceProperties MemoryGiBPerVCpuRequestProperty
+instance Prelude.Eq MemoryGiBPerVCpuRequestProperty
+instance Prelude.Show MemoryGiBPerVCpuRequestProperty
+instance JSON.ToJSON MemoryGiBPerVCpuRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/MemoryMiBRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/MemoryMiBRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/MemoryMiBRequestProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.EC2Fleet.MemoryMiBRequestProperty (
+        MemoryMiBRequestProperty(..), mkMemoryMiBRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MemoryMiBRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-memorymibrequest.html>
+    MemoryMiBRequestProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-memorymibrequest.html#cfn-ec2-ec2fleet-memorymibrequest-max>
+                              max :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-memorymibrequest.html#cfn-ec2-ec2fleet-memorymibrequest-min>
+                              min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMemoryMiBRequestProperty :: MemoryMiBRequestProperty
+mkMemoryMiBRequestProperty
+  = MemoryMiBRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties MemoryMiBRequestProperty where
+  toResourceProperties MemoryMiBRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.MemoryMiBRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON MemoryMiBRequestProperty where
+  toJSON MemoryMiBRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" MemoryMiBRequestProperty where
+  type PropertyType "Max" MemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue MemoryMiBRequestProperty {..}
+    = MemoryMiBRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" MemoryMiBRequestProperty where
+  type PropertyType "Min" MemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue MemoryMiBRequestProperty {..}
+    = MemoryMiBRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/MemoryMiBRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/MemoryMiBRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/MemoryMiBRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.MemoryMiBRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MemoryMiBRequestProperty :: Prelude.Type
+instance ToResourceProperties MemoryMiBRequestProperty
+instance Prelude.Eq MemoryMiBRequestProperty
+instance Prelude.Show MemoryMiBRequestProperty
+instance JSON.ToJSON MemoryMiBRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/NetworkBandwidthGbpsRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/NetworkBandwidthGbpsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/NetworkBandwidthGbpsRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.EC2Fleet.NetworkBandwidthGbpsRequestProperty (
+        NetworkBandwidthGbpsRequestProperty(..),
+        mkNetworkBandwidthGbpsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkBandwidthGbpsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-networkbandwidthgbpsrequest.html>
+    NetworkBandwidthGbpsRequestProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-networkbandwidthgbpsrequest.html#cfn-ec2-ec2fleet-networkbandwidthgbpsrequest-max>
+                                         max :: (Prelude.Maybe (Value Prelude.Double)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-networkbandwidthgbpsrequest.html#cfn-ec2-ec2fleet-networkbandwidthgbpsrequest-min>
+                                         min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkBandwidthGbpsRequestProperty ::
+  NetworkBandwidthGbpsRequestProperty
+mkNetworkBandwidthGbpsRequestProperty
+  = NetworkBandwidthGbpsRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties NetworkBandwidthGbpsRequestProperty where
+  toResourceProperties NetworkBandwidthGbpsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.NetworkBandwidthGbpsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON NetworkBandwidthGbpsRequestProperty where
+  toJSON NetworkBandwidthGbpsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" NetworkBandwidthGbpsRequestProperty where
+  type PropertyType "Max" NetworkBandwidthGbpsRequestProperty = Value Prelude.Double
+  set newValue NetworkBandwidthGbpsRequestProperty {..}
+    = NetworkBandwidthGbpsRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" NetworkBandwidthGbpsRequestProperty where
+  type PropertyType "Min" NetworkBandwidthGbpsRequestProperty = Value Prelude.Double
+  set newValue NetworkBandwidthGbpsRequestProperty {..}
+    = NetworkBandwidthGbpsRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/NetworkBandwidthGbpsRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/NetworkBandwidthGbpsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/NetworkBandwidthGbpsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.NetworkBandwidthGbpsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkBandwidthGbpsRequestProperty :: Prelude.Type
+instance ToResourceProperties NetworkBandwidthGbpsRequestProperty
+instance Prelude.Eq NetworkBandwidthGbpsRequestProperty
+instance Prelude.Show NetworkBandwidthGbpsRequestProperty
+instance JSON.ToJSON NetworkBandwidthGbpsRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/NetworkInterfaceCountRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/NetworkInterfaceCountRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/NetworkInterfaceCountRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.EC2Fleet.NetworkInterfaceCountRequestProperty (
+        NetworkInterfaceCountRequestProperty(..),
+        mkNetworkInterfaceCountRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkInterfaceCountRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-networkinterfacecountrequest.html>
+    NetworkInterfaceCountRequestProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-networkinterfacecountrequest.html#cfn-ec2-ec2fleet-networkinterfacecountrequest-max>
+                                          max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-networkinterfacecountrequest.html#cfn-ec2-ec2fleet-networkinterfacecountrequest-min>
+                                          min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterfaceCountRequestProperty ::
+  NetworkInterfaceCountRequestProperty
+mkNetworkInterfaceCountRequestProperty
+  = NetworkInterfaceCountRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties NetworkInterfaceCountRequestProperty where
+  toResourceProperties NetworkInterfaceCountRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.NetworkInterfaceCountRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON NetworkInterfaceCountRequestProperty where
+  toJSON NetworkInterfaceCountRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" NetworkInterfaceCountRequestProperty where
+  type PropertyType "Max" NetworkInterfaceCountRequestProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceCountRequestProperty {..}
+    = NetworkInterfaceCountRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" NetworkInterfaceCountRequestProperty where
+  type PropertyType "Min" NetworkInterfaceCountRequestProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceCountRequestProperty {..}
+    = NetworkInterfaceCountRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/NetworkInterfaceCountRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/NetworkInterfaceCountRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/NetworkInterfaceCountRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.NetworkInterfaceCountRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkInterfaceCountRequestProperty :: Prelude.Type
+instance ToResourceProperties NetworkInterfaceCountRequestProperty
+instance Prelude.Eq NetworkInterfaceCountRequestProperty
+instance Prelude.Show NetworkInterfaceCountRequestProperty
+instance JSON.ToJSON NetworkInterfaceCountRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/OnDemandOptionsRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/OnDemandOptionsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/OnDemandOptionsRequestProperty.hs
@@ -0,0 +1,93 @@
+module Stratosphere.EC2.EC2Fleet.OnDemandOptionsRequestProperty (
+        module Exports, OnDemandOptionsRequestProperty(..),
+        mkOnDemandOptionsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.CapacityReservationOptionsRequestProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OnDemandOptionsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ondemandoptionsrequest.html>
+    OnDemandOptionsRequestProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ondemandoptionsrequest.html#cfn-ec2-ec2fleet-ondemandoptionsrequest-allocationstrategy>
+                                    allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ondemandoptionsrequest.html#cfn-ec2-ec2fleet-ondemandoptionsrequest-capacityreservationoptions>
+                                    capacityReservationOptions :: (Prelude.Maybe CapacityReservationOptionsRequestProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ondemandoptionsrequest.html#cfn-ec2-ec2fleet-ondemandoptionsrequest-maxtotalprice>
+                                    maxTotalPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ondemandoptionsrequest.html#cfn-ec2-ec2fleet-ondemandoptionsrequest-mintargetcapacity>
+                                    minTargetCapacity :: (Prelude.Maybe (Value Prelude.Integer)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ondemandoptionsrequest.html#cfn-ec2-ec2fleet-ondemandoptionsrequest-singleavailabilityzone>
+                                    singleAvailabilityZone :: (Prelude.Maybe (Value Prelude.Bool)),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-ondemandoptionsrequest.html#cfn-ec2-ec2fleet-ondemandoptionsrequest-singleinstancetype>
+                                    singleInstanceType :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOnDemandOptionsRequestProperty :: OnDemandOptionsRequestProperty
+mkOnDemandOptionsRequestProperty
+  = OnDemandOptionsRequestProperty
+      {haddock_workaround_ = (), allocationStrategy = Prelude.Nothing,
+       capacityReservationOptions = Prelude.Nothing,
+       maxTotalPrice = Prelude.Nothing,
+       minTargetCapacity = Prelude.Nothing,
+       singleAvailabilityZone = Prelude.Nothing,
+       singleInstanceType = Prelude.Nothing}
+instance ToResourceProperties OnDemandOptionsRequestProperty where
+  toResourceProperties OnDemandOptionsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.OnDemandOptionsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                            (JSON..=) "CapacityReservationOptions"
+                              Prelude.<$> capacityReservationOptions,
+                            (JSON..=) "MaxTotalPrice" Prelude.<$> maxTotalPrice,
+                            (JSON..=) "MinTargetCapacity" Prelude.<$> minTargetCapacity,
+                            (JSON..=) "SingleAvailabilityZone"
+                              Prelude.<$> singleAvailabilityZone,
+                            (JSON..=) "SingleInstanceType" Prelude.<$> singleInstanceType])}
+instance JSON.ToJSON OnDemandOptionsRequestProperty where
+  toJSON OnDemandOptionsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+               (JSON..=) "CapacityReservationOptions"
+                 Prelude.<$> capacityReservationOptions,
+               (JSON..=) "MaxTotalPrice" Prelude.<$> maxTotalPrice,
+               (JSON..=) "MinTargetCapacity" Prelude.<$> minTargetCapacity,
+               (JSON..=) "SingleAvailabilityZone"
+                 Prelude.<$> singleAvailabilityZone,
+               (JSON..=) "SingleInstanceType" Prelude.<$> singleInstanceType]))
+instance Property "AllocationStrategy" OnDemandOptionsRequestProperty where
+  type PropertyType "AllocationStrategy" OnDemandOptionsRequestProperty = Value Prelude.Text
+  set newValue OnDemandOptionsRequestProperty {..}
+    = OnDemandOptionsRequestProperty
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "CapacityReservationOptions" OnDemandOptionsRequestProperty where
+  type PropertyType "CapacityReservationOptions" OnDemandOptionsRequestProperty = CapacityReservationOptionsRequestProperty
+  set newValue OnDemandOptionsRequestProperty {..}
+    = OnDemandOptionsRequestProperty
+        {capacityReservationOptions = Prelude.pure newValue, ..}
+instance Property "MaxTotalPrice" OnDemandOptionsRequestProperty where
+  type PropertyType "MaxTotalPrice" OnDemandOptionsRequestProperty = Value Prelude.Text
+  set newValue OnDemandOptionsRequestProperty {..}
+    = OnDemandOptionsRequestProperty
+        {maxTotalPrice = Prelude.pure newValue, ..}
+instance Property "MinTargetCapacity" OnDemandOptionsRequestProperty where
+  type PropertyType "MinTargetCapacity" OnDemandOptionsRequestProperty = Value Prelude.Integer
+  set newValue OnDemandOptionsRequestProperty {..}
+    = OnDemandOptionsRequestProperty
+        {minTargetCapacity = Prelude.pure newValue, ..}
+instance Property "SingleAvailabilityZone" OnDemandOptionsRequestProperty where
+  type PropertyType "SingleAvailabilityZone" OnDemandOptionsRequestProperty = Value Prelude.Bool
+  set newValue OnDemandOptionsRequestProperty {..}
+    = OnDemandOptionsRequestProperty
+        {singleAvailabilityZone = Prelude.pure newValue, ..}
+instance Property "SingleInstanceType" OnDemandOptionsRequestProperty where
+  type PropertyType "SingleInstanceType" OnDemandOptionsRequestProperty = Value Prelude.Bool
+  set newValue OnDemandOptionsRequestProperty {..}
+    = OnDemandOptionsRequestProperty
+        {singleInstanceType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/OnDemandOptionsRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/OnDemandOptionsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/OnDemandOptionsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.OnDemandOptionsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OnDemandOptionsRequestProperty :: Prelude.Type
+instance ToResourceProperties OnDemandOptionsRequestProperty
+instance Prelude.Eq OnDemandOptionsRequestProperty
+instance Prelude.Show OnDemandOptionsRequestProperty
+instance JSON.ToJSON OnDemandOptionsRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/PerformanceFactorReferenceRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/PerformanceFactorReferenceRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/PerformanceFactorReferenceRequestProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.EC2Fleet.PerformanceFactorReferenceRequestProperty (
+        PerformanceFactorReferenceRequestProperty(..),
+        mkPerformanceFactorReferenceRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PerformanceFactorReferenceRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-performancefactorreferencerequest.html>
+    PerformanceFactorReferenceRequestProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-performancefactorreferencerequest.html#cfn-ec2-ec2fleet-performancefactorreferencerequest-instancefamily>
+                                               instanceFamily :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPerformanceFactorReferenceRequestProperty ::
+  PerformanceFactorReferenceRequestProperty
+mkPerformanceFactorReferenceRequestProperty
+  = PerformanceFactorReferenceRequestProperty
+      {haddock_workaround_ = (), instanceFamily = Prelude.Nothing}
+instance ToResourceProperties PerformanceFactorReferenceRequestProperty where
+  toResourceProperties PerformanceFactorReferenceRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.PerformanceFactorReferenceRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "InstanceFamily" Prelude.<$> instanceFamily])}
+instance JSON.ToJSON PerformanceFactorReferenceRequestProperty where
+  toJSON PerformanceFactorReferenceRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "InstanceFamily" Prelude.<$> instanceFamily]))
+instance Property "InstanceFamily" PerformanceFactorReferenceRequestProperty where
+  type PropertyType "InstanceFamily" PerformanceFactorReferenceRequestProperty = Value Prelude.Text
+  set newValue PerformanceFactorReferenceRequestProperty {..}
+    = PerformanceFactorReferenceRequestProperty
+        {instanceFamily = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/PerformanceFactorReferenceRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/PerformanceFactorReferenceRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/PerformanceFactorReferenceRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.PerformanceFactorReferenceRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PerformanceFactorReferenceRequestProperty :: Prelude.Type
+instance ToResourceProperties PerformanceFactorReferenceRequestProperty
+instance Prelude.Eq PerformanceFactorReferenceRequestProperty
+instance Prelude.Show PerformanceFactorReferenceRequestProperty
+instance JSON.ToJSON PerformanceFactorReferenceRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/PlacementProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/PlacementProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/PlacementProperty.hs
@@ -0,0 +1,97 @@
+module Stratosphere.EC2.EC2Fleet.PlacementProperty (
+        PlacementProperty(..), mkPlacementProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PlacementProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-placement.html>
+    PlacementProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-placement.html#cfn-ec2-ec2fleet-placement-affinity>
+                       affinity :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-placement.html#cfn-ec2-ec2fleet-placement-availabilityzone>
+                       availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-placement.html#cfn-ec2-ec2fleet-placement-groupname>
+                       groupName :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-placement.html#cfn-ec2-ec2fleet-placement-hostid>
+                       hostId :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-placement.html#cfn-ec2-ec2fleet-placement-hostresourcegrouparn>
+                       hostResourceGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-placement.html#cfn-ec2-ec2fleet-placement-partitionnumber>
+                       partitionNumber :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-placement.html#cfn-ec2-ec2fleet-placement-spreaddomain>
+                       spreadDomain :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-placement.html#cfn-ec2-ec2fleet-placement-tenancy>
+                       tenancy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPlacementProperty :: PlacementProperty
+mkPlacementProperty
+  = PlacementProperty
+      {haddock_workaround_ = (), affinity = Prelude.Nothing,
+       availabilityZone = Prelude.Nothing, groupName = Prelude.Nothing,
+       hostId = Prelude.Nothing, hostResourceGroupArn = Prelude.Nothing,
+       partitionNumber = Prelude.Nothing, spreadDomain = Prelude.Nothing,
+       tenancy = Prelude.Nothing}
+instance ToResourceProperties PlacementProperty where
+  toResourceProperties PlacementProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.Placement",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Affinity" Prelude.<$> affinity,
+                            (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                            (JSON..=) "GroupName" Prelude.<$> groupName,
+                            (JSON..=) "HostId" Prelude.<$> hostId,
+                            (JSON..=) "HostResourceGroupArn" Prelude.<$> hostResourceGroupArn,
+                            (JSON..=) "PartitionNumber" Prelude.<$> partitionNumber,
+                            (JSON..=) "SpreadDomain" Prelude.<$> spreadDomain,
+                            (JSON..=) "Tenancy" Prelude.<$> tenancy])}
+instance JSON.ToJSON PlacementProperty where
+  toJSON PlacementProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Affinity" Prelude.<$> affinity,
+               (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+               (JSON..=) "GroupName" Prelude.<$> groupName,
+               (JSON..=) "HostId" Prelude.<$> hostId,
+               (JSON..=) "HostResourceGroupArn" Prelude.<$> hostResourceGroupArn,
+               (JSON..=) "PartitionNumber" Prelude.<$> partitionNumber,
+               (JSON..=) "SpreadDomain" Prelude.<$> spreadDomain,
+               (JSON..=) "Tenancy" Prelude.<$> tenancy]))
+instance Property "Affinity" PlacementProperty where
+  type PropertyType "Affinity" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {affinity = Prelude.pure newValue, ..}
+instance Property "AvailabilityZone" PlacementProperty where
+  type PropertyType "AvailabilityZone" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {availabilityZone = Prelude.pure newValue, ..}
+instance Property "GroupName" PlacementProperty where
+  type PropertyType "GroupName" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {groupName = Prelude.pure newValue, ..}
+instance Property "HostId" PlacementProperty where
+  type PropertyType "HostId" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {hostId = Prelude.pure newValue, ..}
+instance Property "HostResourceGroupArn" PlacementProperty where
+  type PropertyType "HostResourceGroupArn" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty
+        {hostResourceGroupArn = Prelude.pure newValue, ..}
+instance Property "PartitionNumber" PlacementProperty where
+  type PropertyType "PartitionNumber" PlacementProperty = Value Prelude.Integer
+  set newValue PlacementProperty {..}
+    = PlacementProperty {partitionNumber = Prelude.pure newValue, ..}
+instance Property "SpreadDomain" PlacementProperty where
+  type PropertyType "SpreadDomain" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {spreadDomain = Prelude.pure newValue, ..}
+instance Property "Tenancy" PlacementProperty where
+  type PropertyType "Tenancy" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {tenancy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/PlacementProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/PlacementProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/PlacementProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.PlacementProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PlacementProperty :: Prelude.Type
+instance ToResourceProperties PlacementProperty
+instance Prelude.Eq PlacementProperty
+instance Prelude.Show PlacementProperty
+instance JSON.ToJSON PlacementProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/SpotOptionsRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/SpotOptionsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/SpotOptionsRequestProperty.hs
@@ -0,0 +1,117 @@
+module Stratosphere.EC2.EC2Fleet.SpotOptionsRequestProperty (
+        module Exports, SpotOptionsRequestProperty(..),
+        mkSpotOptionsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.EC2Fleet.MaintenanceStrategiesProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotOptionsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-spotoptionsrequest.html>
+    SpotOptionsRequestProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-spotoptionsrequest.html#cfn-ec2-ec2fleet-spotoptionsrequest-allocationstrategy>
+                                allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-spotoptionsrequest.html#cfn-ec2-ec2fleet-spotoptionsrequest-instanceinterruptionbehavior>
+                                instanceInterruptionBehavior :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-spotoptionsrequest.html#cfn-ec2-ec2fleet-spotoptionsrequest-instancepoolstousecount>
+                                instancePoolsToUseCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-spotoptionsrequest.html#cfn-ec2-ec2fleet-spotoptionsrequest-maintenancestrategies>
+                                maintenanceStrategies :: (Prelude.Maybe MaintenanceStrategiesProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-spotoptionsrequest.html#cfn-ec2-ec2fleet-spotoptionsrequest-maxtotalprice>
+                                maxTotalPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-spotoptionsrequest.html#cfn-ec2-ec2fleet-spotoptionsrequest-mintargetcapacity>
+                                minTargetCapacity :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-spotoptionsrequest.html#cfn-ec2-ec2fleet-spotoptionsrequest-singleavailabilityzone>
+                                singleAvailabilityZone :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-spotoptionsrequest.html#cfn-ec2-ec2fleet-spotoptionsrequest-singleinstancetype>
+                                singleInstanceType :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotOptionsRequestProperty :: SpotOptionsRequestProperty
+mkSpotOptionsRequestProperty
+  = SpotOptionsRequestProperty
+      {haddock_workaround_ = (), allocationStrategy = Prelude.Nothing,
+       instanceInterruptionBehavior = Prelude.Nothing,
+       instancePoolsToUseCount = Prelude.Nothing,
+       maintenanceStrategies = Prelude.Nothing,
+       maxTotalPrice = Prelude.Nothing,
+       minTargetCapacity = Prelude.Nothing,
+       singleAvailabilityZone = Prelude.Nothing,
+       singleInstanceType = Prelude.Nothing}
+instance ToResourceProperties SpotOptionsRequestProperty where
+  toResourceProperties SpotOptionsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.SpotOptionsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                            (JSON..=) "InstanceInterruptionBehavior"
+                              Prelude.<$> instanceInterruptionBehavior,
+                            (JSON..=) "InstancePoolsToUseCount"
+                              Prelude.<$> instancePoolsToUseCount,
+                            (JSON..=) "MaintenanceStrategies"
+                              Prelude.<$> maintenanceStrategies,
+                            (JSON..=) "MaxTotalPrice" Prelude.<$> maxTotalPrice,
+                            (JSON..=) "MinTargetCapacity" Prelude.<$> minTargetCapacity,
+                            (JSON..=) "SingleAvailabilityZone"
+                              Prelude.<$> singleAvailabilityZone,
+                            (JSON..=) "SingleInstanceType" Prelude.<$> singleInstanceType])}
+instance JSON.ToJSON SpotOptionsRequestProperty where
+  toJSON SpotOptionsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+               (JSON..=) "InstanceInterruptionBehavior"
+                 Prelude.<$> instanceInterruptionBehavior,
+               (JSON..=) "InstancePoolsToUseCount"
+                 Prelude.<$> instancePoolsToUseCount,
+               (JSON..=) "MaintenanceStrategies"
+                 Prelude.<$> maintenanceStrategies,
+               (JSON..=) "MaxTotalPrice" Prelude.<$> maxTotalPrice,
+               (JSON..=) "MinTargetCapacity" Prelude.<$> minTargetCapacity,
+               (JSON..=) "SingleAvailabilityZone"
+                 Prelude.<$> singleAvailabilityZone,
+               (JSON..=) "SingleInstanceType" Prelude.<$> singleInstanceType]))
+instance Property "AllocationStrategy" SpotOptionsRequestProperty where
+  type PropertyType "AllocationStrategy" SpotOptionsRequestProperty = Value Prelude.Text
+  set newValue SpotOptionsRequestProperty {..}
+    = SpotOptionsRequestProperty
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "InstanceInterruptionBehavior" SpotOptionsRequestProperty where
+  type PropertyType "InstanceInterruptionBehavior" SpotOptionsRequestProperty = Value Prelude.Text
+  set newValue SpotOptionsRequestProperty {..}
+    = SpotOptionsRequestProperty
+        {instanceInterruptionBehavior = Prelude.pure newValue, ..}
+instance Property "InstancePoolsToUseCount" SpotOptionsRequestProperty where
+  type PropertyType "InstancePoolsToUseCount" SpotOptionsRequestProperty = Value Prelude.Integer
+  set newValue SpotOptionsRequestProperty {..}
+    = SpotOptionsRequestProperty
+        {instancePoolsToUseCount = Prelude.pure newValue, ..}
+instance Property "MaintenanceStrategies" SpotOptionsRequestProperty where
+  type PropertyType "MaintenanceStrategies" SpotOptionsRequestProperty = MaintenanceStrategiesProperty
+  set newValue SpotOptionsRequestProperty {..}
+    = SpotOptionsRequestProperty
+        {maintenanceStrategies = Prelude.pure newValue, ..}
+instance Property "MaxTotalPrice" SpotOptionsRequestProperty where
+  type PropertyType "MaxTotalPrice" SpotOptionsRequestProperty = Value Prelude.Text
+  set newValue SpotOptionsRequestProperty {..}
+    = SpotOptionsRequestProperty
+        {maxTotalPrice = Prelude.pure newValue, ..}
+instance Property "MinTargetCapacity" SpotOptionsRequestProperty where
+  type PropertyType "MinTargetCapacity" SpotOptionsRequestProperty = Value Prelude.Integer
+  set newValue SpotOptionsRequestProperty {..}
+    = SpotOptionsRequestProperty
+        {minTargetCapacity = Prelude.pure newValue, ..}
+instance Property "SingleAvailabilityZone" SpotOptionsRequestProperty where
+  type PropertyType "SingleAvailabilityZone" SpotOptionsRequestProperty = Value Prelude.Bool
+  set newValue SpotOptionsRequestProperty {..}
+    = SpotOptionsRequestProperty
+        {singleAvailabilityZone = Prelude.pure newValue, ..}
+instance Property "SingleInstanceType" SpotOptionsRequestProperty where
+  type PropertyType "SingleInstanceType" SpotOptionsRequestProperty = Value Prelude.Bool
+  set newValue SpotOptionsRequestProperty {..}
+    = SpotOptionsRequestProperty
+        {singleInstanceType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/SpotOptionsRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/SpotOptionsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/SpotOptionsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.SpotOptionsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotOptionsRequestProperty :: Prelude.Type
+instance ToResourceProperties SpotOptionsRequestProperty
+instance Prelude.Eq SpotOptionsRequestProperty
+instance Prelude.Show SpotOptionsRequestProperty
+instance JSON.ToJSON SpotOptionsRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/TagSpecificationProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/TagSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/TagSpecificationProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.EC2Fleet.TagSpecificationProperty (
+        TagSpecificationProperty(..), mkTagSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TagSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-tagspecification.html>
+    TagSpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-tagspecification.html#cfn-ec2-ec2fleet-tagspecification-resourcetype>
+                              resourceType :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-tagspecification.html#cfn-ec2-ec2fleet-tagspecification-tags>
+                              tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTagSpecificationProperty :: TagSpecificationProperty
+mkTagSpecificationProperty
+  = TagSpecificationProperty
+      {haddock_workaround_ = (), resourceType = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties TagSpecificationProperty where
+  toResourceProperties TagSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.TagSpecification",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON TagSpecificationProperty where
+  toJSON TagSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ResourceType" TagSpecificationProperty where
+  type PropertyType "ResourceType" TagSpecificationProperty = Value Prelude.Text
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty
+        {resourceType = Prelude.pure newValue, ..}
+instance Property "Tags" TagSpecificationProperty where
+  type PropertyType "Tags" TagSpecificationProperty = [Tag]
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/TagSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/TagSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/TagSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.TagSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TagSpecificationProperty :: Prelude.Type
+instance ToResourceProperties TagSpecificationProperty
+instance Prelude.Eq TagSpecificationProperty
+instance Prelude.Show TagSpecificationProperty
+instance JSON.ToJSON TagSpecificationProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/TargetCapacitySpecificationRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/TargetCapacitySpecificationRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/TargetCapacitySpecificationRequestProperty.hs
@@ -0,0 +1,89 @@
+module Stratosphere.EC2.EC2Fleet.TargetCapacitySpecificationRequestProperty (
+        TargetCapacitySpecificationRequestProperty(..),
+        mkTargetCapacitySpecificationRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetCapacitySpecificationRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-targetcapacityspecificationrequest.html>
+    TargetCapacitySpecificationRequestProperty {haddock_workaround_ :: (),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-targetcapacityspecificationrequest.html#cfn-ec2-ec2fleet-targetcapacityspecificationrequest-defaulttargetcapacitytype>
+                                                defaultTargetCapacityType :: (Prelude.Maybe (Value Prelude.Text)),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-targetcapacityspecificationrequest.html#cfn-ec2-ec2fleet-targetcapacityspecificationrequest-ondemandtargetcapacity>
+                                                onDemandTargetCapacity :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-targetcapacityspecificationrequest.html#cfn-ec2-ec2fleet-targetcapacityspecificationrequest-spottargetcapacity>
+                                                spotTargetCapacity :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-targetcapacityspecificationrequest.html#cfn-ec2-ec2fleet-targetcapacityspecificationrequest-targetcapacityunittype>
+                                                targetCapacityUnitType :: (Prelude.Maybe (Value Prelude.Text)),
+                                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-targetcapacityspecificationrequest.html#cfn-ec2-ec2fleet-targetcapacityspecificationrequest-totaltargetcapacity>
+                                                totalTargetCapacity :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetCapacitySpecificationRequestProperty ::
+  Value Prelude.Integer -> TargetCapacitySpecificationRequestProperty
+mkTargetCapacitySpecificationRequestProperty totalTargetCapacity
+  = TargetCapacitySpecificationRequestProperty
+      {haddock_workaround_ = (),
+       totalTargetCapacity = totalTargetCapacity,
+       defaultTargetCapacityType = Prelude.Nothing,
+       onDemandTargetCapacity = Prelude.Nothing,
+       spotTargetCapacity = Prelude.Nothing,
+       targetCapacityUnitType = Prelude.Nothing}
+instance ToResourceProperties TargetCapacitySpecificationRequestProperty where
+  toResourceProperties
+    TargetCapacitySpecificationRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.TargetCapacitySpecificationRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["TotalTargetCapacity" JSON..= totalTargetCapacity]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DefaultTargetCapacityType"
+                                 Prelude.<$> defaultTargetCapacityType,
+                               (JSON..=) "OnDemandTargetCapacity"
+                                 Prelude.<$> onDemandTargetCapacity,
+                               (JSON..=) "SpotTargetCapacity" Prelude.<$> spotTargetCapacity,
+                               (JSON..=) "TargetCapacityUnitType"
+                                 Prelude.<$> targetCapacityUnitType]))}
+instance JSON.ToJSON TargetCapacitySpecificationRequestProperty where
+  toJSON TargetCapacitySpecificationRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["TotalTargetCapacity" JSON..= totalTargetCapacity]
+              (Prelude.catMaybes
+                 [(JSON..=) "DefaultTargetCapacityType"
+                    Prelude.<$> defaultTargetCapacityType,
+                  (JSON..=) "OnDemandTargetCapacity"
+                    Prelude.<$> onDemandTargetCapacity,
+                  (JSON..=) "SpotTargetCapacity" Prelude.<$> spotTargetCapacity,
+                  (JSON..=) "TargetCapacityUnitType"
+                    Prelude.<$> targetCapacityUnitType])))
+instance Property "DefaultTargetCapacityType" TargetCapacitySpecificationRequestProperty where
+  type PropertyType "DefaultTargetCapacityType" TargetCapacitySpecificationRequestProperty = Value Prelude.Text
+  set newValue TargetCapacitySpecificationRequestProperty {..}
+    = TargetCapacitySpecificationRequestProperty
+        {defaultTargetCapacityType = Prelude.pure newValue, ..}
+instance Property "OnDemandTargetCapacity" TargetCapacitySpecificationRequestProperty where
+  type PropertyType "OnDemandTargetCapacity" TargetCapacitySpecificationRequestProperty = Value Prelude.Integer
+  set newValue TargetCapacitySpecificationRequestProperty {..}
+    = TargetCapacitySpecificationRequestProperty
+        {onDemandTargetCapacity = Prelude.pure newValue, ..}
+instance Property "SpotTargetCapacity" TargetCapacitySpecificationRequestProperty where
+  type PropertyType "SpotTargetCapacity" TargetCapacitySpecificationRequestProperty = Value Prelude.Integer
+  set newValue TargetCapacitySpecificationRequestProperty {..}
+    = TargetCapacitySpecificationRequestProperty
+        {spotTargetCapacity = Prelude.pure newValue, ..}
+instance Property "TargetCapacityUnitType" TargetCapacitySpecificationRequestProperty where
+  type PropertyType "TargetCapacityUnitType" TargetCapacitySpecificationRequestProperty = Value Prelude.Text
+  set newValue TargetCapacitySpecificationRequestProperty {..}
+    = TargetCapacitySpecificationRequestProperty
+        {targetCapacityUnitType = Prelude.pure newValue, ..}
+instance Property "TotalTargetCapacity" TargetCapacitySpecificationRequestProperty where
+  type PropertyType "TotalTargetCapacity" TargetCapacitySpecificationRequestProperty = Value Prelude.Integer
+  set newValue TargetCapacitySpecificationRequestProperty {..}
+    = TargetCapacitySpecificationRequestProperty
+        {totalTargetCapacity = newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/TargetCapacitySpecificationRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/TargetCapacitySpecificationRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/TargetCapacitySpecificationRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.TargetCapacitySpecificationRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetCapacitySpecificationRequestProperty :: Prelude.Type
+instance ToResourceProperties TargetCapacitySpecificationRequestProperty
+instance Prelude.Eq TargetCapacitySpecificationRequestProperty
+instance Prelude.Show TargetCapacitySpecificationRequestProperty
+instance JSON.ToJSON TargetCapacitySpecificationRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/TotalLocalStorageGBRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/TotalLocalStorageGBRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/TotalLocalStorageGBRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.EC2Fleet.TotalLocalStorageGBRequestProperty (
+        TotalLocalStorageGBRequestProperty(..),
+        mkTotalLocalStorageGBRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TotalLocalStorageGBRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-totallocalstoragegbrequest.html>
+    TotalLocalStorageGBRequestProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-totallocalstoragegbrequest.html#cfn-ec2-ec2fleet-totallocalstoragegbrequest-max>
+                                        max :: (Prelude.Maybe (Value Prelude.Double)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-totallocalstoragegbrequest.html#cfn-ec2-ec2fleet-totallocalstoragegbrequest-min>
+                                        min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTotalLocalStorageGBRequestProperty ::
+  TotalLocalStorageGBRequestProperty
+mkTotalLocalStorageGBRequestProperty
+  = TotalLocalStorageGBRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties TotalLocalStorageGBRequestProperty where
+  toResourceProperties TotalLocalStorageGBRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.TotalLocalStorageGBRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON TotalLocalStorageGBRequestProperty where
+  toJSON TotalLocalStorageGBRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" TotalLocalStorageGBRequestProperty where
+  type PropertyType "Max" TotalLocalStorageGBRequestProperty = Value Prelude.Double
+  set newValue TotalLocalStorageGBRequestProperty {..}
+    = TotalLocalStorageGBRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" TotalLocalStorageGBRequestProperty where
+  type PropertyType "Min" TotalLocalStorageGBRequestProperty = Value Prelude.Double
+  set newValue TotalLocalStorageGBRequestProperty {..}
+    = TotalLocalStorageGBRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/TotalLocalStorageGBRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/TotalLocalStorageGBRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/TotalLocalStorageGBRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.TotalLocalStorageGBRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TotalLocalStorageGBRequestProperty :: Prelude.Type
+instance ToResourceProperties TotalLocalStorageGBRequestProperty
+instance Prelude.Eq TotalLocalStorageGBRequestProperty
+instance Prelude.Show TotalLocalStorageGBRequestProperty
+instance JSON.ToJSON TotalLocalStorageGBRequestProperty
diff --git a/gen/Stratosphere/EC2/EC2Fleet/VCpuCountRangeRequestProperty.hs b/gen/Stratosphere/EC2/EC2Fleet/VCpuCountRangeRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/VCpuCountRangeRequestProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.EC2Fleet.VCpuCountRangeRequestProperty (
+        VCpuCountRangeRequestProperty(..), mkVCpuCountRangeRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VCpuCountRangeRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-vcpucountrangerequest.html>
+    VCpuCountRangeRequestProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-vcpucountrangerequest.html#cfn-ec2-ec2fleet-vcpucountrangerequest-max>
+                                   max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ec2fleet-vcpucountrangerequest.html#cfn-ec2-ec2fleet-vcpucountrangerequest-min>
+                                   min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVCpuCountRangeRequestProperty :: VCpuCountRangeRequestProperty
+mkVCpuCountRangeRequestProperty
+  = VCpuCountRangeRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties VCpuCountRangeRequestProperty where
+  toResourceProperties VCpuCountRangeRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EC2Fleet.VCpuCountRangeRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON VCpuCountRangeRequestProperty where
+  toJSON VCpuCountRangeRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" VCpuCountRangeRequestProperty where
+  type PropertyType "Max" VCpuCountRangeRequestProperty = Value Prelude.Integer
+  set newValue VCpuCountRangeRequestProperty {..}
+    = VCpuCountRangeRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" VCpuCountRangeRequestProperty where
+  type PropertyType "Min" VCpuCountRangeRequestProperty = Value Prelude.Integer
+  set newValue VCpuCountRangeRequestProperty {..}
+    = VCpuCountRangeRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EC2Fleet/VCpuCountRangeRequestProperty.hs-boot b/gen/Stratosphere/EC2/EC2Fleet/VCpuCountRangeRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EC2Fleet/VCpuCountRangeRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.EC2Fleet.VCpuCountRangeRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VCpuCountRangeRequestProperty :: Prelude.Type
+instance ToResourceProperties VCpuCountRangeRequestProperty
+instance Prelude.Eq VCpuCountRangeRequestProperty
+instance Prelude.Show VCpuCountRangeRequestProperty
+instance JSON.ToJSON VCpuCountRangeRequestProperty
diff --git a/gen/Stratosphere/EC2/EIP.hs b/gen/Stratosphere/EC2/EIP.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EIP.hs
@@ -0,0 +1,93 @@
+module Stratosphere.EC2.EIP (
+        EIP(..), mkEIP
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data EIP
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eip.html>
+    EIP {haddock_workaround_ :: (),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eip.html#cfn-ec2-eip-address>
+         address :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eip.html#cfn-ec2-eip-domain>
+         domain :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eip.html#cfn-ec2-eip-instanceid>
+         instanceId :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eip.html#cfn-ec2-eip-ipampoolid>
+         ipamPoolId :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eip.html#cfn-ec2-eip-networkbordergroup>
+         networkBorderGroup :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eip.html#cfn-ec2-eip-publicipv4pool>
+         publicIpv4Pool :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eip.html#cfn-ec2-eip-tags>
+         tags :: (Prelude.Maybe [Tag]),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eip.html#cfn-ec2-eip-transferaddress>
+         transferAddress :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEIP :: EIP
+mkEIP
+  = EIP
+      {haddock_workaround_ = (), address = Prelude.Nothing,
+       domain = Prelude.Nothing, instanceId = Prelude.Nothing,
+       ipamPoolId = Prelude.Nothing, networkBorderGroup = Prelude.Nothing,
+       publicIpv4Pool = Prelude.Nothing, tags = Prelude.Nothing,
+       transferAddress = Prelude.Nothing}
+instance ToResourceProperties EIP where
+  toResourceProperties EIP {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EIP", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Address" Prelude.<$> address,
+                            (JSON..=) "Domain" Prelude.<$> domain,
+                            (JSON..=) "InstanceId" Prelude.<$> instanceId,
+                            (JSON..=) "IpamPoolId" Prelude.<$> ipamPoolId,
+                            (JSON..=) "NetworkBorderGroup" Prelude.<$> networkBorderGroup,
+                            (JSON..=) "PublicIpv4Pool" Prelude.<$> publicIpv4Pool,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "TransferAddress" Prelude.<$> transferAddress])}
+instance JSON.ToJSON EIP where
+  toJSON EIP {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Address" Prelude.<$> address,
+               (JSON..=) "Domain" Prelude.<$> domain,
+               (JSON..=) "InstanceId" Prelude.<$> instanceId,
+               (JSON..=) "IpamPoolId" Prelude.<$> ipamPoolId,
+               (JSON..=) "NetworkBorderGroup" Prelude.<$> networkBorderGroup,
+               (JSON..=) "PublicIpv4Pool" Prelude.<$> publicIpv4Pool,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "TransferAddress" Prelude.<$> transferAddress]))
+instance Property "Address" EIP where
+  type PropertyType "Address" EIP = Value Prelude.Text
+  set newValue EIP {..} = EIP {address = Prelude.pure newValue, ..}
+instance Property "Domain" EIP where
+  type PropertyType "Domain" EIP = Value Prelude.Text
+  set newValue EIP {..} = EIP {domain = Prelude.pure newValue, ..}
+instance Property "InstanceId" EIP where
+  type PropertyType "InstanceId" EIP = Value Prelude.Text
+  set newValue EIP {..}
+    = EIP {instanceId = Prelude.pure newValue, ..}
+instance Property "IpamPoolId" EIP where
+  type PropertyType "IpamPoolId" EIP = Value Prelude.Text
+  set newValue EIP {..}
+    = EIP {ipamPoolId = Prelude.pure newValue, ..}
+instance Property "NetworkBorderGroup" EIP where
+  type PropertyType "NetworkBorderGroup" EIP = Value Prelude.Text
+  set newValue EIP {..}
+    = EIP {networkBorderGroup = Prelude.pure newValue, ..}
+instance Property "PublicIpv4Pool" EIP where
+  type PropertyType "PublicIpv4Pool" EIP = Value Prelude.Text
+  set newValue EIP {..}
+    = EIP {publicIpv4Pool = Prelude.pure newValue, ..}
+instance Property "Tags" EIP where
+  type PropertyType "Tags" EIP = [Tag]
+  set newValue EIP {..} = EIP {tags = Prelude.pure newValue, ..}
+instance Property "TransferAddress" EIP where
+  type PropertyType "TransferAddress" EIP = Value Prelude.Text
+  set newValue EIP {..}
+    = EIP {transferAddress = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EIPAssociation.hs b/gen/Stratosphere/EC2/EIPAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EIPAssociation.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EC2.EIPAssociation (
+        EIPAssociation(..), mkEIPAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EIPAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eipassociation.html>
+    EIPAssociation {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eipassociation.html#cfn-ec2-eipassociation-allocationid>
+                    allocationId :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eipassociation.html#cfn-ec2-eipassociation-instanceid>
+                    instanceId :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eipassociation.html#cfn-ec2-eipassociation-networkinterfaceid>
+                    networkInterfaceId :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-eipassociation.html#cfn-ec2-eipassociation-privateipaddress>
+                    privateIpAddress :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEIPAssociation :: EIPAssociation
+mkEIPAssociation
+  = EIPAssociation
+      {haddock_workaround_ = (), allocationId = Prelude.Nothing,
+       instanceId = Prelude.Nothing, networkInterfaceId = Prelude.Nothing,
+       privateIpAddress = Prelude.Nothing}
+instance ToResourceProperties EIPAssociation where
+  toResourceProperties EIPAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EIPAssociation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationId" Prelude.<$> allocationId,
+                            (JSON..=) "InstanceId" Prelude.<$> instanceId,
+                            (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                            (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress])}
+instance JSON.ToJSON EIPAssociation where
+  toJSON EIPAssociation {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationId" Prelude.<$> allocationId,
+               (JSON..=) "InstanceId" Prelude.<$> instanceId,
+               (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+               (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress]))
+instance Property "AllocationId" EIPAssociation where
+  type PropertyType "AllocationId" EIPAssociation = Value Prelude.Text
+  set newValue EIPAssociation {..}
+    = EIPAssociation {allocationId = Prelude.pure newValue, ..}
+instance Property "InstanceId" EIPAssociation where
+  type PropertyType "InstanceId" EIPAssociation = Value Prelude.Text
+  set newValue EIPAssociation {..}
+    = EIPAssociation {instanceId = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceId" EIPAssociation where
+  type PropertyType "NetworkInterfaceId" EIPAssociation = Value Prelude.Text
+  set newValue EIPAssociation {..}
+    = EIPAssociation {networkInterfaceId = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddress" EIPAssociation where
+  type PropertyType "PrivateIpAddress" EIPAssociation = Value Prelude.Text
+  set newValue EIPAssociation {..}
+    = EIPAssociation {privateIpAddress = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/EgressOnlyInternetGateway.hs b/gen/Stratosphere/EC2/EgressOnlyInternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EgressOnlyInternetGateway.hs
@@ -0,0 +1,46 @@
+module Stratosphere.EC2.EgressOnlyInternetGateway (
+        EgressOnlyInternetGateway(..), mkEgressOnlyInternetGateway
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data EgressOnlyInternetGateway
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-egressonlyinternetgateway.html>
+    EgressOnlyInternetGateway {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-egressonlyinternetgateway.html#cfn-ec2-egressonlyinternetgateway-tags>
+                               tags :: (Prelude.Maybe [Tag]),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-egressonlyinternetgateway.html#cfn-ec2-egressonlyinternetgateway-vpcid>
+                               vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEgressOnlyInternetGateway ::
+  Value Prelude.Text -> EgressOnlyInternetGateway
+mkEgressOnlyInternetGateway vpcId
+  = EgressOnlyInternetGateway
+      {haddock_workaround_ = (), vpcId = vpcId, tags = Prelude.Nothing}
+instance ToResourceProperties EgressOnlyInternetGateway where
+  toResourceProperties EgressOnlyInternetGateway {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EgressOnlyInternetGateway",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON EgressOnlyInternetGateway where
+  toJSON EgressOnlyInternetGateway {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcId" JSON..= vpcId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Tags" EgressOnlyInternetGateway where
+  type PropertyType "Tags" EgressOnlyInternetGateway = [Tag]
+  set newValue EgressOnlyInternetGateway {..}
+    = EgressOnlyInternetGateway {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" EgressOnlyInternetGateway where
+  type PropertyType "VpcId" EgressOnlyInternetGateway = Value Prelude.Text
+  set newValue EgressOnlyInternetGateway {..}
+    = EgressOnlyInternetGateway {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/EnclaveCertificateIamRoleAssociation.hs b/gen/Stratosphere/EC2/EnclaveCertificateIamRoleAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/EnclaveCertificateIamRoleAssociation.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.EnclaveCertificateIamRoleAssociation (
+        EnclaveCertificateIamRoleAssociation(..),
+        mkEnclaveCertificateIamRoleAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnclaveCertificateIamRoleAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-enclavecertificateiamroleassociation.html>
+    EnclaveCertificateIamRoleAssociation {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-enclavecertificateiamroleassociation.html#cfn-ec2-enclavecertificateiamroleassociation-certificatearn>
+                                          certificateArn :: (Value Prelude.Text),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-enclavecertificateiamroleassociation.html#cfn-ec2-enclavecertificateiamroleassociation-rolearn>
+                                          roleArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnclaveCertificateIamRoleAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> EnclaveCertificateIamRoleAssociation
+mkEnclaveCertificateIamRoleAssociation certificateArn roleArn
+  = EnclaveCertificateIamRoleAssociation
+      {haddock_workaround_ = (), certificateArn = certificateArn,
+       roleArn = roleArn}
+instance ToResourceProperties EnclaveCertificateIamRoleAssociation where
+  toResourceProperties EnclaveCertificateIamRoleAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::EnclaveCertificateIamRoleAssociation",
+         supportsTags = Prelude.False,
+         properties = ["CertificateArn" JSON..= certificateArn,
+                       "RoleArn" JSON..= roleArn]}
+instance JSON.ToJSON EnclaveCertificateIamRoleAssociation where
+  toJSON EnclaveCertificateIamRoleAssociation {..}
+    = JSON.object
+        ["CertificateArn" JSON..= certificateArn,
+         "RoleArn" JSON..= roleArn]
+instance Property "CertificateArn" EnclaveCertificateIamRoleAssociation where
+  type PropertyType "CertificateArn" EnclaveCertificateIamRoleAssociation = Value Prelude.Text
+  set newValue EnclaveCertificateIamRoleAssociation {..}
+    = EnclaveCertificateIamRoleAssociation
+        {certificateArn = newValue, ..}
+instance Property "RoleArn" EnclaveCertificateIamRoleAssociation where
+  type PropertyType "RoleArn" EnclaveCertificateIamRoleAssociation = Value Prelude.Text
+  set newValue EnclaveCertificateIamRoleAssociation {..}
+    = EnclaveCertificateIamRoleAssociation {roleArn = newValue, ..}
diff --git a/gen/Stratosphere/EC2/FlowLog.hs b/gen/Stratosphere/EC2/FlowLog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/FlowLog.hs
@@ -0,0 +1,140 @@
+module Stratosphere.EC2.FlowLog (
+        module Exports, FlowLog(..), mkFlowLog
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.FlowLog.DestinationOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data FlowLog
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html>
+    FlowLog {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-delivercrossaccountrole>
+             deliverCrossAccountRole :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-deliverlogspermissionarn>
+             deliverLogsPermissionArn :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-destinationoptions>
+             destinationOptions :: (Prelude.Maybe DestinationOptionsProperty),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-logdestination>
+             logDestination :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-logdestinationtype>
+             logDestinationType :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-logformat>
+             logFormat :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-loggroupname>
+             logGroupName :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-maxaggregationinterval>
+             maxAggregationInterval :: (Prelude.Maybe (Value Prelude.Integer)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-resourceid>
+             resourceId :: (Value Prelude.Text),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-resourcetype>
+             resourceType :: (Value Prelude.Text),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-tags>
+             tags :: (Prelude.Maybe [Tag]),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-flowlog.html#cfn-ec2-flowlog-traffictype>
+             trafficType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFlowLog :: Value Prelude.Text -> Value Prelude.Text -> FlowLog
+mkFlowLog resourceId resourceType
+  = FlowLog
+      {haddock_workaround_ = (), resourceId = resourceId,
+       resourceType = resourceType,
+       deliverCrossAccountRole = Prelude.Nothing,
+       deliverLogsPermissionArn = Prelude.Nothing,
+       destinationOptions = Prelude.Nothing,
+       logDestination = Prelude.Nothing,
+       logDestinationType = Prelude.Nothing, logFormat = Prelude.Nothing,
+       logGroupName = Prelude.Nothing,
+       maxAggregationInterval = Prelude.Nothing, tags = Prelude.Nothing,
+       trafficType = Prelude.Nothing}
+instance ToResourceProperties FlowLog where
+  toResourceProperties FlowLog {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::FlowLog", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ResourceId" JSON..= resourceId,
+                            "ResourceType" JSON..= resourceType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DeliverCrossAccountRole"
+                                 Prelude.<$> deliverCrossAccountRole,
+                               (JSON..=) "DeliverLogsPermissionArn"
+                                 Prelude.<$> deliverLogsPermissionArn,
+                               (JSON..=) "DestinationOptions" Prelude.<$> destinationOptions,
+                               (JSON..=) "LogDestination" Prelude.<$> logDestination,
+                               (JSON..=) "LogDestinationType" Prelude.<$> logDestinationType,
+                               (JSON..=) "LogFormat" Prelude.<$> logFormat,
+                               (JSON..=) "LogGroupName" Prelude.<$> logGroupName,
+                               (JSON..=) "MaxAggregationInterval"
+                                 Prelude.<$> maxAggregationInterval,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "TrafficType" Prelude.<$> trafficType]))}
+instance JSON.ToJSON FlowLog where
+  toJSON FlowLog {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ResourceId" JSON..= resourceId,
+               "ResourceType" JSON..= resourceType]
+              (Prelude.catMaybes
+                 [(JSON..=) "DeliverCrossAccountRole"
+                    Prelude.<$> deliverCrossAccountRole,
+                  (JSON..=) "DeliverLogsPermissionArn"
+                    Prelude.<$> deliverLogsPermissionArn,
+                  (JSON..=) "DestinationOptions" Prelude.<$> destinationOptions,
+                  (JSON..=) "LogDestination" Prelude.<$> logDestination,
+                  (JSON..=) "LogDestinationType" Prelude.<$> logDestinationType,
+                  (JSON..=) "LogFormat" Prelude.<$> logFormat,
+                  (JSON..=) "LogGroupName" Prelude.<$> logGroupName,
+                  (JSON..=) "MaxAggregationInterval"
+                    Prelude.<$> maxAggregationInterval,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "TrafficType" Prelude.<$> trafficType])))
+instance Property "DeliverCrossAccountRole" FlowLog where
+  type PropertyType "DeliverCrossAccountRole" FlowLog = Value Prelude.Text
+  set newValue FlowLog {..}
+    = FlowLog {deliverCrossAccountRole = Prelude.pure newValue, ..}
+instance Property "DeliverLogsPermissionArn" FlowLog where
+  type PropertyType "DeliverLogsPermissionArn" FlowLog = Value Prelude.Text
+  set newValue FlowLog {..}
+    = FlowLog {deliverLogsPermissionArn = Prelude.pure newValue, ..}
+instance Property "DestinationOptions" FlowLog where
+  type PropertyType "DestinationOptions" FlowLog = DestinationOptionsProperty
+  set newValue FlowLog {..}
+    = FlowLog {destinationOptions = Prelude.pure newValue, ..}
+instance Property "LogDestination" FlowLog where
+  type PropertyType "LogDestination" FlowLog = Value Prelude.Text
+  set newValue FlowLog {..}
+    = FlowLog {logDestination = Prelude.pure newValue, ..}
+instance Property "LogDestinationType" FlowLog where
+  type PropertyType "LogDestinationType" FlowLog = Value Prelude.Text
+  set newValue FlowLog {..}
+    = FlowLog {logDestinationType = Prelude.pure newValue, ..}
+instance Property "LogFormat" FlowLog where
+  type PropertyType "LogFormat" FlowLog = Value Prelude.Text
+  set newValue FlowLog {..}
+    = FlowLog {logFormat = Prelude.pure newValue, ..}
+instance Property "LogGroupName" FlowLog where
+  type PropertyType "LogGroupName" FlowLog = Value Prelude.Text
+  set newValue FlowLog {..}
+    = FlowLog {logGroupName = Prelude.pure newValue, ..}
+instance Property "MaxAggregationInterval" FlowLog where
+  type PropertyType "MaxAggregationInterval" FlowLog = Value Prelude.Integer
+  set newValue FlowLog {..}
+    = FlowLog {maxAggregationInterval = Prelude.pure newValue, ..}
+instance Property "ResourceId" FlowLog where
+  type PropertyType "ResourceId" FlowLog = Value Prelude.Text
+  set newValue FlowLog {..} = FlowLog {resourceId = newValue, ..}
+instance Property "ResourceType" FlowLog where
+  type PropertyType "ResourceType" FlowLog = Value Prelude.Text
+  set newValue FlowLog {..} = FlowLog {resourceType = newValue, ..}
+instance Property "Tags" FlowLog where
+  type PropertyType "Tags" FlowLog = [Tag]
+  set newValue FlowLog {..}
+    = FlowLog {tags = Prelude.pure newValue, ..}
+instance Property "TrafficType" FlowLog where
+  type PropertyType "TrafficType" FlowLog = Value Prelude.Text
+  set newValue FlowLog {..}
+    = FlowLog {trafficType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/FlowLog/DestinationOptionsProperty.hs b/gen/Stratosphere/EC2/FlowLog/DestinationOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/FlowLog/DestinationOptionsProperty.hs
@@ -0,0 +1,57 @@
+module Stratosphere.EC2.FlowLog.DestinationOptionsProperty (
+        DestinationOptionsProperty(..), mkDestinationOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DestinationOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-flowlog-destinationoptions.html>
+    DestinationOptionsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-flowlog-destinationoptions.html#cfn-ec2-flowlog-destinationoptions-fileformat>
+                                fileFormat :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-flowlog-destinationoptions.html#cfn-ec2-flowlog-destinationoptions-hivecompatiblepartitions>
+                                hiveCompatiblePartitions :: (Value Prelude.Bool),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-flowlog-destinationoptions.html#cfn-ec2-flowlog-destinationoptions-perhourpartition>
+                                perHourPartition :: (Value Prelude.Bool)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDestinationOptionsProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Bool
+     -> Value Prelude.Bool -> DestinationOptionsProperty
+mkDestinationOptionsProperty
+  fileFormat
+  hiveCompatiblePartitions
+  perHourPartition
+  = DestinationOptionsProperty
+      {haddock_workaround_ = (), fileFormat = fileFormat,
+       hiveCompatiblePartitions = hiveCompatiblePartitions,
+       perHourPartition = perHourPartition}
+instance ToResourceProperties DestinationOptionsProperty where
+  toResourceProperties DestinationOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::FlowLog.DestinationOptions",
+         supportsTags = Prelude.False,
+         properties = ["FileFormat" JSON..= fileFormat,
+                       "HiveCompatiblePartitions" JSON..= hiveCompatiblePartitions,
+                       "PerHourPartition" JSON..= perHourPartition]}
+instance JSON.ToJSON DestinationOptionsProperty where
+  toJSON DestinationOptionsProperty {..}
+    = JSON.object
+        ["FileFormat" JSON..= fileFormat,
+         "HiveCompatiblePartitions" JSON..= hiveCompatiblePartitions,
+         "PerHourPartition" JSON..= perHourPartition]
+instance Property "FileFormat" DestinationOptionsProperty where
+  type PropertyType "FileFormat" DestinationOptionsProperty = Value Prelude.Text
+  set newValue DestinationOptionsProperty {..}
+    = DestinationOptionsProperty {fileFormat = newValue, ..}
+instance Property "HiveCompatiblePartitions" DestinationOptionsProperty where
+  type PropertyType "HiveCompatiblePartitions" DestinationOptionsProperty = Value Prelude.Bool
+  set newValue DestinationOptionsProperty {..}
+    = DestinationOptionsProperty
+        {hiveCompatiblePartitions = newValue, ..}
+instance Property "PerHourPartition" DestinationOptionsProperty where
+  type PropertyType "PerHourPartition" DestinationOptionsProperty = Value Prelude.Bool
+  set newValue DestinationOptionsProperty {..}
+    = DestinationOptionsProperty {perHourPartition = newValue, ..}
diff --git a/gen/Stratosphere/EC2/FlowLog/DestinationOptionsProperty.hs-boot b/gen/Stratosphere/EC2/FlowLog/DestinationOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/FlowLog/DestinationOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.FlowLog.DestinationOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DestinationOptionsProperty :: Prelude.Type
+instance ToResourceProperties DestinationOptionsProperty
+instance Prelude.Eq DestinationOptionsProperty
+instance Prelude.Show DestinationOptionsProperty
+instance JSON.ToJSON DestinationOptionsProperty
diff --git a/gen/Stratosphere/EC2/GatewayRouteTableAssociation.hs b/gen/Stratosphere/EC2/GatewayRouteTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/GatewayRouteTableAssociation.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EC2.GatewayRouteTableAssociation (
+        GatewayRouteTableAssociation(..), mkGatewayRouteTableAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GatewayRouteTableAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-gatewayroutetableassociation.html>
+    GatewayRouteTableAssociation {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-gatewayroutetableassociation.html#cfn-ec2-gatewayroutetableassociation-gatewayid>
+                                  gatewayId :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-gatewayroutetableassociation.html#cfn-ec2-gatewayroutetableassociation-routetableid>
+                                  routeTableId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGatewayRouteTableAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> GatewayRouteTableAssociation
+mkGatewayRouteTableAssociation gatewayId routeTableId
+  = GatewayRouteTableAssociation
+      {haddock_workaround_ = (), gatewayId = gatewayId,
+       routeTableId = routeTableId}
+instance ToResourceProperties GatewayRouteTableAssociation where
+  toResourceProperties GatewayRouteTableAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::GatewayRouteTableAssociation",
+         supportsTags = Prelude.False,
+         properties = ["GatewayId" JSON..= gatewayId,
+                       "RouteTableId" JSON..= routeTableId]}
+instance JSON.ToJSON GatewayRouteTableAssociation where
+  toJSON GatewayRouteTableAssociation {..}
+    = JSON.object
+        ["GatewayId" JSON..= gatewayId,
+         "RouteTableId" JSON..= routeTableId]
+instance Property "GatewayId" GatewayRouteTableAssociation where
+  type PropertyType "GatewayId" GatewayRouteTableAssociation = Value Prelude.Text
+  set newValue GatewayRouteTableAssociation {..}
+    = GatewayRouteTableAssociation {gatewayId = newValue, ..}
+instance Property "RouteTableId" GatewayRouteTableAssociation where
+  type PropertyType "RouteTableId" GatewayRouteTableAssociation = Value Prelude.Text
+  set newValue GatewayRouteTableAssociation {..}
+    = GatewayRouteTableAssociation {routeTableId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Host.hs b/gen/Stratosphere/EC2/Host.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Host.hs
@@ -0,0 +1,103 @@
+module Stratosphere.EC2.Host (
+        Host(..), mkHost
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Host
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html>
+    Host {haddock_workaround_ :: (),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-assetid>
+          assetId :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-autoplacement>
+          autoPlacement :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-availabilityzone>
+          availabilityZone :: (Value Prelude.Text),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-hostmaintenance>
+          hostMaintenance :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-hostrecovery>
+          hostRecovery :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-instancefamily>
+          instanceFamily :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-instancetype>
+          instanceType :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-outpostarn>
+          outpostArn :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-host.html#cfn-ec2-host-tags>
+          tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHost :: Value Prelude.Text -> Host
+mkHost availabilityZone
+  = Host
+      {haddock_workaround_ = (), availabilityZone = availabilityZone,
+       assetId = Prelude.Nothing, autoPlacement = Prelude.Nothing,
+       hostMaintenance = Prelude.Nothing, hostRecovery = Prelude.Nothing,
+       instanceFamily = Prelude.Nothing, instanceType = Prelude.Nothing,
+       outpostArn = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties Host where
+  toResourceProperties Host {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Host", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AvailabilityZone" JSON..= availabilityZone]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AssetId" Prelude.<$> assetId,
+                               (JSON..=) "AutoPlacement" Prelude.<$> autoPlacement,
+                               (JSON..=) "HostMaintenance" Prelude.<$> hostMaintenance,
+                               (JSON..=) "HostRecovery" Prelude.<$> hostRecovery,
+                               (JSON..=) "InstanceFamily" Prelude.<$> instanceFamily,
+                               (JSON..=) "InstanceType" Prelude.<$> instanceType,
+                               (JSON..=) "OutpostArn" Prelude.<$> outpostArn,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Host where
+  toJSON Host {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AvailabilityZone" JSON..= availabilityZone]
+              (Prelude.catMaybes
+                 [(JSON..=) "AssetId" Prelude.<$> assetId,
+                  (JSON..=) "AutoPlacement" Prelude.<$> autoPlacement,
+                  (JSON..=) "HostMaintenance" Prelude.<$> hostMaintenance,
+                  (JSON..=) "HostRecovery" Prelude.<$> hostRecovery,
+                  (JSON..=) "InstanceFamily" Prelude.<$> instanceFamily,
+                  (JSON..=) "InstanceType" Prelude.<$> instanceType,
+                  (JSON..=) "OutpostArn" Prelude.<$> outpostArn,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AssetId" Host where
+  type PropertyType "AssetId" Host = Value Prelude.Text
+  set newValue Host {..} = Host {assetId = Prelude.pure newValue, ..}
+instance Property "AutoPlacement" Host where
+  type PropertyType "AutoPlacement" Host = Value Prelude.Text
+  set newValue Host {..}
+    = Host {autoPlacement = Prelude.pure newValue, ..}
+instance Property "AvailabilityZone" Host where
+  type PropertyType "AvailabilityZone" Host = Value Prelude.Text
+  set newValue Host {..} = Host {availabilityZone = newValue, ..}
+instance Property "HostMaintenance" Host where
+  type PropertyType "HostMaintenance" Host = Value Prelude.Text
+  set newValue Host {..}
+    = Host {hostMaintenance = Prelude.pure newValue, ..}
+instance Property "HostRecovery" Host where
+  type PropertyType "HostRecovery" Host = Value Prelude.Text
+  set newValue Host {..}
+    = Host {hostRecovery = Prelude.pure newValue, ..}
+instance Property "InstanceFamily" Host where
+  type PropertyType "InstanceFamily" Host = Value Prelude.Text
+  set newValue Host {..}
+    = Host {instanceFamily = Prelude.pure newValue, ..}
+instance Property "InstanceType" Host where
+  type PropertyType "InstanceType" Host = Value Prelude.Text
+  set newValue Host {..}
+    = Host {instanceType = Prelude.pure newValue, ..}
+instance Property "OutpostArn" Host where
+  type PropertyType "OutpostArn" Host = Value Prelude.Text
+  set newValue Host {..}
+    = Host {outpostArn = Prelude.pure newValue, ..}
+instance Property "Tags" Host where
+  type PropertyType "Tags" Host = [Tag]
+  set newValue Host {..} = Host {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAM.hs b/gen/Stratosphere/EC2/IPAM.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAM.hs
@@ -0,0 +1,94 @@
+module Stratosphere.EC2.IPAM (
+        module Exports, IPAM(..), mkIPAM
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.IPAM.IpamOperatingRegionProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.IPAM.IpamOrganizationalUnitExclusionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data IPAM
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html>
+    IPAM {haddock_workaround_ :: (),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-defaultresourcediscoveryorganizationalunitexclusions>
+          defaultResourceDiscoveryOrganizationalUnitExclusions :: (Prelude.Maybe [IpamOrganizationalUnitExclusionProperty]),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-description>
+          description :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-enableprivategua>
+          enablePrivateGua :: (Prelude.Maybe (Value Prelude.Bool)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-meteredaccount>
+          meteredAccount :: (Prelude.Maybe (Value Prelude.Text)),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-operatingregions>
+          operatingRegions :: (Prelude.Maybe [IpamOperatingRegionProperty]),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-tags>
+          tags :: (Prelude.Maybe [Tag]),
+          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-tier>
+          tier :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIPAM :: IPAM
+mkIPAM
+  = IPAM
+      {haddock_workaround_ = (),
+       defaultResourceDiscoveryOrganizationalUnitExclusions = Prelude.Nothing,
+       description = Prelude.Nothing, enablePrivateGua = Prelude.Nothing,
+       meteredAccount = Prelude.Nothing,
+       operatingRegions = Prelude.Nothing, tags = Prelude.Nothing,
+       tier = Prelude.Nothing}
+instance ToResourceProperties IPAM where
+  toResourceProperties IPAM {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAM", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DefaultResourceDiscoveryOrganizationalUnitExclusions"
+                              Prelude.<$> defaultResourceDiscoveryOrganizationalUnitExclusions,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "EnablePrivateGua" Prelude.<$> enablePrivateGua,
+                            (JSON..=) "MeteredAccount" Prelude.<$> meteredAccount,
+                            (JSON..=) "OperatingRegions" Prelude.<$> operatingRegions,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "Tier" Prelude.<$> tier])}
+instance JSON.ToJSON IPAM where
+  toJSON IPAM {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DefaultResourceDiscoveryOrganizationalUnitExclusions"
+                 Prelude.<$> defaultResourceDiscoveryOrganizationalUnitExclusions,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "EnablePrivateGua" Prelude.<$> enablePrivateGua,
+               (JSON..=) "MeteredAccount" Prelude.<$> meteredAccount,
+               (JSON..=) "OperatingRegions" Prelude.<$> operatingRegions,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "Tier" Prelude.<$> tier]))
+instance Property "DefaultResourceDiscoveryOrganizationalUnitExclusions" IPAM where
+  type PropertyType "DefaultResourceDiscoveryOrganizationalUnitExclusions" IPAM = [IpamOrganizationalUnitExclusionProperty]
+  set newValue IPAM {..}
+    = IPAM
+        {defaultResourceDiscoveryOrganizationalUnitExclusions = Prelude.pure
+                                                                  newValue,
+         ..}
+instance Property "Description" IPAM where
+  type PropertyType "Description" IPAM = Value Prelude.Text
+  set newValue IPAM {..}
+    = IPAM {description = Prelude.pure newValue, ..}
+instance Property "EnablePrivateGua" IPAM where
+  type PropertyType "EnablePrivateGua" IPAM = Value Prelude.Bool
+  set newValue IPAM {..}
+    = IPAM {enablePrivateGua = Prelude.pure newValue, ..}
+instance Property "MeteredAccount" IPAM where
+  type PropertyType "MeteredAccount" IPAM = Value Prelude.Text
+  set newValue IPAM {..}
+    = IPAM {meteredAccount = Prelude.pure newValue, ..}
+instance Property "OperatingRegions" IPAM where
+  type PropertyType "OperatingRegions" IPAM = [IpamOperatingRegionProperty]
+  set newValue IPAM {..}
+    = IPAM {operatingRegions = Prelude.pure newValue, ..}
+instance Property "Tags" IPAM where
+  type PropertyType "Tags" IPAM = [Tag]
+  set newValue IPAM {..} = IPAM {tags = Prelude.pure newValue, ..}
+instance Property "Tier" IPAM where
+  type PropertyType "Tier" IPAM = Value Prelude.Text
+  set newValue IPAM {..} = IPAM {tier = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAM/IpamOperatingRegionProperty.hs b/gen/Stratosphere/EC2/IPAM/IpamOperatingRegionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAM/IpamOperatingRegionProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.EC2.IPAM.IpamOperatingRegionProperty (
+        IpamOperatingRegionProperty(..), mkIpamOperatingRegionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IpamOperatingRegionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipam-ipamoperatingregion.html>
+    IpamOperatingRegionProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipam-ipamoperatingregion.html#cfn-ec2-ipam-ipamoperatingregion-regionname>
+                                 regionName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpamOperatingRegionProperty ::
+  Value Prelude.Text -> IpamOperatingRegionProperty
+mkIpamOperatingRegionProperty regionName
+  = IpamOperatingRegionProperty
+      {haddock_workaround_ = (), regionName = regionName}
+instance ToResourceProperties IpamOperatingRegionProperty where
+  toResourceProperties IpamOperatingRegionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAM.IpamOperatingRegion",
+         supportsTags = Prelude.False,
+         properties = ["RegionName" JSON..= regionName]}
+instance JSON.ToJSON IpamOperatingRegionProperty where
+  toJSON IpamOperatingRegionProperty {..}
+    = JSON.object ["RegionName" JSON..= regionName]
+instance Property "RegionName" IpamOperatingRegionProperty where
+  type PropertyType "RegionName" IpamOperatingRegionProperty = Value Prelude.Text
+  set newValue IpamOperatingRegionProperty {..}
+    = IpamOperatingRegionProperty {regionName = newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAM/IpamOperatingRegionProperty.hs-boot b/gen/Stratosphere/EC2/IPAM/IpamOperatingRegionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAM/IpamOperatingRegionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.IPAM.IpamOperatingRegionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IpamOperatingRegionProperty :: Prelude.Type
+instance ToResourceProperties IpamOperatingRegionProperty
+instance Prelude.Eq IpamOperatingRegionProperty
+instance Prelude.Show IpamOperatingRegionProperty
+instance JSON.ToJSON IpamOperatingRegionProperty
diff --git a/gen/Stratosphere/EC2/IPAM/IpamOrganizationalUnitExclusionProperty.hs b/gen/Stratosphere/EC2/IPAM/IpamOrganizationalUnitExclusionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAM/IpamOrganizationalUnitExclusionProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.IPAM.IpamOrganizationalUnitExclusionProperty (
+        IpamOrganizationalUnitExclusionProperty(..),
+        mkIpamOrganizationalUnitExclusionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IpamOrganizationalUnitExclusionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipam-ipamorganizationalunitexclusion.html>
+    IpamOrganizationalUnitExclusionProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipam-ipamorganizationalunitexclusion.html#cfn-ec2-ipam-ipamorganizationalunitexclusion-organizationsentitypath>
+                                             organizationsEntityPath :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpamOrganizationalUnitExclusionProperty ::
+  Value Prelude.Text -> IpamOrganizationalUnitExclusionProperty
+mkIpamOrganizationalUnitExclusionProperty organizationsEntityPath
+  = IpamOrganizationalUnitExclusionProperty
+      {haddock_workaround_ = (),
+       organizationsEntityPath = organizationsEntityPath}
+instance ToResourceProperties IpamOrganizationalUnitExclusionProperty where
+  toResourceProperties IpamOrganizationalUnitExclusionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAM.IpamOrganizationalUnitExclusion",
+         supportsTags = Prelude.False,
+         properties = ["OrganizationsEntityPath"
+                         JSON..= organizationsEntityPath]}
+instance JSON.ToJSON IpamOrganizationalUnitExclusionProperty where
+  toJSON IpamOrganizationalUnitExclusionProperty {..}
+    = JSON.object
+        ["OrganizationsEntityPath" JSON..= organizationsEntityPath]
+instance Property "OrganizationsEntityPath" IpamOrganizationalUnitExclusionProperty where
+  type PropertyType "OrganizationsEntityPath" IpamOrganizationalUnitExclusionProperty = Value Prelude.Text
+  set newValue IpamOrganizationalUnitExclusionProperty {..}
+    = IpamOrganizationalUnitExclusionProperty
+        {organizationsEntityPath = newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAM/IpamOrganizationalUnitExclusionProperty.hs-boot b/gen/Stratosphere/EC2/IPAM/IpamOrganizationalUnitExclusionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAM/IpamOrganizationalUnitExclusionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.IPAM.IpamOrganizationalUnitExclusionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IpamOrganizationalUnitExclusionProperty :: Prelude.Type
+instance ToResourceProperties IpamOrganizationalUnitExclusionProperty
+instance Prelude.Eq IpamOrganizationalUnitExclusionProperty
+instance Prelude.Show IpamOrganizationalUnitExclusionProperty
+instance JSON.ToJSON IpamOrganizationalUnitExclusionProperty
diff --git a/gen/Stratosphere/EC2/IPAMAllocation.hs b/gen/Stratosphere/EC2/IPAMAllocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMAllocation.hs
@@ -0,0 +1,64 @@
+module Stratosphere.EC2.IPAMAllocation (
+        IPAMAllocation(..), mkIPAMAllocation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IPAMAllocation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamallocation.html>
+    IPAMAllocation {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamallocation.html#cfn-ec2-ipamallocation-cidr>
+                    cidr :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamallocation.html#cfn-ec2-ipamallocation-description>
+                    description :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamallocation.html#cfn-ec2-ipamallocation-ipampoolid>
+                    ipamPoolId :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamallocation.html#cfn-ec2-ipamallocation-netmasklength>
+                    netmaskLength :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIPAMAllocation :: Value Prelude.Text -> IPAMAllocation
+mkIPAMAllocation ipamPoolId
+  = IPAMAllocation
+      {haddock_workaround_ = (), ipamPoolId = ipamPoolId,
+       cidr = Prelude.Nothing, description = Prelude.Nothing,
+       netmaskLength = Prelude.Nothing}
+instance ToResourceProperties IPAMAllocation where
+  toResourceProperties IPAMAllocation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMAllocation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IpamPoolId" JSON..= ipamPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Cidr" Prelude.<$> cidr,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "NetmaskLength" Prelude.<$> netmaskLength]))}
+instance JSON.ToJSON IPAMAllocation where
+  toJSON IPAMAllocation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IpamPoolId" JSON..= ipamPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Cidr" Prelude.<$> cidr,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "NetmaskLength" Prelude.<$> netmaskLength])))
+instance Property "Cidr" IPAMAllocation where
+  type PropertyType "Cidr" IPAMAllocation = Value Prelude.Text
+  set newValue IPAMAllocation {..}
+    = IPAMAllocation {cidr = Prelude.pure newValue, ..}
+instance Property "Description" IPAMAllocation where
+  type PropertyType "Description" IPAMAllocation = Value Prelude.Text
+  set newValue IPAMAllocation {..}
+    = IPAMAllocation {description = Prelude.pure newValue, ..}
+instance Property "IpamPoolId" IPAMAllocation where
+  type PropertyType "IpamPoolId" IPAMAllocation = Value Prelude.Text
+  set newValue IPAMAllocation {..}
+    = IPAMAllocation {ipamPoolId = newValue, ..}
+instance Property "NetmaskLength" IPAMAllocation where
+  type PropertyType "NetmaskLength" IPAMAllocation = Value Prelude.Integer
+  set newValue IPAMAllocation {..}
+    = IPAMAllocation {netmaskLength = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAMPool.hs b/gen/Stratosphere/EC2/IPAMPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMPool.hs
@@ -0,0 +1,180 @@
+module Stratosphere.EC2.IPAMPool (
+        module Exports, IPAMPool(..), mkIPAMPool
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.IPAMPool.ProvisionedCidrProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.IPAMPool.SourceResourceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data IPAMPool
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html>
+    IPAMPool {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-addressfamily>
+              addressFamily :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-allocationdefaultnetmasklength>
+              allocationDefaultNetmaskLength :: (Prelude.Maybe (Value Prelude.Integer)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-allocationmaxnetmasklength>
+              allocationMaxNetmaskLength :: (Prelude.Maybe (Value Prelude.Integer)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-allocationminnetmasklength>
+              allocationMinNetmaskLength :: (Prelude.Maybe (Value Prelude.Integer)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-allocationresourcetags>
+              allocationResourceTags :: (Prelude.Maybe [Tag]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-autoimport>
+              autoImport :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-awsservice>
+              awsService :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-description>
+              description :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-ipamscopeid>
+              ipamScopeId :: (Value Prelude.Text),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-locale>
+              locale :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-provisionedcidrs>
+              provisionedCidrs :: (Prelude.Maybe [ProvisionedCidrProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-publicipsource>
+              publicIpSource :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-publiclyadvertisable>
+              publiclyAdvertisable :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-sourceipampoolid>
+              sourceIpamPoolId :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-sourceresource>
+              sourceResource :: (Prelude.Maybe SourceResourceProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-tags>
+              tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIPAMPool :: Value Prelude.Text -> Value Prelude.Text -> IPAMPool
+mkIPAMPool addressFamily ipamScopeId
+  = IPAMPool
+      {haddock_workaround_ = (), addressFamily = addressFamily,
+       ipamScopeId = ipamScopeId,
+       allocationDefaultNetmaskLength = Prelude.Nothing,
+       allocationMaxNetmaskLength = Prelude.Nothing,
+       allocationMinNetmaskLength = Prelude.Nothing,
+       allocationResourceTags = Prelude.Nothing,
+       autoImport = Prelude.Nothing, awsService = Prelude.Nothing,
+       description = Prelude.Nothing, locale = Prelude.Nothing,
+       provisionedCidrs = Prelude.Nothing,
+       publicIpSource = Prelude.Nothing,
+       publiclyAdvertisable = Prelude.Nothing,
+       sourceIpamPoolId = Prelude.Nothing,
+       sourceResource = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties IPAMPool where
+  toResourceProperties IPAMPool {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMPool", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AddressFamily" JSON..= addressFamily,
+                            "IpamScopeId" JSON..= ipamScopeId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AllocationDefaultNetmaskLength"
+                                 Prelude.<$> allocationDefaultNetmaskLength,
+                               (JSON..=) "AllocationMaxNetmaskLength"
+                                 Prelude.<$> allocationMaxNetmaskLength,
+                               (JSON..=) "AllocationMinNetmaskLength"
+                                 Prelude.<$> allocationMinNetmaskLength,
+                               (JSON..=) "AllocationResourceTags"
+                                 Prelude.<$> allocationResourceTags,
+                               (JSON..=) "AutoImport" Prelude.<$> autoImport,
+                               (JSON..=) "AwsService" Prelude.<$> awsService,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Locale" Prelude.<$> locale,
+                               (JSON..=) "ProvisionedCidrs" Prelude.<$> provisionedCidrs,
+                               (JSON..=) "PublicIpSource" Prelude.<$> publicIpSource,
+                               (JSON..=) "PubliclyAdvertisable" Prelude.<$> publiclyAdvertisable,
+                               (JSON..=) "SourceIpamPoolId" Prelude.<$> sourceIpamPoolId,
+                               (JSON..=) "SourceResource" Prelude.<$> sourceResource,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON IPAMPool where
+  toJSON IPAMPool {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AddressFamily" JSON..= addressFamily,
+               "IpamScopeId" JSON..= ipamScopeId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AllocationDefaultNetmaskLength"
+                    Prelude.<$> allocationDefaultNetmaskLength,
+                  (JSON..=) "AllocationMaxNetmaskLength"
+                    Prelude.<$> allocationMaxNetmaskLength,
+                  (JSON..=) "AllocationMinNetmaskLength"
+                    Prelude.<$> allocationMinNetmaskLength,
+                  (JSON..=) "AllocationResourceTags"
+                    Prelude.<$> allocationResourceTags,
+                  (JSON..=) "AutoImport" Prelude.<$> autoImport,
+                  (JSON..=) "AwsService" Prelude.<$> awsService,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Locale" Prelude.<$> locale,
+                  (JSON..=) "ProvisionedCidrs" Prelude.<$> provisionedCidrs,
+                  (JSON..=) "PublicIpSource" Prelude.<$> publicIpSource,
+                  (JSON..=) "PubliclyAdvertisable" Prelude.<$> publiclyAdvertisable,
+                  (JSON..=) "SourceIpamPoolId" Prelude.<$> sourceIpamPoolId,
+                  (JSON..=) "SourceResource" Prelude.<$> sourceResource,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AddressFamily" IPAMPool where
+  type PropertyType "AddressFamily" IPAMPool = Value Prelude.Text
+  set newValue IPAMPool {..}
+    = IPAMPool {addressFamily = newValue, ..}
+instance Property "AllocationDefaultNetmaskLength" IPAMPool where
+  type PropertyType "AllocationDefaultNetmaskLength" IPAMPool = Value Prelude.Integer
+  set newValue IPAMPool {..}
+    = IPAMPool
+        {allocationDefaultNetmaskLength = Prelude.pure newValue, ..}
+instance Property "AllocationMaxNetmaskLength" IPAMPool where
+  type PropertyType "AllocationMaxNetmaskLength" IPAMPool = Value Prelude.Integer
+  set newValue IPAMPool {..}
+    = IPAMPool {allocationMaxNetmaskLength = Prelude.pure newValue, ..}
+instance Property "AllocationMinNetmaskLength" IPAMPool where
+  type PropertyType "AllocationMinNetmaskLength" IPAMPool = Value Prelude.Integer
+  set newValue IPAMPool {..}
+    = IPAMPool {allocationMinNetmaskLength = Prelude.pure newValue, ..}
+instance Property "AllocationResourceTags" IPAMPool where
+  type PropertyType "AllocationResourceTags" IPAMPool = [Tag]
+  set newValue IPAMPool {..}
+    = IPAMPool {allocationResourceTags = Prelude.pure newValue, ..}
+instance Property "AutoImport" IPAMPool where
+  type PropertyType "AutoImport" IPAMPool = Value Prelude.Bool
+  set newValue IPAMPool {..}
+    = IPAMPool {autoImport = Prelude.pure newValue, ..}
+instance Property "AwsService" IPAMPool where
+  type PropertyType "AwsService" IPAMPool = Value Prelude.Text
+  set newValue IPAMPool {..}
+    = IPAMPool {awsService = Prelude.pure newValue, ..}
+instance Property "Description" IPAMPool where
+  type PropertyType "Description" IPAMPool = Value Prelude.Text
+  set newValue IPAMPool {..}
+    = IPAMPool {description = Prelude.pure newValue, ..}
+instance Property "IpamScopeId" IPAMPool where
+  type PropertyType "IpamScopeId" IPAMPool = Value Prelude.Text
+  set newValue IPAMPool {..} = IPAMPool {ipamScopeId = newValue, ..}
+instance Property "Locale" IPAMPool where
+  type PropertyType "Locale" IPAMPool = Value Prelude.Text
+  set newValue IPAMPool {..}
+    = IPAMPool {locale = Prelude.pure newValue, ..}
+instance Property "ProvisionedCidrs" IPAMPool where
+  type PropertyType "ProvisionedCidrs" IPAMPool = [ProvisionedCidrProperty]
+  set newValue IPAMPool {..}
+    = IPAMPool {provisionedCidrs = Prelude.pure newValue, ..}
+instance Property "PublicIpSource" IPAMPool where
+  type PropertyType "PublicIpSource" IPAMPool = Value Prelude.Text
+  set newValue IPAMPool {..}
+    = IPAMPool {publicIpSource = Prelude.pure newValue, ..}
+instance Property "PubliclyAdvertisable" IPAMPool where
+  type PropertyType "PubliclyAdvertisable" IPAMPool = Value Prelude.Bool
+  set newValue IPAMPool {..}
+    = IPAMPool {publiclyAdvertisable = Prelude.pure newValue, ..}
+instance Property "SourceIpamPoolId" IPAMPool where
+  type PropertyType "SourceIpamPoolId" IPAMPool = Value Prelude.Text
+  set newValue IPAMPool {..}
+    = IPAMPool {sourceIpamPoolId = Prelude.pure newValue, ..}
+instance Property "SourceResource" IPAMPool where
+  type PropertyType "SourceResource" IPAMPool = SourceResourceProperty
+  set newValue IPAMPool {..}
+    = IPAMPool {sourceResource = Prelude.pure newValue, ..}
+instance Property "Tags" IPAMPool where
+  type PropertyType "Tags" IPAMPool = [Tag]
+  set newValue IPAMPool {..}
+    = IPAMPool {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAMPool/ProvisionedCidrProperty.hs b/gen/Stratosphere/EC2/IPAMPool/ProvisionedCidrProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMPool/ProvisionedCidrProperty.hs
@@ -0,0 +1,30 @@
+module Stratosphere.EC2.IPAMPool.ProvisionedCidrProperty (
+        ProvisionedCidrProperty(..), mkProvisionedCidrProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ProvisionedCidrProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipampool-provisionedcidr.html>
+    ProvisionedCidrProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipampool-provisionedcidr.html#cfn-ec2-ipampool-provisionedcidr-cidr>
+                             cidr :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkProvisionedCidrProperty ::
+  Value Prelude.Text -> ProvisionedCidrProperty
+mkProvisionedCidrProperty cidr
+  = ProvisionedCidrProperty {haddock_workaround_ = (), cidr = cidr}
+instance ToResourceProperties ProvisionedCidrProperty where
+  toResourceProperties ProvisionedCidrProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMPool.ProvisionedCidr",
+         supportsTags = Prelude.False, properties = ["Cidr" JSON..= cidr]}
+instance JSON.ToJSON ProvisionedCidrProperty where
+  toJSON ProvisionedCidrProperty {..}
+    = JSON.object ["Cidr" JSON..= cidr]
+instance Property "Cidr" ProvisionedCidrProperty where
+  type PropertyType "Cidr" ProvisionedCidrProperty = Value Prelude.Text
+  set newValue ProvisionedCidrProperty {..}
+    = ProvisionedCidrProperty {cidr = newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAMPool/ProvisionedCidrProperty.hs-boot b/gen/Stratosphere/EC2/IPAMPool/ProvisionedCidrProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMPool/ProvisionedCidrProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.IPAMPool.ProvisionedCidrProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ProvisionedCidrProperty :: Prelude.Type
+instance ToResourceProperties ProvisionedCidrProperty
+instance Prelude.Eq ProvisionedCidrProperty
+instance Prelude.Show ProvisionedCidrProperty
+instance JSON.ToJSON ProvisionedCidrProperty
diff --git a/gen/Stratosphere/EC2/IPAMPool/SourceResourceProperty.hs b/gen/Stratosphere/EC2/IPAMPool/SourceResourceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMPool/SourceResourceProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.EC2.IPAMPool.SourceResourceProperty (
+        SourceResourceProperty(..), mkSourceResourceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SourceResourceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipampool-sourceresource.html>
+    SourceResourceProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipampool-sourceresource.html#cfn-ec2-ipampool-sourceresource-resourceid>
+                            resourceId :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipampool-sourceresource.html#cfn-ec2-ipampool-sourceresource-resourceowner>
+                            resourceOwner :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipampool-sourceresource.html#cfn-ec2-ipampool-sourceresource-resourceregion>
+                            resourceRegion :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipampool-sourceresource.html#cfn-ec2-ipampool-sourceresource-resourcetype>
+                            resourceType :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSourceResourceProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text -> SourceResourceProperty
+mkSourceResourceProperty
+  resourceId
+  resourceOwner
+  resourceRegion
+  resourceType
+  = SourceResourceProperty
+      {haddock_workaround_ = (), resourceId = resourceId,
+       resourceOwner = resourceOwner, resourceRegion = resourceRegion,
+       resourceType = resourceType}
+instance ToResourceProperties SourceResourceProperty where
+  toResourceProperties SourceResourceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMPool.SourceResource",
+         supportsTags = Prelude.False,
+         properties = ["ResourceId" JSON..= resourceId,
+                       "ResourceOwner" JSON..= resourceOwner,
+                       "ResourceRegion" JSON..= resourceRegion,
+                       "ResourceType" JSON..= resourceType]}
+instance JSON.ToJSON SourceResourceProperty where
+  toJSON SourceResourceProperty {..}
+    = JSON.object
+        ["ResourceId" JSON..= resourceId,
+         "ResourceOwner" JSON..= resourceOwner,
+         "ResourceRegion" JSON..= resourceRegion,
+         "ResourceType" JSON..= resourceType]
+instance Property "ResourceId" SourceResourceProperty where
+  type PropertyType "ResourceId" SourceResourceProperty = Value Prelude.Text
+  set newValue SourceResourceProperty {..}
+    = SourceResourceProperty {resourceId = newValue, ..}
+instance Property "ResourceOwner" SourceResourceProperty where
+  type PropertyType "ResourceOwner" SourceResourceProperty = Value Prelude.Text
+  set newValue SourceResourceProperty {..}
+    = SourceResourceProperty {resourceOwner = newValue, ..}
+instance Property "ResourceRegion" SourceResourceProperty where
+  type PropertyType "ResourceRegion" SourceResourceProperty = Value Prelude.Text
+  set newValue SourceResourceProperty {..}
+    = SourceResourceProperty {resourceRegion = newValue, ..}
+instance Property "ResourceType" SourceResourceProperty where
+  type PropertyType "ResourceType" SourceResourceProperty = Value Prelude.Text
+  set newValue SourceResourceProperty {..}
+    = SourceResourceProperty {resourceType = newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAMPool/SourceResourceProperty.hs-boot b/gen/Stratosphere/EC2/IPAMPool/SourceResourceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMPool/SourceResourceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.IPAMPool.SourceResourceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SourceResourceProperty :: Prelude.Type
+instance ToResourceProperties SourceResourceProperty
+instance Prelude.Eq SourceResourceProperty
+instance Prelude.Show SourceResourceProperty
+instance JSON.ToJSON SourceResourceProperty
diff --git a/gen/Stratosphere/EC2/IPAMPoolCidr.hs b/gen/Stratosphere/EC2/IPAMPoolCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMPoolCidr.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EC2.IPAMPoolCidr (
+        IPAMPoolCidr(..), mkIPAMPoolCidr
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IPAMPoolCidr
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampoolcidr.html>
+    IPAMPoolCidr {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampoolcidr.html#cfn-ec2-ipampoolcidr-cidr>
+                  cidr :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampoolcidr.html#cfn-ec2-ipampoolcidr-ipampoolid>
+                  ipamPoolId :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampoolcidr.html#cfn-ec2-ipampoolcidr-netmasklength>
+                  netmaskLength :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIPAMPoolCidr :: Value Prelude.Text -> IPAMPoolCidr
+mkIPAMPoolCidr ipamPoolId
+  = IPAMPoolCidr
+      {haddock_workaround_ = (), ipamPoolId = ipamPoolId,
+       cidr = Prelude.Nothing, netmaskLength = Prelude.Nothing}
+instance ToResourceProperties IPAMPoolCidr where
+  toResourceProperties IPAMPoolCidr {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMPoolCidr", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IpamPoolId" JSON..= ipamPoolId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Cidr" Prelude.<$> cidr,
+                               (JSON..=) "NetmaskLength" Prelude.<$> netmaskLength]))}
+instance JSON.ToJSON IPAMPoolCidr where
+  toJSON IPAMPoolCidr {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IpamPoolId" JSON..= ipamPoolId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Cidr" Prelude.<$> cidr,
+                  (JSON..=) "NetmaskLength" Prelude.<$> netmaskLength])))
+instance Property "Cidr" IPAMPoolCidr where
+  type PropertyType "Cidr" IPAMPoolCidr = Value Prelude.Text
+  set newValue IPAMPoolCidr {..}
+    = IPAMPoolCidr {cidr = Prelude.pure newValue, ..}
+instance Property "IpamPoolId" IPAMPoolCidr where
+  type PropertyType "IpamPoolId" IPAMPoolCidr = Value Prelude.Text
+  set newValue IPAMPoolCidr {..}
+    = IPAMPoolCidr {ipamPoolId = newValue, ..}
+instance Property "NetmaskLength" IPAMPoolCidr where
+  type PropertyType "NetmaskLength" IPAMPoolCidr = Value Prelude.Integer
+  set newValue IPAMPoolCidr {..}
+    = IPAMPoolCidr {netmaskLength = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAMResourceDiscovery.hs b/gen/Stratosphere/EC2/IPAMResourceDiscovery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMResourceDiscovery.hs
@@ -0,0 +1,70 @@
+module Stratosphere.EC2.IPAMResourceDiscovery (
+        module Exports, IPAMResourceDiscovery(..), mkIPAMResourceDiscovery
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.IPAMResourceDiscovery.IpamOperatingRegionProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.IPAMResourceDiscovery.IpamResourceDiscoveryOrganizationalUnitExclusionProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data IPAMResourceDiscovery
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamresourcediscovery.html>
+    IPAMResourceDiscovery {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamresourcediscovery.html#cfn-ec2-ipamresourcediscovery-description>
+                           description :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamresourcediscovery.html#cfn-ec2-ipamresourcediscovery-operatingregions>
+                           operatingRegions :: (Prelude.Maybe [IpamOperatingRegionProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamresourcediscovery.html#cfn-ec2-ipamresourcediscovery-organizationalunitexclusions>
+                           organizationalUnitExclusions :: (Prelude.Maybe [IpamResourceDiscoveryOrganizationalUnitExclusionProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamresourcediscovery.html#cfn-ec2-ipamresourcediscovery-tags>
+                           tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIPAMResourceDiscovery :: IPAMResourceDiscovery
+mkIPAMResourceDiscovery
+  = IPAMResourceDiscovery
+      {haddock_workaround_ = (), description = Prelude.Nothing,
+       operatingRegions = Prelude.Nothing,
+       organizationalUnitExclusions = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties IPAMResourceDiscovery where
+  toResourceProperties IPAMResourceDiscovery {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMResourceDiscovery",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "OperatingRegions" Prelude.<$> operatingRegions,
+                            (JSON..=) "OrganizationalUnitExclusions"
+                              Prelude.<$> organizationalUnitExclusions,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON IPAMResourceDiscovery where
+  toJSON IPAMResourceDiscovery {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "OperatingRegions" Prelude.<$> operatingRegions,
+               (JSON..=) "OrganizationalUnitExclusions"
+                 Prelude.<$> organizationalUnitExclusions,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "Description" IPAMResourceDiscovery where
+  type PropertyType "Description" IPAMResourceDiscovery = Value Prelude.Text
+  set newValue IPAMResourceDiscovery {..}
+    = IPAMResourceDiscovery {description = Prelude.pure newValue, ..}
+instance Property "OperatingRegions" IPAMResourceDiscovery where
+  type PropertyType "OperatingRegions" IPAMResourceDiscovery = [IpamOperatingRegionProperty]
+  set newValue IPAMResourceDiscovery {..}
+    = IPAMResourceDiscovery
+        {operatingRegions = Prelude.pure newValue, ..}
+instance Property "OrganizationalUnitExclusions" IPAMResourceDiscovery where
+  type PropertyType "OrganizationalUnitExclusions" IPAMResourceDiscovery = [IpamResourceDiscoveryOrganizationalUnitExclusionProperty]
+  set newValue IPAMResourceDiscovery {..}
+    = IPAMResourceDiscovery
+        {organizationalUnitExclusions = Prelude.pure newValue, ..}
+instance Property "Tags" IPAMResourceDiscovery where
+  type PropertyType "Tags" IPAMResourceDiscovery = [Tag]
+  set newValue IPAMResourceDiscovery {..}
+    = IPAMResourceDiscovery {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamOperatingRegionProperty.hs b/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamOperatingRegionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamOperatingRegionProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.EC2.IPAMResourceDiscovery.IpamOperatingRegionProperty (
+        IpamOperatingRegionProperty(..), mkIpamOperatingRegionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IpamOperatingRegionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipamresourcediscovery-ipamoperatingregion.html>
+    IpamOperatingRegionProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipamresourcediscovery-ipamoperatingregion.html#cfn-ec2-ipamresourcediscovery-ipamoperatingregion-regionname>
+                                 regionName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpamOperatingRegionProperty ::
+  Value Prelude.Text -> IpamOperatingRegionProperty
+mkIpamOperatingRegionProperty regionName
+  = IpamOperatingRegionProperty
+      {haddock_workaround_ = (), regionName = regionName}
+instance ToResourceProperties IpamOperatingRegionProperty where
+  toResourceProperties IpamOperatingRegionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMResourceDiscovery.IpamOperatingRegion",
+         supportsTags = Prelude.False,
+         properties = ["RegionName" JSON..= regionName]}
+instance JSON.ToJSON IpamOperatingRegionProperty where
+  toJSON IpamOperatingRegionProperty {..}
+    = JSON.object ["RegionName" JSON..= regionName]
+instance Property "RegionName" IpamOperatingRegionProperty where
+  type PropertyType "RegionName" IpamOperatingRegionProperty = Value Prelude.Text
+  set newValue IpamOperatingRegionProperty {..}
+    = IpamOperatingRegionProperty {regionName = newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamOperatingRegionProperty.hs-boot b/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamOperatingRegionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamOperatingRegionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.IPAMResourceDiscovery.IpamOperatingRegionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IpamOperatingRegionProperty :: Prelude.Type
+instance ToResourceProperties IpamOperatingRegionProperty
+instance Prelude.Eq IpamOperatingRegionProperty
+instance Prelude.Show IpamOperatingRegionProperty
+instance JSON.ToJSON IpamOperatingRegionProperty
diff --git a/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamResourceDiscoveryOrganizationalUnitExclusionProperty.hs b/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamResourceDiscoveryOrganizationalUnitExclusionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamResourceDiscoveryOrganizationalUnitExclusionProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EC2.IPAMResourceDiscovery.IpamResourceDiscoveryOrganizationalUnitExclusionProperty (
+        IpamResourceDiscoveryOrganizationalUnitExclusionProperty(..),
+        mkIpamResourceDiscoveryOrganizationalUnitExclusionProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IpamResourceDiscoveryOrganizationalUnitExclusionProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipamresourcediscovery-ipamresourcediscoveryorganizationalunitexclusion.html>
+    IpamResourceDiscoveryOrganizationalUnitExclusionProperty {haddock_workaround_ :: (),
+                                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-ipamresourcediscovery-ipamresourcediscoveryorganizationalunitexclusion.html#cfn-ec2-ipamresourcediscovery-ipamresourcediscoveryorganizationalunitexclusion-organizationsentitypath>
+                                                              organizationsEntityPath :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpamResourceDiscoveryOrganizationalUnitExclusionProperty ::
+  Value Prelude.Text
+  -> IpamResourceDiscoveryOrganizationalUnitExclusionProperty
+mkIpamResourceDiscoveryOrganizationalUnitExclusionProperty
+  organizationsEntityPath
+  = IpamResourceDiscoveryOrganizationalUnitExclusionProperty
+      {haddock_workaround_ = (),
+       organizationsEntityPath = organizationsEntityPath}
+instance ToResourceProperties IpamResourceDiscoveryOrganizationalUnitExclusionProperty where
+  toResourceProperties
+    IpamResourceDiscoveryOrganizationalUnitExclusionProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMResourceDiscovery.IpamResourceDiscoveryOrganizationalUnitExclusion",
+         supportsTags = Prelude.False,
+         properties = ["OrganizationsEntityPath"
+                         JSON..= organizationsEntityPath]}
+instance JSON.ToJSON IpamResourceDiscoveryOrganizationalUnitExclusionProperty where
+  toJSON
+    IpamResourceDiscoveryOrganizationalUnitExclusionProperty {..}
+    = JSON.object
+        ["OrganizationsEntityPath" JSON..= organizationsEntityPath]
+instance Property "OrganizationsEntityPath" IpamResourceDiscoveryOrganizationalUnitExclusionProperty where
+  type PropertyType "OrganizationsEntityPath" IpamResourceDiscoveryOrganizationalUnitExclusionProperty = Value Prelude.Text
+  set
+    newValue
+    IpamResourceDiscoveryOrganizationalUnitExclusionProperty {..}
+    = IpamResourceDiscoveryOrganizationalUnitExclusionProperty
+        {organizationsEntityPath = newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamResourceDiscoveryOrganizationalUnitExclusionProperty.hs-boot b/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamResourceDiscoveryOrganizationalUnitExclusionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMResourceDiscovery/IpamResourceDiscoveryOrganizationalUnitExclusionProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.IPAMResourceDiscovery.IpamResourceDiscoveryOrganizationalUnitExclusionProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IpamResourceDiscoveryOrganizationalUnitExclusionProperty :: Prelude.Type
+instance ToResourceProperties IpamResourceDiscoveryOrganizationalUnitExclusionProperty
+instance Prelude.Eq IpamResourceDiscoveryOrganizationalUnitExclusionProperty
+instance Prelude.Show IpamResourceDiscoveryOrganizationalUnitExclusionProperty
+instance JSON.ToJSON IpamResourceDiscoveryOrganizationalUnitExclusionProperty
diff --git a/gen/Stratosphere/EC2/IPAMResourceDiscoveryAssociation.hs b/gen/Stratosphere/EC2/IPAMResourceDiscoveryAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMResourceDiscoveryAssociation.hs
@@ -0,0 +1,60 @@
+module Stratosphere.EC2.IPAMResourceDiscoveryAssociation (
+        IPAMResourceDiscoveryAssociation(..),
+        mkIPAMResourceDiscoveryAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data IPAMResourceDiscoveryAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamresourcediscoveryassociation.html>
+    IPAMResourceDiscoveryAssociation {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamresourcediscoveryassociation.html#cfn-ec2-ipamresourcediscoveryassociation-ipamid>
+                                      ipamId :: (Value Prelude.Text),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamresourcediscoveryassociation.html#cfn-ec2-ipamresourcediscoveryassociation-ipamresourcediscoveryid>
+                                      ipamResourceDiscoveryId :: (Value Prelude.Text),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamresourcediscoveryassociation.html#cfn-ec2-ipamresourcediscoveryassociation-tags>
+                                      tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIPAMResourceDiscoveryAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> IPAMResourceDiscoveryAssociation
+mkIPAMResourceDiscoveryAssociation ipamId ipamResourceDiscoveryId
+  = IPAMResourceDiscoveryAssociation
+      {haddock_workaround_ = (), ipamId = ipamId,
+       ipamResourceDiscoveryId = ipamResourceDiscoveryId,
+       tags = Prelude.Nothing}
+instance ToResourceProperties IPAMResourceDiscoveryAssociation where
+  toResourceProperties IPAMResourceDiscoveryAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMResourceDiscoveryAssociation",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IpamId" JSON..= ipamId,
+                            "IpamResourceDiscoveryId" JSON..= ipamResourceDiscoveryId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON IPAMResourceDiscoveryAssociation where
+  toJSON IPAMResourceDiscoveryAssociation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IpamId" JSON..= ipamId,
+               "IpamResourceDiscoveryId" JSON..= ipamResourceDiscoveryId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "IpamId" IPAMResourceDiscoveryAssociation where
+  type PropertyType "IpamId" IPAMResourceDiscoveryAssociation = Value Prelude.Text
+  set newValue IPAMResourceDiscoveryAssociation {..}
+    = IPAMResourceDiscoveryAssociation {ipamId = newValue, ..}
+instance Property "IpamResourceDiscoveryId" IPAMResourceDiscoveryAssociation where
+  type PropertyType "IpamResourceDiscoveryId" IPAMResourceDiscoveryAssociation = Value Prelude.Text
+  set newValue IPAMResourceDiscoveryAssociation {..}
+    = IPAMResourceDiscoveryAssociation
+        {ipamResourceDiscoveryId = newValue, ..}
+instance Property "Tags" IPAMResourceDiscoveryAssociation where
+  type PropertyType "Tags" IPAMResourceDiscoveryAssociation = [Tag]
+  set newValue IPAMResourceDiscoveryAssociation {..}
+    = IPAMResourceDiscoveryAssociation
+        {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/IPAMScope.hs b/gen/Stratosphere/EC2/IPAMScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IPAMScope.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EC2.IPAMScope (
+        IPAMScope(..), mkIPAMScope
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data IPAMScope
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html>
+    IPAMScope {haddock_workaround_ :: (),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html#cfn-ec2-ipamscope-description>
+               description :: (Prelude.Maybe (Value Prelude.Text)),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html#cfn-ec2-ipamscope-ipamid>
+               ipamId :: (Value Prelude.Text),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html#cfn-ec2-ipamscope-tags>
+               tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIPAMScope :: Value Prelude.Text -> IPAMScope
+mkIPAMScope ipamId
+  = IPAMScope
+      {haddock_workaround_ = (), ipamId = ipamId,
+       description = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties IPAMScope where
+  toResourceProperties IPAMScope {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IPAMScope", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IpamId" JSON..= ipamId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON IPAMScope where
+  toJSON IPAMScope {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IpamId" JSON..= ipamId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Description" IPAMScope where
+  type PropertyType "Description" IPAMScope = Value Prelude.Text
+  set newValue IPAMScope {..}
+    = IPAMScope {description = Prelude.pure newValue, ..}
+instance Property "IpamId" IPAMScope where
+  type PropertyType "IpamId" IPAMScope = Value Prelude.Text
+  set newValue IPAMScope {..} = IPAMScope {ipamId = newValue, ..}
+instance Property "Tags" IPAMScope where
+  type PropertyType "Tags" IPAMScope = [Tag]
+  set newValue IPAMScope {..}
+    = IPAMScope {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance.hs b/gen/Stratosphere/EC2/Instance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance.hs
@@ -0,0 +1,417 @@
+module Stratosphere.EC2.Instance (
+        module Exports, Instance(..), mkInstance
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.Instance.BlockDeviceMappingProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.CpuOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.CreditSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.ElasticGpuSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.ElasticInferenceAcceleratorProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.EnclaveOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.HibernationOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.InstanceIpv6AddressProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.LaunchTemplateSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.LicenseSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.MetadataOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.NetworkInterfaceProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.PrivateDnsNameOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.SsmAssociationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.VolumeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Instance
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html>
+    Instance {haddock_workaround_ :: (),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-additionalinfo>
+              additionalInfo :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-affinity>
+              affinity :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-availabilityzone>
+              availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-blockdevicemappings>
+              blockDeviceMappings :: (Prelude.Maybe [BlockDeviceMappingProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-cpuoptions>
+              cpuOptions :: (Prelude.Maybe CpuOptionsProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-creditspecification>
+              creditSpecification :: (Prelude.Maybe CreditSpecificationProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-disableapitermination>
+              disableApiTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-ebsoptimized>
+              ebsOptimized :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-elasticgpuspecifications>
+              elasticGpuSpecifications :: (Prelude.Maybe [ElasticGpuSpecificationProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-elasticinferenceaccelerators>
+              elasticInferenceAccelerators :: (Prelude.Maybe [ElasticInferenceAcceleratorProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-enclaveoptions>
+              enclaveOptions :: (Prelude.Maybe EnclaveOptionsProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-hibernationoptions>
+              hibernationOptions :: (Prelude.Maybe HibernationOptionsProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-hostid>
+              hostId :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-hostresourcegrouparn>
+              hostResourceGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-iaminstanceprofile>
+              iamInstanceProfile :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-imageid>
+              imageId :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-instanceinitiatedshutdownbehavior>
+              instanceInitiatedShutdownBehavior :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-instancetype>
+              instanceType :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-ipv6addresscount>
+              ipv6AddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-ipv6addresses>
+              ipv6Addresses :: (Prelude.Maybe [InstanceIpv6AddressProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-kernelid>
+              kernelId :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-keyname>
+              keyName :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-launchtemplate>
+              launchTemplate :: (Prelude.Maybe LaunchTemplateSpecificationProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-licensespecifications>
+              licenseSpecifications :: (Prelude.Maybe [LicenseSpecificationProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-metadataoptions>
+              metadataOptions :: (Prelude.Maybe MetadataOptionsProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-monitoring>
+              monitoring :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-networkinterfaces>
+              networkInterfaces :: (Prelude.Maybe [NetworkInterfaceProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-placementgroupname>
+              placementGroupName :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-privatednsnameoptions>
+              privateDnsNameOptions :: (Prelude.Maybe PrivateDnsNameOptionsProperty),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-privateipaddress>
+              privateIpAddress :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-propagatetagstovolumeoncreation>
+              propagateTagsToVolumeOnCreation :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-ramdiskid>
+              ramdiskId :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids>
+              securityGroupIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroups>
+              securityGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-sourcedestcheck>
+              sourceDestCheck :: (Prelude.Maybe (Value Prelude.Bool)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-ssmassociations>
+              ssmAssociations :: (Prelude.Maybe [SsmAssociationProperty]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-subnetid>
+              subnetId :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-tags>
+              tags :: (Prelude.Maybe [Tag]),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-tenancy>
+              tenancy :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-userdata>
+              userData :: (Prelude.Maybe (Value Prelude.Text)),
+              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html#cfn-ec2-instance-volumes>
+              volumes :: (Prelude.Maybe [VolumeProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstance :: Instance
+mkInstance
+  = Instance
+      {haddock_workaround_ = (), additionalInfo = Prelude.Nothing,
+       affinity = Prelude.Nothing, availabilityZone = Prelude.Nothing,
+       blockDeviceMappings = Prelude.Nothing,
+       cpuOptions = Prelude.Nothing,
+       creditSpecification = Prelude.Nothing,
+       disableApiTermination = Prelude.Nothing,
+       ebsOptimized = Prelude.Nothing,
+       elasticGpuSpecifications = Prelude.Nothing,
+       elasticInferenceAccelerators = Prelude.Nothing,
+       enclaveOptions = Prelude.Nothing,
+       hibernationOptions = Prelude.Nothing, hostId = Prelude.Nothing,
+       hostResourceGroupArn = Prelude.Nothing,
+       iamInstanceProfile = Prelude.Nothing, imageId = Prelude.Nothing,
+       instanceInitiatedShutdownBehavior = Prelude.Nothing,
+       instanceType = Prelude.Nothing, ipv6AddressCount = Prelude.Nothing,
+       ipv6Addresses = Prelude.Nothing, kernelId = Prelude.Nothing,
+       keyName = Prelude.Nothing, launchTemplate = Prelude.Nothing,
+       licenseSpecifications = Prelude.Nothing,
+       metadataOptions = Prelude.Nothing, monitoring = Prelude.Nothing,
+       networkInterfaces = Prelude.Nothing,
+       placementGroupName = Prelude.Nothing,
+       privateDnsNameOptions = Prelude.Nothing,
+       privateIpAddress = Prelude.Nothing,
+       propagateTagsToVolumeOnCreation = Prelude.Nothing,
+       ramdiskId = Prelude.Nothing, securityGroupIds = Prelude.Nothing,
+       securityGroups = Prelude.Nothing,
+       sourceDestCheck = Prelude.Nothing,
+       ssmAssociations = Prelude.Nothing, subnetId = Prelude.Nothing,
+       tags = Prelude.Nothing, tenancy = Prelude.Nothing,
+       userData = Prelude.Nothing, volumes = Prelude.Nothing}
+instance ToResourceProperties Instance where
+  toResourceProperties Instance {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AdditionalInfo" Prelude.<$> additionalInfo,
+                            (JSON..=) "Affinity" Prelude.<$> affinity,
+                            (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                            (JSON..=) "BlockDeviceMappings" Prelude.<$> blockDeviceMappings,
+                            (JSON..=) "CpuOptions" Prelude.<$> cpuOptions,
+                            (JSON..=) "CreditSpecification" Prelude.<$> creditSpecification,
+                            (JSON..=) "DisableApiTermination"
+                              Prelude.<$> disableApiTermination,
+                            (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+                            (JSON..=) "ElasticGpuSpecifications"
+                              Prelude.<$> elasticGpuSpecifications,
+                            (JSON..=) "ElasticInferenceAccelerators"
+                              Prelude.<$> elasticInferenceAccelerators,
+                            (JSON..=) "EnclaveOptions" Prelude.<$> enclaveOptions,
+                            (JSON..=) "HibernationOptions" Prelude.<$> hibernationOptions,
+                            (JSON..=) "HostId" Prelude.<$> hostId,
+                            (JSON..=) "HostResourceGroupArn" Prelude.<$> hostResourceGroupArn,
+                            (JSON..=) "IamInstanceProfile" Prelude.<$> iamInstanceProfile,
+                            (JSON..=) "ImageId" Prelude.<$> imageId,
+                            (JSON..=) "InstanceInitiatedShutdownBehavior"
+                              Prelude.<$> instanceInitiatedShutdownBehavior,
+                            (JSON..=) "InstanceType" Prelude.<$> instanceType,
+                            (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+                            (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+                            (JSON..=) "KernelId" Prelude.<$> kernelId,
+                            (JSON..=) "KeyName" Prelude.<$> keyName,
+                            (JSON..=) "LaunchTemplate" Prelude.<$> launchTemplate,
+                            (JSON..=) "LicenseSpecifications"
+                              Prelude.<$> licenseSpecifications,
+                            (JSON..=) "MetadataOptions" Prelude.<$> metadataOptions,
+                            (JSON..=) "Monitoring" Prelude.<$> monitoring,
+                            (JSON..=) "NetworkInterfaces" Prelude.<$> networkInterfaces,
+                            (JSON..=) "PlacementGroupName" Prelude.<$> placementGroupName,
+                            (JSON..=) "PrivateDnsNameOptions"
+                              Prelude.<$> privateDnsNameOptions,
+                            (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+                            (JSON..=) "PropagateTagsToVolumeOnCreation"
+                              Prelude.<$> propagateTagsToVolumeOnCreation,
+                            (JSON..=) "RamdiskId" Prelude.<$> ramdiskId,
+                            (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                            (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+                            (JSON..=) "SourceDestCheck" Prelude.<$> sourceDestCheck,
+                            (JSON..=) "SsmAssociations" Prelude.<$> ssmAssociations,
+                            (JSON..=) "SubnetId" Prelude.<$> subnetId,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "Tenancy" Prelude.<$> tenancy,
+                            (JSON..=) "UserData" Prelude.<$> userData,
+                            (JSON..=) "Volumes" Prelude.<$> volumes])}
+instance JSON.ToJSON Instance where
+  toJSON Instance {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AdditionalInfo" Prelude.<$> additionalInfo,
+               (JSON..=) "Affinity" Prelude.<$> affinity,
+               (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+               (JSON..=) "BlockDeviceMappings" Prelude.<$> blockDeviceMappings,
+               (JSON..=) "CpuOptions" Prelude.<$> cpuOptions,
+               (JSON..=) "CreditSpecification" Prelude.<$> creditSpecification,
+               (JSON..=) "DisableApiTermination"
+                 Prelude.<$> disableApiTermination,
+               (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+               (JSON..=) "ElasticGpuSpecifications"
+                 Prelude.<$> elasticGpuSpecifications,
+               (JSON..=) "ElasticInferenceAccelerators"
+                 Prelude.<$> elasticInferenceAccelerators,
+               (JSON..=) "EnclaveOptions" Prelude.<$> enclaveOptions,
+               (JSON..=) "HibernationOptions" Prelude.<$> hibernationOptions,
+               (JSON..=) "HostId" Prelude.<$> hostId,
+               (JSON..=) "HostResourceGroupArn" Prelude.<$> hostResourceGroupArn,
+               (JSON..=) "IamInstanceProfile" Prelude.<$> iamInstanceProfile,
+               (JSON..=) "ImageId" Prelude.<$> imageId,
+               (JSON..=) "InstanceInitiatedShutdownBehavior"
+                 Prelude.<$> instanceInitiatedShutdownBehavior,
+               (JSON..=) "InstanceType" Prelude.<$> instanceType,
+               (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+               (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+               (JSON..=) "KernelId" Prelude.<$> kernelId,
+               (JSON..=) "KeyName" Prelude.<$> keyName,
+               (JSON..=) "LaunchTemplate" Prelude.<$> launchTemplate,
+               (JSON..=) "LicenseSpecifications"
+                 Prelude.<$> licenseSpecifications,
+               (JSON..=) "MetadataOptions" Prelude.<$> metadataOptions,
+               (JSON..=) "Monitoring" Prelude.<$> monitoring,
+               (JSON..=) "NetworkInterfaces" Prelude.<$> networkInterfaces,
+               (JSON..=) "PlacementGroupName" Prelude.<$> placementGroupName,
+               (JSON..=) "PrivateDnsNameOptions"
+                 Prelude.<$> privateDnsNameOptions,
+               (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+               (JSON..=) "PropagateTagsToVolumeOnCreation"
+                 Prelude.<$> propagateTagsToVolumeOnCreation,
+               (JSON..=) "RamdiskId" Prelude.<$> ramdiskId,
+               (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+               (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+               (JSON..=) "SourceDestCheck" Prelude.<$> sourceDestCheck,
+               (JSON..=) "SsmAssociations" Prelude.<$> ssmAssociations,
+               (JSON..=) "SubnetId" Prelude.<$> subnetId,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "Tenancy" Prelude.<$> tenancy,
+               (JSON..=) "UserData" Prelude.<$> userData,
+               (JSON..=) "Volumes" Prelude.<$> volumes]))
+instance Property "AdditionalInfo" Instance where
+  type PropertyType "AdditionalInfo" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {additionalInfo = Prelude.pure newValue, ..}
+instance Property "Affinity" Instance where
+  type PropertyType "Affinity" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {affinity = Prelude.pure newValue, ..}
+instance Property "AvailabilityZone" Instance where
+  type PropertyType "AvailabilityZone" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {availabilityZone = Prelude.pure newValue, ..}
+instance Property "BlockDeviceMappings" Instance where
+  type PropertyType "BlockDeviceMappings" Instance = [BlockDeviceMappingProperty]
+  set newValue Instance {..}
+    = Instance {blockDeviceMappings = Prelude.pure newValue, ..}
+instance Property "CpuOptions" Instance where
+  type PropertyType "CpuOptions" Instance = CpuOptionsProperty
+  set newValue Instance {..}
+    = Instance {cpuOptions = Prelude.pure newValue, ..}
+instance Property "CreditSpecification" Instance where
+  type PropertyType "CreditSpecification" Instance = CreditSpecificationProperty
+  set newValue Instance {..}
+    = Instance {creditSpecification = Prelude.pure newValue, ..}
+instance Property "DisableApiTermination" Instance where
+  type PropertyType "DisableApiTermination" Instance = Value Prelude.Bool
+  set newValue Instance {..}
+    = Instance {disableApiTermination = Prelude.pure newValue, ..}
+instance Property "EbsOptimized" Instance where
+  type PropertyType "EbsOptimized" Instance = Value Prelude.Bool
+  set newValue Instance {..}
+    = Instance {ebsOptimized = Prelude.pure newValue, ..}
+instance Property "ElasticGpuSpecifications" Instance where
+  type PropertyType "ElasticGpuSpecifications" Instance = [ElasticGpuSpecificationProperty]
+  set newValue Instance {..}
+    = Instance {elasticGpuSpecifications = Prelude.pure newValue, ..}
+instance Property "ElasticInferenceAccelerators" Instance where
+  type PropertyType "ElasticInferenceAccelerators" Instance = [ElasticInferenceAcceleratorProperty]
+  set newValue Instance {..}
+    = Instance
+        {elasticInferenceAccelerators = Prelude.pure newValue, ..}
+instance Property "EnclaveOptions" Instance where
+  type PropertyType "EnclaveOptions" Instance = EnclaveOptionsProperty
+  set newValue Instance {..}
+    = Instance {enclaveOptions = Prelude.pure newValue, ..}
+instance Property "HibernationOptions" Instance where
+  type PropertyType "HibernationOptions" Instance = HibernationOptionsProperty
+  set newValue Instance {..}
+    = Instance {hibernationOptions = Prelude.pure newValue, ..}
+instance Property "HostId" Instance where
+  type PropertyType "HostId" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {hostId = Prelude.pure newValue, ..}
+instance Property "HostResourceGroupArn" Instance where
+  type PropertyType "HostResourceGroupArn" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {hostResourceGroupArn = Prelude.pure newValue, ..}
+instance Property "IamInstanceProfile" Instance where
+  type PropertyType "IamInstanceProfile" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {iamInstanceProfile = Prelude.pure newValue, ..}
+instance Property "ImageId" Instance where
+  type PropertyType "ImageId" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {imageId = Prelude.pure newValue, ..}
+instance Property "InstanceInitiatedShutdownBehavior" Instance where
+  type PropertyType "InstanceInitiatedShutdownBehavior" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance
+        {instanceInitiatedShutdownBehavior = Prelude.pure newValue, ..}
+instance Property "InstanceType" Instance where
+  type PropertyType "InstanceType" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {instanceType = Prelude.pure newValue, ..}
+instance Property "Ipv6AddressCount" Instance where
+  type PropertyType "Ipv6AddressCount" Instance = Value Prelude.Integer
+  set newValue Instance {..}
+    = Instance {ipv6AddressCount = Prelude.pure newValue, ..}
+instance Property "Ipv6Addresses" Instance where
+  type PropertyType "Ipv6Addresses" Instance = [InstanceIpv6AddressProperty]
+  set newValue Instance {..}
+    = Instance {ipv6Addresses = Prelude.pure newValue, ..}
+instance Property "KernelId" Instance where
+  type PropertyType "KernelId" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {kernelId = Prelude.pure newValue, ..}
+instance Property "KeyName" Instance where
+  type PropertyType "KeyName" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {keyName = Prelude.pure newValue, ..}
+instance Property "LaunchTemplate" Instance where
+  type PropertyType "LaunchTemplate" Instance = LaunchTemplateSpecificationProperty
+  set newValue Instance {..}
+    = Instance {launchTemplate = Prelude.pure newValue, ..}
+instance Property "LicenseSpecifications" Instance where
+  type PropertyType "LicenseSpecifications" Instance = [LicenseSpecificationProperty]
+  set newValue Instance {..}
+    = Instance {licenseSpecifications = Prelude.pure newValue, ..}
+instance Property "MetadataOptions" Instance where
+  type PropertyType "MetadataOptions" Instance = MetadataOptionsProperty
+  set newValue Instance {..}
+    = Instance {metadataOptions = Prelude.pure newValue, ..}
+instance Property "Monitoring" Instance where
+  type PropertyType "Monitoring" Instance = Value Prelude.Bool
+  set newValue Instance {..}
+    = Instance {monitoring = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaces" Instance where
+  type PropertyType "NetworkInterfaces" Instance = [NetworkInterfaceProperty]
+  set newValue Instance {..}
+    = Instance {networkInterfaces = Prelude.pure newValue, ..}
+instance Property "PlacementGroupName" Instance where
+  type PropertyType "PlacementGroupName" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {placementGroupName = Prelude.pure newValue, ..}
+instance Property "PrivateDnsNameOptions" Instance where
+  type PropertyType "PrivateDnsNameOptions" Instance = PrivateDnsNameOptionsProperty
+  set newValue Instance {..}
+    = Instance {privateDnsNameOptions = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddress" Instance where
+  type PropertyType "PrivateIpAddress" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {privateIpAddress = Prelude.pure newValue, ..}
+instance Property "PropagateTagsToVolumeOnCreation" Instance where
+  type PropertyType "PropagateTagsToVolumeOnCreation" Instance = Value Prelude.Bool
+  set newValue Instance {..}
+    = Instance
+        {propagateTagsToVolumeOnCreation = Prelude.pure newValue, ..}
+instance Property "RamdiskId" Instance where
+  type PropertyType "RamdiskId" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {ramdiskId = Prelude.pure newValue, ..}
+instance Property "SecurityGroupIds" Instance where
+  type PropertyType "SecurityGroupIds" Instance = ValueList Prelude.Text
+  set newValue Instance {..}
+    = Instance {securityGroupIds = Prelude.pure newValue, ..}
+instance Property "SecurityGroups" Instance where
+  type PropertyType "SecurityGroups" Instance = ValueList Prelude.Text
+  set newValue Instance {..}
+    = Instance {securityGroups = Prelude.pure newValue, ..}
+instance Property "SourceDestCheck" Instance where
+  type PropertyType "SourceDestCheck" Instance = Value Prelude.Bool
+  set newValue Instance {..}
+    = Instance {sourceDestCheck = Prelude.pure newValue, ..}
+instance Property "SsmAssociations" Instance where
+  type PropertyType "SsmAssociations" Instance = [SsmAssociationProperty]
+  set newValue Instance {..}
+    = Instance {ssmAssociations = Prelude.pure newValue, ..}
+instance Property "SubnetId" Instance where
+  type PropertyType "SubnetId" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {subnetId = Prelude.pure newValue, ..}
+instance Property "Tags" Instance where
+  type PropertyType "Tags" Instance = [Tag]
+  set newValue Instance {..}
+    = Instance {tags = Prelude.pure newValue, ..}
+instance Property "Tenancy" Instance where
+  type PropertyType "Tenancy" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {tenancy = Prelude.pure newValue, ..}
+instance Property "UserData" Instance where
+  type PropertyType "UserData" Instance = Value Prelude.Text
+  set newValue Instance {..}
+    = Instance {userData = Prelude.pure newValue, ..}
+instance Property "Volumes" Instance where
+  type PropertyType "Volumes" Instance = [VolumeProperty]
+  set newValue Instance {..}
+    = Instance {volumes = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/AssociationParameterProperty.hs b/gen/Stratosphere/EC2/Instance/AssociationParameterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/AssociationParameterProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.Instance.AssociationParameterProperty (
+        AssociationParameterProperty(..), mkAssociationParameterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AssociationParameterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-associationparameter.html>
+    AssociationParameterProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-associationparameter.html#cfn-ec2-instance-associationparameter-key>
+                                  key :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-associationparameter.html#cfn-ec2-instance-associationparameter-value>
+                                  value :: (ValueList Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAssociationParameterProperty ::
+  Value Prelude.Text
+  -> ValueList Prelude.Text -> AssociationParameterProperty
+mkAssociationParameterProperty key value
+  = AssociationParameterProperty
+      {haddock_workaround_ = (), key = key, value = value}
+instance ToResourceProperties AssociationParameterProperty where
+  toResourceProperties AssociationParameterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.AssociationParameter",
+         supportsTags = Prelude.False,
+         properties = ["Key" JSON..= key, "Value" JSON..= value]}
+instance JSON.ToJSON AssociationParameterProperty where
+  toJSON AssociationParameterProperty {..}
+    = JSON.object ["Key" JSON..= key, "Value" JSON..= value]
+instance Property "Key" AssociationParameterProperty where
+  type PropertyType "Key" AssociationParameterProperty = Value Prelude.Text
+  set newValue AssociationParameterProperty {..}
+    = AssociationParameterProperty {key = newValue, ..}
+instance Property "Value" AssociationParameterProperty where
+  type PropertyType "Value" AssociationParameterProperty = ValueList Prelude.Text
+  set newValue AssociationParameterProperty {..}
+    = AssociationParameterProperty {value = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/AssociationParameterProperty.hs-boot b/gen/Stratosphere/EC2/Instance/AssociationParameterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/AssociationParameterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.AssociationParameterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AssociationParameterProperty :: Prelude.Type
+instance ToResourceProperties AssociationParameterProperty
+instance Prelude.Eq AssociationParameterProperty
+instance Prelude.Show AssociationParameterProperty
+instance JSON.ToJSON AssociationParameterProperty
diff --git a/gen/Stratosphere/EC2/Instance/BlockDeviceMappingProperty.hs b/gen/Stratosphere/EC2/Instance/BlockDeviceMappingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/BlockDeviceMappingProperty.hs
@@ -0,0 +1,68 @@
+module Stratosphere.EC2.Instance.BlockDeviceMappingProperty (
+        module Exports, BlockDeviceMappingProperty(..),
+        mkBlockDeviceMappingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.Instance.EbsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BlockDeviceMappingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-blockdevicemapping.html>
+    BlockDeviceMappingProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-blockdevicemapping.html#cfn-ec2-instance-blockdevicemapping-devicename>
+                                deviceName :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-blockdevicemapping.html#cfn-ec2-instance-blockdevicemapping-ebs>
+                                ebs :: (Prelude.Maybe EbsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-blockdevicemapping.html#cfn-ec2-instance-blockdevicemapping-nodevice>
+                                noDevice :: (Prelude.Maybe JSON.Object),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-blockdevicemapping.html#cfn-ec2-instance-blockdevicemapping-virtualname>
+                                virtualName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBlockDeviceMappingProperty ::
+  Value Prelude.Text -> BlockDeviceMappingProperty
+mkBlockDeviceMappingProperty deviceName
+  = BlockDeviceMappingProperty
+      {haddock_workaround_ = (), deviceName = deviceName,
+       ebs = Prelude.Nothing, noDevice = Prelude.Nothing,
+       virtualName = Prelude.Nothing}
+instance ToResourceProperties BlockDeviceMappingProperty where
+  toResourceProperties BlockDeviceMappingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.BlockDeviceMapping",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DeviceName" JSON..= deviceName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Ebs" Prelude.<$> ebs,
+                               (JSON..=) "NoDevice" Prelude.<$> noDevice,
+                               (JSON..=) "VirtualName" Prelude.<$> virtualName]))}
+instance JSON.ToJSON BlockDeviceMappingProperty where
+  toJSON BlockDeviceMappingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DeviceName" JSON..= deviceName]
+              (Prelude.catMaybes
+                 [(JSON..=) "Ebs" Prelude.<$> ebs,
+                  (JSON..=) "NoDevice" Prelude.<$> noDevice,
+                  (JSON..=) "VirtualName" Prelude.<$> virtualName])))
+instance Property "DeviceName" BlockDeviceMappingProperty where
+  type PropertyType "DeviceName" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {deviceName = newValue, ..}
+instance Property "Ebs" BlockDeviceMappingProperty where
+  type PropertyType "Ebs" BlockDeviceMappingProperty = EbsProperty
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {ebs = Prelude.pure newValue, ..}
+instance Property "NoDevice" BlockDeviceMappingProperty where
+  type PropertyType "NoDevice" BlockDeviceMappingProperty = JSON.Object
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {noDevice = Prelude.pure newValue, ..}
+instance Property "VirtualName" BlockDeviceMappingProperty where
+  type PropertyType "VirtualName" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty
+        {virtualName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/BlockDeviceMappingProperty.hs-boot b/gen/Stratosphere/EC2/Instance/BlockDeviceMappingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/BlockDeviceMappingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.BlockDeviceMappingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BlockDeviceMappingProperty :: Prelude.Type
+instance ToResourceProperties BlockDeviceMappingProperty
+instance Prelude.Eq BlockDeviceMappingProperty
+instance Prelude.Show BlockDeviceMappingProperty
+instance JSON.ToJSON BlockDeviceMappingProperty
diff --git a/gen/Stratosphere/EC2/Instance/CpuOptionsProperty.hs b/gen/Stratosphere/EC2/Instance/CpuOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/CpuOptionsProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.Instance.CpuOptionsProperty (
+        CpuOptionsProperty(..), mkCpuOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CpuOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-cpuoptions.html>
+    CpuOptionsProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-cpuoptions.html#cfn-ec2-instance-cpuoptions-corecount>
+                        coreCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-cpuoptions.html#cfn-ec2-instance-cpuoptions-threadspercore>
+                        threadsPerCore :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCpuOptionsProperty :: CpuOptionsProperty
+mkCpuOptionsProperty
+  = CpuOptionsProperty
+      {haddock_workaround_ = (), coreCount = Prelude.Nothing,
+       threadsPerCore = Prelude.Nothing}
+instance ToResourceProperties CpuOptionsProperty where
+  toResourceProperties CpuOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.CpuOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CoreCount" Prelude.<$> coreCount,
+                            (JSON..=) "ThreadsPerCore" Prelude.<$> threadsPerCore])}
+instance JSON.ToJSON CpuOptionsProperty where
+  toJSON CpuOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CoreCount" Prelude.<$> coreCount,
+               (JSON..=) "ThreadsPerCore" Prelude.<$> threadsPerCore]))
+instance Property "CoreCount" CpuOptionsProperty where
+  type PropertyType "CoreCount" CpuOptionsProperty = Value Prelude.Integer
+  set newValue CpuOptionsProperty {..}
+    = CpuOptionsProperty {coreCount = Prelude.pure newValue, ..}
+instance Property "ThreadsPerCore" CpuOptionsProperty where
+  type PropertyType "ThreadsPerCore" CpuOptionsProperty = Value Prelude.Integer
+  set newValue CpuOptionsProperty {..}
+    = CpuOptionsProperty {threadsPerCore = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/CpuOptionsProperty.hs-boot b/gen/Stratosphere/EC2/Instance/CpuOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/CpuOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.CpuOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CpuOptionsProperty :: Prelude.Type
+instance ToResourceProperties CpuOptionsProperty
+instance Prelude.Eq CpuOptionsProperty
+instance Prelude.Show CpuOptionsProperty
+instance JSON.ToJSON CpuOptionsProperty
diff --git a/gen/Stratosphere/EC2/Instance/CreditSpecificationProperty.hs b/gen/Stratosphere/EC2/Instance/CreditSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/CreditSpecificationProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.Instance.CreditSpecificationProperty (
+        CreditSpecificationProperty(..), mkCreditSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CreditSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-creditspecification.html>
+    CreditSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-creditspecification.html#cfn-ec2-instance-creditspecification-cpucredits>
+                                 cPUCredits :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCreditSpecificationProperty :: CreditSpecificationProperty
+mkCreditSpecificationProperty
+  = CreditSpecificationProperty
+      {haddock_workaround_ = (), cPUCredits = Prelude.Nothing}
+instance ToResourceProperties CreditSpecificationProperty where
+  toResourceProperties CreditSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.CreditSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CPUCredits" Prelude.<$> cPUCredits])}
+instance JSON.ToJSON CreditSpecificationProperty where
+  toJSON CreditSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CPUCredits" Prelude.<$> cPUCredits]))
+instance Property "CPUCredits" CreditSpecificationProperty where
+  type PropertyType "CPUCredits" CreditSpecificationProperty = Value Prelude.Text
+  set newValue CreditSpecificationProperty {..}
+    = CreditSpecificationProperty
+        {cPUCredits = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/CreditSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/Instance/CreditSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/CreditSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.CreditSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CreditSpecificationProperty :: Prelude.Type
+instance ToResourceProperties CreditSpecificationProperty
+instance Prelude.Eq CreditSpecificationProperty
+instance Prelude.Show CreditSpecificationProperty
+instance JSON.ToJSON CreditSpecificationProperty
diff --git a/gen/Stratosphere/EC2/Instance/EbsProperty.hs b/gen/Stratosphere/EC2/Instance/EbsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/EbsProperty.hs
@@ -0,0 +1,86 @@
+module Stratosphere.EC2.Instance.EbsProperty (
+        EbsProperty(..), mkEbsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html>
+    EbsProperty {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html#cfn-ec2-instance-ebs-deleteontermination>
+                 deleteOnTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html#cfn-ec2-instance-ebs-encrypted>
+                 encrypted :: (Prelude.Maybe (Value Prelude.Bool)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html#cfn-ec2-instance-ebs-iops>
+                 iops :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html#cfn-ec2-instance-ebs-kmskeyid>
+                 kmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html#cfn-ec2-instance-ebs-snapshotid>
+                 snapshotId :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html#cfn-ec2-instance-ebs-volumesize>
+                 volumeSize :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ebs.html#cfn-ec2-instance-ebs-volumetype>
+                 volumeType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsProperty :: EbsProperty
+mkEbsProperty
+  = EbsProperty
+      {haddock_workaround_ = (), deleteOnTermination = Prelude.Nothing,
+       encrypted = Prelude.Nothing, iops = Prelude.Nothing,
+       kmsKeyId = Prelude.Nothing, snapshotId = Prelude.Nothing,
+       volumeSize = Prelude.Nothing, volumeType = Prelude.Nothing}
+instance ToResourceProperties EbsProperty where
+  toResourceProperties EbsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.Ebs", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                            (JSON..=) "Encrypted" Prelude.<$> encrypted,
+                            (JSON..=) "Iops" Prelude.<$> iops,
+                            (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                            (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+                            (JSON..=) "VolumeSize" Prelude.<$> volumeSize,
+                            (JSON..=) "VolumeType" Prelude.<$> volumeType])}
+instance JSON.ToJSON EbsProperty where
+  toJSON EbsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+               (JSON..=) "Encrypted" Prelude.<$> encrypted,
+               (JSON..=) "Iops" Prelude.<$> iops,
+               (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+               (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+               (JSON..=) "VolumeSize" Prelude.<$> volumeSize,
+               (JSON..=) "VolumeType" Prelude.<$> volumeType]))
+instance Property "DeleteOnTermination" EbsProperty where
+  type PropertyType "DeleteOnTermination" EbsProperty = Value Prelude.Bool
+  set newValue EbsProperty {..}
+    = EbsProperty {deleteOnTermination = Prelude.pure newValue, ..}
+instance Property "Encrypted" EbsProperty where
+  type PropertyType "Encrypted" EbsProperty = Value Prelude.Bool
+  set newValue EbsProperty {..}
+    = EbsProperty {encrypted = Prelude.pure newValue, ..}
+instance Property "Iops" EbsProperty where
+  type PropertyType "Iops" EbsProperty = Value Prelude.Integer
+  set newValue EbsProperty {..}
+    = EbsProperty {iops = Prelude.pure newValue, ..}
+instance Property "KmsKeyId" EbsProperty where
+  type PropertyType "KmsKeyId" EbsProperty = Value Prelude.Text
+  set newValue EbsProperty {..}
+    = EbsProperty {kmsKeyId = Prelude.pure newValue, ..}
+instance Property "SnapshotId" EbsProperty where
+  type PropertyType "SnapshotId" EbsProperty = Value Prelude.Text
+  set newValue EbsProperty {..}
+    = EbsProperty {snapshotId = Prelude.pure newValue, ..}
+instance Property "VolumeSize" EbsProperty where
+  type PropertyType "VolumeSize" EbsProperty = Value Prelude.Integer
+  set newValue EbsProperty {..}
+    = EbsProperty {volumeSize = Prelude.pure newValue, ..}
+instance Property "VolumeType" EbsProperty where
+  type PropertyType "VolumeType" EbsProperty = Value Prelude.Text
+  set newValue EbsProperty {..}
+    = EbsProperty {volumeType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/EbsProperty.hs-boot b/gen/Stratosphere/EC2/Instance/EbsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/EbsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.EbsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsProperty :: Prelude.Type
+instance ToResourceProperties EbsProperty
+instance Prelude.Eq EbsProperty
+instance Prelude.Show EbsProperty
+instance JSON.ToJSON EbsProperty
diff --git a/gen/Stratosphere/EC2/Instance/ElasticGpuSpecificationProperty.hs b/gen/Stratosphere/EC2/Instance/ElasticGpuSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/ElasticGpuSpecificationProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.EC2.Instance.ElasticGpuSpecificationProperty (
+        ElasticGpuSpecificationProperty(..),
+        mkElasticGpuSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ElasticGpuSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-elasticgpuspecification.html>
+    ElasticGpuSpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-elasticgpuspecification.html#cfn-ec2-instance-elasticgpuspecification-type>
+                                     type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkElasticGpuSpecificationProperty ::
+  Value Prelude.Text -> ElasticGpuSpecificationProperty
+mkElasticGpuSpecificationProperty type'
+  = ElasticGpuSpecificationProperty
+      {haddock_workaround_ = (), type' = type'}
+instance ToResourceProperties ElasticGpuSpecificationProperty where
+  toResourceProperties ElasticGpuSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.ElasticGpuSpecification",
+         supportsTags = Prelude.False, properties = ["Type" JSON..= type']}
+instance JSON.ToJSON ElasticGpuSpecificationProperty where
+  toJSON ElasticGpuSpecificationProperty {..}
+    = JSON.object ["Type" JSON..= type']
+instance Property "Type" ElasticGpuSpecificationProperty where
+  type PropertyType "Type" ElasticGpuSpecificationProperty = Value Prelude.Text
+  set newValue ElasticGpuSpecificationProperty {..}
+    = ElasticGpuSpecificationProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/ElasticGpuSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/Instance/ElasticGpuSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/ElasticGpuSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.ElasticGpuSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ElasticGpuSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ElasticGpuSpecificationProperty
+instance Prelude.Eq ElasticGpuSpecificationProperty
+instance Prelude.Show ElasticGpuSpecificationProperty
+instance JSON.ToJSON ElasticGpuSpecificationProperty
diff --git a/gen/Stratosphere/EC2/Instance/ElasticInferenceAcceleratorProperty.hs b/gen/Stratosphere/EC2/Instance/ElasticInferenceAcceleratorProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/ElasticInferenceAcceleratorProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.Instance.ElasticInferenceAcceleratorProperty (
+        ElasticInferenceAcceleratorProperty(..),
+        mkElasticInferenceAcceleratorProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ElasticInferenceAcceleratorProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-elasticinferenceaccelerator.html>
+    ElasticInferenceAcceleratorProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-elasticinferenceaccelerator.html#cfn-ec2-instance-elasticinferenceaccelerator-count>
+                                         count :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-elasticinferenceaccelerator.html#cfn-ec2-instance-elasticinferenceaccelerator-type>
+                                         type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkElasticInferenceAcceleratorProperty ::
+  Value Prelude.Text -> ElasticInferenceAcceleratorProperty
+mkElasticInferenceAcceleratorProperty type'
+  = ElasticInferenceAcceleratorProperty
+      {haddock_workaround_ = (), type' = type', count = Prelude.Nothing}
+instance ToResourceProperties ElasticInferenceAcceleratorProperty where
+  toResourceProperties ElasticInferenceAcceleratorProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.ElasticInferenceAccelerator",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes [(JSON..=) "Count" Prelude.<$> count]))}
+instance JSON.ToJSON ElasticInferenceAcceleratorProperty where
+  toJSON ElasticInferenceAcceleratorProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes [(JSON..=) "Count" Prelude.<$> count])))
+instance Property "Count" ElasticInferenceAcceleratorProperty where
+  type PropertyType "Count" ElasticInferenceAcceleratorProperty = Value Prelude.Integer
+  set newValue ElasticInferenceAcceleratorProperty {..}
+    = ElasticInferenceAcceleratorProperty
+        {count = Prelude.pure newValue, ..}
+instance Property "Type" ElasticInferenceAcceleratorProperty where
+  type PropertyType "Type" ElasticInferenceAcceleratorProperty = Value Prelude.Text
+  set newValue ElasticInferenceAcceleratorProperty {..}
+    = ElasticInferenceAcceleratorProperty {type' = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/ElasticInferenceAcceleratorProperty.hs-boot b/gen/Stratosphere/EC2/Instance/ElasticInferenceAcceleratorProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/ElasticInferenceAcceleratorProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.ElasticInferenceAcceleratorProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ElasticInferenceAcceleratorProperty :: Prelude.Type
+instance ToResourceProperties ElasticInferenceAcceleratorProperty
+instance Prelude.Eq ElasticInferenceAcceleratorProperty
+instance Prelude.Show ElasticInferenceAcceleratorProperty
+instance JSON.ToJSON ElasticInferenceAcceleratorProperty
diff --git a/gen/Stratosphere/EC2/Instance/EnaSrdSpecificationProperty.hs b/gen/Stratosphere/EC2/Instance/EnaSrdSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/EnaSrdSpecificationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EC2.Instance.EnaSrdSpecificationProperty (
+        module Exports, EnaSrdSpecificationProperty(..),
+        mkEnaSrdSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.Instance.EnaSrdUdpSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnaSrdSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-enasrdspecification.html>
+    EnaSrdSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-enasrdspecification.html#cfn-ec2-instance-enasrdspecification-enasrdenabled>
+                                 enaSrdEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-enasrdspecification.html#cfn-ec2-instance-enasrdspecification-enasrdudpspecification>
+                                 enaSrdUdpSpecification :: (Prelude.Maybe EnaSrdUdpSpecificationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnaSrdSpecificationProperty :: EnaSrdSpecificationProperty
+mkEnaSrdSpecificationProperty
+  = EnaSrdSpecificationProperty
+      {haddock_workaround_ = (), enaSrdEnabled = Prelude.Nothing,
+       enaSrdUdpSpecification = Prelude.Nothing}
+instance ToResourceProperties EnaSrdSpecificationProperty where
+  toResourceProperties EnaSrdSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.EnaSrdSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnaSrdEnabled" Prelude.<$> enaSrdEnabled,
+                            (JSON..=) "EnaSrdUdpSpecification"
+                              Prelude.<$> enaSrdUdpSpecification])}
+instance JSON.ToJSON EnaSrdSpecificationProperty where
+  toJSON EnaSrdSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnaSrdEnabled" Prelude.<$> enaSrdEnabled,
+               (JSON..=) "EnaSrdUdpSpecification"
+                 Prelude.<$> enaSrdUdpSpecification]))
+instance Property "EnaSrdEnabled" EnaSrdSpecificationProperty where
+  type PropertyType "EnaSrdEnabled" EnaSrdSpecificationProperty = Value Prelude.Bool
+  set newValue EnaSrdSpecificationProperty {..}
+    = EnaSrdSpecificationProperty
+        {enaSrdEnabled = Prelude.pure newValue, ..}
+instance Property "EnaSrdUdpSpecification" EnaSrdSpecificationProperty where
+  type PropertyType "EnaSrdUdpSpecification" EnaSrdSpecificationProperty = EnaSrdUdpSpecificationProperty
+  set newValue EnaSrdSpecificationProperty {..}
+    = EnaSrdSpecificationProperty
+        {enaSrdUdpSpecification = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/EnaSrdSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/Instance/EnaSrdSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/EnaSrdSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.EnaSrdSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnaSrdSpecificationProperty :: Prelude.Type
+instance ToResourceProperties EnaSrdSpecificationProperty
+instance Prelude.Eq EnaSrdSpecificationProperty
+instance Prelude.Show EnaSrdSpecificationProperty
+instance JSON.ToJSON EnaSrdSpecificationProperty
diff --git a/gen/Stratosphere/EC2/Instance/EnaSrdUdpSpecificationProperty.hs b/gen/Stratosphere/EC2/Instance/EnaSrdUdpSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/EnaSrdUdpSpecificationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EC2.Instance.EnaSrdUdpSpecificationProperty (
+        EnaSrdUdpSpecificationProperty(..),
+        mkEnaSrdUdpSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnaSrdUdpSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-enasrdudpspecification.html>
+    EnaSrdUdpSpecificationProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-enasrdudpspecification.html#cfn-ec2-instance-enasrdudpspecification-enasrdudpenabled>
+                                    enaSrdUdpEnabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnaSrdUdpSpecificationProperty :: EnaSrdUdpSpecificationProperty
+mkEnaSrdUdpSpecificationProperty
+  = EnaSrdUdpSpecificationProperty
+      {haddock_workaround_ = (), enaSrdUdpEnabled = Prelude.Nothing}
+instance ToResourceProperties EnaSrdUdpSpecificationProperty where
+  toResourceProperties EnaSrdUdpSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.EnaSrdUdpSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnaSrdUdpEnabled" Prelude.<$> enaSrdUdpEnabled])}
+instance JSON.ToJSON EnaSrdUdpSpecificationProperty where
+  toJSON EnaSrdUdpSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnaSrdUdpEnabled" Prelude.<$> enaSrdUdpEnabled]))
+instance Property "EnaSrdUdpEnabled" EnaSrdUdpSpecificationProperty where
+  type PropertyType "EnaSrdUdpEnabled" EnaSrdUdpSpecificationProperty = Value Prelude.Bool
+  set newValue EnaSrdUdpSpecificationProperty {..}
+    = EnaSrdUdpSpecificationProperty
+        {enaSrdUdpEnabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/EnaSrdUdpSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/Instance/EnaSrdUdpSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/EnaSrdUdpSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.EnaSrdUdpSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnaSrdUdpSpecificationProperty :: Prelude.Type
+instance ToResourceProperties EnaSrdUdpSpecificationProperty
+instance Prelude.Eq EnaSrdUdpSpecificationProperty
+instance Prelude.Show EnaSrdUdpSpecificationProperty
+instance JSON.ToJSON EnaSrdUdpSpecificationProperty
diff --git a/gen/Stratosphere/EC2/Instance/EnclaveOptionsProperty.hs b/gen/Stratosphere/EC2/Instance/EnclaveOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/EnclaveOptionsProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.EC2.Instance.EnclaveOptionsProperty (
+        EnclaveOptionsProperty(..), mkEnclaveOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnclaveOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-enclaveoptions.html>
+    EnclaveOptionsProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-enclaveoptions.html#cfn-ec2-instance-enclaveoptions-enabled>
+                            enabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnclaveOptionsProperty :: EnclaveOptionsProperty
+mkEnclaveOptionsProperty
+  = EnclaveOptionsProperty
+      {haddock_workaround_ = (), enabled = Prelude.Nothing}
+instance ToResourceProperties EnclaveOptionsProperty where
+  toResourceProperties EnclaveOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.EnclaveOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Enabled" Prelude.<$> enabled])}
+instance JSON.ToJSON EnclaveOptionsProperty where
+  toJSON EnclaveOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Enabled" Prelude.<$> enabled]))
+instance Property "Enabled" EnclaveOptionsProperty where
+  type PropertyType "Enabled" EnclaveOptionsProperty = Value Prelude.Bool
+  set newValue EnclaveOptionsProperty {..}
+    = EnclaveOptionsProperty {enabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/EnclaveOptionsProperty.hs-boot b/gen/Stratosphere/EC2/Instance/EnclaveOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/EnclaveOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.EnclaveOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnclaveOptionsProperty :: Prelude.Type
+instance ToResourceProperties EnclaveOptionsProperty
+instance Prelude.Eq EnclaveOptionsProperty
+instance Prelude.Show EnclaveOptionsProperty
+instance JSON.ToJSON EnclaveOptionsProperty
diff --git a/gen/Stratosphere/EC2/Instance/HibernationOptionsProperty.hs b/gen/Stratosphere/EC2/Instance/HibernationOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/HibernationOptionsProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.Instance.HibernationOptionsProperty (
+        HibernationOptionsProperty(..), mkHibernationOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HibernationOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-hibernationoptions.html>
+    HibernationOptionsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-hibernationoptions.html#cfn-ec2-instance-hibernationoptions-configured>
+                                configured :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHibernationOptionsProperty :: HibernationOptionsProperty
+mkHibernationOptionsProperty
+  = HibernationOptionsProperty
+      {haddock_workaround_ = (), configured = Prelude.Nothing}
+instance ToResourceProperties HibernationOptionsProperty where
+  toResourceProperties HibernationOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.HibernationOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Configured" Prelude.<$> configured])}
+instance JSON.ToJSON HibernationOptionsProperty where
+  toJSON HibernationOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Configured" Prelude.<$> configured]))
+instance Property "Configured" HibernationOptionsProperty where
+  type PropertyType "Configured" HibernationOptionsProperty = Value Prelude.Bool
+  set newValue HibernationOptionsProperty {..}
+    = HibernationOptionsProperty
+        {configured = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/HibernationOptionsProperty.hs-boot b/gen/Stratosphere/EC2/Instance/HibernationOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/HibernationOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.HibernationOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HibernationOptionsProperty :: Prelude.Type
+instance ToResourceProperties HibernationOptionsProperty
+instance Prelude.Eq HibernationOptionsProperty
+instance Prelude.Show HibernationOptionsProperty
+instance JSON.ToJSON HibernationOptionsProperty
diff --git a/gen/Stratosphere/EC2/Instance/InstanceIpv6AddressProperty.hs b/gen/Stratosphere/EC2/Instance/InstanceIpv6AddressProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/InstanceIpv6AddressProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.EC2.Instance.InstanceIpv6AddressProperty (
+        InstanceIpv6AddressProperty(..), mkInstanceIpv6AddressProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceIpv6AddressProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-instanceipv6address.html>
+    InstanceIpv6AddressProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-instanceipv6address.html#cfn-ec2-instance-instanceipv6address-ipv6address>
+                                 ipv6Address :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceIpv6AddressProperty ::
+  Value Prelude.Text -> InstanceIpv6AddressProperty
+mkInstanceIpv6AddressProperty ipv6Address
+  = InstanceIpv6AddressProperty
+      {haddock_workaround_ = (), ipv6Address = ipv6Address}
+instance ToResourceProperties InstanceIpv6AddressProperty where
+  toResourceProperties InstanceIpv6AddressProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.InstanceIpv6Address",
+         supportsTags = Prelude.False,
+         properties = ["Ipv6Address" JSON..= ipv6Address]}
+instance JSON.ToJSON InstanceIpv6AddressProperty where
+  toJSON InstanceIpv6AddressProperty {..}
+    = JSON.object ["Ipv6Address" JSON..= ipv6Address]
+instance Property "Ipv6Address" InstanceIpv6AddressProperty where
+  type PropertyType "Ipv6Address" InstanceIpv6AddressProperty = Value Prelude.Text
+  set newValue InstanceIpv6AddressProperty {..}
+    = InstanceIpv6AddressProperty {ipv6Address = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/InstanceIpv6AddressProperty.hs-boot b/gen/Stratosphere/EC2/Instance/InstanceIpv6AddressProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/InstanceIpv6AddressProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.InstanceIpv6AddressProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceIpv6AddressProperty :: Prelude.Type
+instance ToResourceProperties InstanceIpv6AddressProperty
+instance Prelude.Eq InstanceIpv6AddressProperty
+instance Prelude.Show InstanceIpv6AddressProperty
+instance JSON.ToJSON InstanceIpv6AddressProperty
diff --git a/gen/Stratosphere/EC2/Instance/LaunchTemplateSpecificationProperty.hs b/gen/Stratosphere/EC2/Instance/LaunchTemplateSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/LaunchTemplateSpecificationProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.EC2.Instance.LaunchTemplateSpecificationProperty (
+        LaunchTemplateSpecificationProperty(..),
+        mkLaunchTemplateSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LaunchTemplateSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-launchtemplatespecification.html>
+    LaunchTemplateSpecificationProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-launchtemplatespecification.html#cfn-ec2-instance-launchtemplatespecification-launchtemplateid>
+                                         launchTemplateId :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-launchtemplatespecification.html#cfn-ec2-instance-launchtemplatespecification-launchtemplatename>
+                                         launchTemplateName :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-launchtemplatespecification.html#cfn-ec2-instance-launchtemplatespecification-version>
+                                         version :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLaunchTemplateSpecificationProperty ::
+  Value Prelude.Text -> LaunchTemplateSpecificationProperty
+mkLaunchTemplateSpecificationProperty version
+  = LaunchTemplateSpecificationProperty
+      {haddock_workaround_ = (), version = version,
+       launchTemplateId = Prelude.Nothing,
+       launchTemplateName = Prelude.Nothing}
+instance ToResourceProperties LaunchTemplateSpecificationProperty where
+  toResourceProperties LaunchTemplateSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.LaunchTemplateSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Version" JSON..= version]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LaunchTemplateId" Prelude.<$> launchTemplateId,
+                               (JSON..=) "LaunchTemplateName" Prelude.<$> launchTemplateName]))}
+instance JSON.ToJSON LaunchTemplateSpecificationProperty where
+  toJSON LaunchTemplateSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Version" JSON..= version]
+              (Prelude.catMaybes
+                 [(JSON..=) "LaunchTemplateId" Prelude.<$> launchTemplateId,
+                  (JSON..=) "LaunchTemplateName" Prelude.<$> launchTemplateName])))
+instance Property "LaunchTemplateId" LaunchTemplateSpecificationProperty where
+  type PropertyType "LaunchTemplateId" LaunchTemplateSpecificationProperty = Value Prelude.Text
+  set newValue LaunchTemplateSpecificationProperty {..}
+    = LaunchTemplateSpecificationProperty
+        {launchTemplateId = Prelude.pure newValue, ..}
+instance Property "LaunchTemplateName" LaunchTemplateSpecificationProperty where
+  type PropertyType "LaunchTemplateName" LaunchTemplateSpecificationProperty = Value Prelude.Text
+  set newValue LaunchTemplateSpecificationProperty {..}
+    = LaunchTemplateSpecificationProperty
+        {launchTemplateName = Prelude.pure newValue, ..}
+instance Property "Version" LaunchTemplateSpecificationProperty where
+  type PropertyType "Version" LaunchTemplateSpecificationProperty = Value Prelude.Text
+  set newValue LaunchTemplateSpecificationProperty {..}
+    = LaunchTemplateSpecificationProperty {version = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/LaunchTemplateSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/Instance/LaunchTemplateSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/LaunchTemplateSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.LaunchTemplateSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LaunchTemplateSpecificationProperty :: Prelude.Type
+instance ToResourceProperties LaunchTemplateSpecificationProperty
+instance Prelude.Eq LaunchTemplateSpecificationProperty
+instance Prelude.Show LaunchTemplateSpecificationProperty
+instance JSON.ToJSON LaunchTemplateSpecificationProperty
diff --git a/gen/Stratosphere/EC2/Instance/LicenseSpecificationProperty.hs b/gen/Stratosphere/EC2/Instance/LicenseSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/LicenseSpecificationProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.EC2.Instance.LicenseSpecificationProperty (
+        LicenseSpecificationProperty(..), mkLicenseSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LicenseSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-licensespecification.html>
+    LicenseSpecificationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-licensespecification.html#cfn-ec2-instance-licensespecification-licenseconfigurationarn>
+                                  licenseConfigurationArn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLicenseSpecificationProperty ::
+  Value Prelude.Text -> LicenseSpecificationProperty
+mkLicenseSpecificationProperty licenseConfigurationArn
+  = LicenseSpecificationProperty
+      {haddock_workaround_ = (),
+       licenseConfigurationArn = licenseConfigurationArn}
+instance ToResourceProperties LicenseSpecificationProperty where
+  toResourceProperties LicenseSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.LicenseSpecification",
+         supportsTags = Prelude.False,
+         properties = ["LicenseConfigurationArn"
+                         JSON..= licenseConfigurationArn]}
+instance JSON.ToJSON LicenseSpecificationProperty where
+  toJSON LicenseSpecificationProperty {..}
+    = JSON.object
+        ["LicenseConfigurationArn" JSON..= licenseConfigurationArn]
+instance Property "LicenseConfigurationArn" LicenseSpecificationProperty where
+  type PropertyType "LicenseConfigurationArn" LicenseSpecificationProperty = Value Prelude.Text
+  set newValue LicenseSpecificationProperty {..}
+    = LicenseSpecificationProperty
+        {licenseConfigurationArn = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/LicenseSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/Instance/LicenseSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/LicenseSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.LicenseSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LicenseSpecificationProperty :: Prelude.Type
+instance ToResourceProperties LicenseSpecificationProperty
+instance Prelude.Eq LicenseSpecificationProperty
+instance Prelude.Show LicenseSpecificationProperty
+instance JSON.ToJSON LicenseSpecificationProperty
diff --git a/gen/Stratosphere/EC2/Instance/MetadataOptionsProperty.hs b/gen/Stratosphere/EC2/Instance/MetadataOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/MetadataOptionsProperty.hs
@@ -0,0 +1,80 @@
+module Stratosphere.EC2.Instance.MetadataOptionsProperty (
+        MetadataOptionsProperty(..), mkMetadataOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MetadataOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-metadataoptions.html>
+    MetadataOptionsProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-metadataoptions.html#cfn-ec2-instance-metadataoptions-httpendpoint>
+                             httpEndpoint :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-metadataoptions.html#cfn-ec2-instance-metadataoptions-httpprotocolipv6>
+                             httpProtocolIpv6 :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-metadataoptions.html#cfn-ec2-instance-metadataoptions-httpputresponsehoplimit>
+                             httpPutResponseHopLimit :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-metadataoptions.html#cfn-ec2-instance-metadataoptions-httptokens>
+                             httpTokens :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-metadataoptions.html#cfn-ec2-instance-metadataoptions-instancemetadatatags>
+                             instanceMetadataTags :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMetadataOptionsProperty :: MetadataOptionsProperty
+mkMetadataOptionsProperty
+  = MetadataOptionsProperty
+      {haddock_workaround_ = (), httpEndpoint = Prelude.Nothing,
+       httpProtocolIpv6 = Prelude.Nothing,
+       httpPutResponseHopLimit = Prelude.Nothing,
+       httpTokens = Prelude.Nothing,
+       instanceMetadataTags = Prelude.Nothing}
+instance ToResourceProperties MetadataOptionsProperty where
+  toResourceProperties MetadataOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.MetadataOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "HttpEndpoint" Prelude.<$> httpEndpoint,
+                            (JSON..=) "HttpProtocolIpv6" Prelude.<$> httpProtocolIpv6,
+                            (JSON..=) "HttpPutResponseHopLimit"
+                              Prelude.<$> httpPutResponseHopLimit,
+                            (JSON..=) "HttpTokens" Prelude.<$> httpTokens,
+                            (JSON..=) "InstanceMetadataTags"
+                              Prelude.<$> instanceMetadataTags])}
+instance JSON.ToJSON MetadataOptionsProperty where
+  toJSON MetadataOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "HttpEndpoint" Prelude.<$> httpEndpoint,
+               (JSON..=) "HttpProtocolIpv6" Prelude.<$> httpProtocolIpv6,
+               (JSON..=) "HttpPutResponseHopLimit"
+                 Prelude.<$> httpPutResponseHopLimit,
+               (JSON..=) "HttpTokens" Prelude.<$> httpTokens,
+               (JSON..=) "InstanceMetadataTags"
+                 Prelude.<$> instanceMetadataTags]))
+instance Property "HttpEndpoint" MetadataOptionsProperty where
+  type PropertyType "HttpEndpoint" MetadataOptionsProperty = Value Prelude.Text
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty
+        {httpEndpoint = Prelude.pure newValue, ..}
+instance Property "HttpProtocolIpv6" MetadataOptionsProperty where
+  type PropertyType "HttpProtocolIpv6" MetadataOptionsProperty = Value Prelude.Text
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty
+        {httpProtocolIpv6 = Prelude.pure newValue, ..}
+instance Property "HttpPutResponseHopLimit" MetadataOptionsProperty where
+  type PropertyType "HttpPutResponseHopLimit" MetadataOptionsProperty = Value Prelude.Integer
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty
+        {httpPutResponseHopLimit = Prelude.pure newValue, ..}
+instance Property "HttpTokens" MetadataOptionsProperty where
+  type PropertyType "HttpTokens" MetadataOptionsProperty = Value Prelude.Text
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty {httpTokens = Prelude.pure newValue, ..}
+instance Property "InstanceMetadataTags" MetadataOptionsProperty where
+  type PropertyType "InstanceMetadataTags" MetadataOptionsProperty = Value Prelude.Text
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty
+        {instanceMetadataTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/MetadataOptionsProperty.hs-boot b/gen/Stratosphere/EC2/Instance/MetadataOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/MetadataOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.MetadataOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MetadataOptionsProperty :: Prelude.Type
+instance ToResourceProperties MetadataOptionsProperty
+instance Prelude.Eq MetadataOptionsProperty
+instance Prelude.Show MetadataOptionsProperty
+instance JSON.ToJSON MetadataOptionsProperty
diff --git a/gen/Stratosphere/EC2/Instance/NetworkInterfaceProperty.hs b/gen/Stratosphere/EC2/Instance/NetworkInterfaceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/NetworkInterfaceProperty.hs
@@ -0,0 +1,176 @@
+module Stratosphere.EC2.Instance.NetworkInterfaceProperty (
+        module Exports, NetworkInterfaceProperty(..),
+        mkNetworkInterfaceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.Instance.EnaSrdSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.InstanceIpv6AddressProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.Instance.PrivateIpAddressSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkInterfaceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html>
+    NetworkInterfaceProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-associatecarrieripaddress>
+                              associateCarrierIpAddress :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-associatepublicipaddress>
+                              associatePublicIpAddress :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-deleteontermination>
+                              deleteOnTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-description>
+                              description :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-deviceindex>
+                              deviceIndex :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-enasrdspecification>
+                              enaSrdSpecification :: (Prelude.Maybe EnaSrdSpecificationProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-groupset>
+                              groupSet :: (Prelude.Maybe (ValueList Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-ipv6addresscount>
+                              ipv6AddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-ipv6addresses>
+                              ipv6Addresses :: (Prelude.Maybe [InstanceIpv6AddressProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-networkinterfaceid>
+                              networkInterfaceId :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-privateipaddress>
+                              privateIpAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-privateipaddresses>
+                              privateIpAddresses :: (Prelude.Maybe [PrivateIpAddressSpecificationProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-secondaryprivateipaddresscount>
+                              secondaryPrivateIpAddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-networkinterface.html#cfn-ec2-instance-networkinterface-subnetid>
+                              subnetId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterfaceProperty ::
+  Value Prelude.Text -> NetworkInterfaceProperty
+mkNetworkInterfaceProperty deviceIndex
+  = NetworkInterfaceProperty
+      {haddock_workaround_ = (), deviceIndex = deviceIndex,
+       associateCarrierIpAddress = Prelude.Nothing,
+       associatePublicIpAddress = Prelude.Nothing,
+       deleteOnTermination = Prelude.Nothing,
+       description = Prelude.Nothing,
+       enaSrdSpecification = Prelude.Nothing, groupSet = Prelude.Nothing,
+       ipv6AddressCount = Prelude.Nothing,
+       ipv6Addresses = Prelude.Nothing,
+       networkInterfaceId = Prelude.Nothing,
+       privateIpAddress = Prelude.Nothing,
+       privateIpAddresses = Prelude.Nothing,
+       secondaryPrivateIpAddressCount = Prelude.Nothing,
+       subnetId = Prelude.Nothing}
+instance ToResourceProperties NetworkInterfaceProperty where
+  toResourceProperties NetworkInterfaceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.NetworkInterface",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DeviceIndex" JSON..= deviceIndex]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AssociateCarrierIpAddress"
+                                 Prelude.<$> associateCarrierIpAddress,
+                               (JSON..=) "AssociatePublicIpAddress"
+                                 Prelude.<$> associatePublicIpAddress,
+                               (JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "EnaSrdSpecification" Prelude.<$> enaSrdSpecification,
+                               (JSON..=) "GroupSet" Prelude.<$> groupSet,
+                               (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+                               (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+                               (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                               (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+                               (JSON..=) "PrivateIpAddresses" Prelude.<$> privateIpAddresses,
+                               (JSON..=) "SecondaryPrivateIpAddressCount"
+                                 Prelude.<$> secondaryPrivateIpAddressCount,
+                               (JSON..=) "SubnetId" Prelude.<$> subnetId]))}
+instance JSON.ToJSON NetworkInterfaceProperty where
+  toJSON NetworkInterfaceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DeviceIndex" JSON..= deviceIndex]
+              (Prelude.catMaybes
+                 [(JSON..=) "AssociateCarrierIpAddress"
+                    Prelude.<$> associateCarrierIpAddress,
+                  (JSON..=) "AssociatePublicIpAddress"
+                    Prelude.<$> associatePublicIpAddress,
+                  (JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "EnaSrdSpecification" Prelude.<$> enaSrdSpecification,
+                  (JSON..=) "GroupSet" Prelude.<$> groupSet,
+                  (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+                  (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+                  (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                  (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+                  (JSON..=) "PrivateIpAddresses" Prelude.<$> privateIpAddresses,
+                  (JSON..=) "SecondaryPrivateIpAddressCount"
+                    Prelude.<$> secondaryPrivateIpAddressCount,
+                  (JSON..=) "SubnetId" Prelude.<$> subnetId])))
+instance Property "AssociateCarrierIpAddress" NetworkInterfaceProperty where
+  type PropertyType "AssociateCarrierIpAddress" NetworkInterfaceProperty = Value Prelude.Bool
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {associateCarrierIpAddress = Prelude.pure newValue, ..}
+instance Property "AssociatePublicIpAddress" NetworkInterfaceProperty where
+  type PropertyType "AssociatePublicIpAddress" NetworkInterfaceProperty = Value Prelude.Bool
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {associatePublicIpAddress = Prelude.pure newValue, ..}
+instance Property "DeleteOnTermination" NetworkInterfaceProperty where
+  type PropertyType "DeleteOnTermination" NetworkInterfaceProperty = Value Prelude.Bool
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {deleteOnTermination = Prelude.pure newValue, ..}
+instance Property "Description" NetworkInterfaceProperty where
+  type PropertyType "Description" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {description = Prelude.pure newValue, ..}
+instance Property "DeviceIndex" NetworkInterfaceProperty where
+  type PropertyType "DeviceIndex" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty {deviceIndex = newValue, ..}
+instance Property "EnaSrdSpecification" NetworkInterfaceProperty where
+  type PropertyType "EnaSrdSpecification" NetworkInterfaceProperty = EnaSrdSpecificationProperty
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {enaSrdSpecification = Prelude.pure newValue, ..}
+instance Property "GroupSet" NetworkInterfaceProperty where
+  type PropertyType "GroupSet" NetworkInterfaceProperty = ValueList Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty {groupSet = Prelude.pure newValue, ..}
+instance Property "Ipv6AddressCount" NetworkInterfaceProperty where
+  type PropertyType "Ipv6AddressCount" NetworkInterfaceProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {ipv6AddressCount = Prelude.pure newValue, ..}
+instance Property "Ipv6Addresses" NetworkInterfaceProperty where
+  type PropertyType "Ipv6Addresses" NetworkInterfaceProperty = [InstanceIpv6AddressProperty]
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {ipv6Addresses = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceId" NetworkInterfaceProperty where
+  type PropertyType "NetworkInterfaceId" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {networkInterfaceId = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddress" NetworkInterfaceProperty where
+  type PropertyType "PrivateIpAddress" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {privateIpAddress = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddresses" NetworkInterfaceProperty where
+  type PropertyType "PrivateIpAddresses" NetworkInterfaceProperty = [PrivateIpAddressSpecificationProperty]
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {privateIpAddresses = Prelude.pure newValue, ..}
+instance Property "SecondaryPrivateIpAddressCount" NetworkInterfaceProperty where
+  type PropertyType "SecondaryPrivateIpAddressCount" NetworkInterfaceProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {secondaryPrivateIpAddressCount = Prelude.pure newValue, ..}
+instance Property "SubnetId" NetworkInterfaceProperty where
+  type PropertyType "SubnetId" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty {subnetId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/NetworkInterfaceProperty.hs-boot b/gen/Stratosphere/EC2/Instance/NetworkInterfaceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/NetworkInterfaceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.NetworkInterfaceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkInterfaceProperty :: Prelude.Type
+instance ToResourceProperties NetworkInterfaceProperty
+instance Prelude.Eq NetworkInterfaceProperty
+instance Prelude.Show NetworkInterfaceProperty
+instance JSON.ToJSON NetworkInterfaceProperty
diff --git a/gen/Stratosphere/EC2/Instance/PrivateDnsNameOptionsProperty.hs b/gen/Stratosphere/EC2/Instance/PrivateDnsNameOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/PrivateDnsNameOptionsProperty.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EC2.Instance.PrivateDnsNameOptionsProperty (
+        PrivateDnsNameOptionsProperty(..), mkPrivateDnsNameOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PrivateDnsNameOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-privatednsnameoptions.html>
+    PrivateDnsNameOptionsProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-privatednsnameoptions.html#cfn-ec2-instance-privatednsnameoptions-enableresourcenamednsaaaarecord>
+                                   enableResourceNameDnsAAAARecord :: (Prelude.Maybe (Value Prelude.Bool)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-privatednsnameoptions.html#cfn-ec2-instance-privatednsnameoptions-enableresourcenamednsarecord>
+                                   enableResourceNameDnsARecord :: (Prelude.Maybe (Value Prelude.Bool)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-privatednsnameoptions.html#cfn-ec2-instance-privatednsnameoptions-hostnametype>
+                                   hostnameType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrivateDnsNameOptionsProperty :: PrivateDnsNameOptionsProperty
+mkPrivateDnsNameOptionsProperty
+  = PrivateDnsNameOptionsProperty
+      {haddock_workaround_ = (),
+       enableResourceNameDnsAAAARecord = Prelude.Nothing,
+       enableResourceNameDnsARecord = Prelude.Nothing,
+       hostnameType = Prelude.Nothing}
+instance ToResourceProperties PrivateDnsNameOptionsProperty where
+  toResourceProperties PrivateDnsNameOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.PrivateDnsNameOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnableResourceNameDnsAAAARecord"
+                              Prelude.<$> enableResourceNameDnsAAAARecord,
+                            (JSON..=) "EnableResourceNameDnsARecord"
+                              Prelude.<$> enableResourceNameDnsARecord,
+                            (JSON..=) "HostnameType" Prelude.<$> hostnameType])}
+instance JSON.ToJSON PrivateDnsNameOptionsProperty where
+  toJSON PrivateDnsNameOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnableResourceNameDnsAAAARecord"
+                 Prelude.<$> enableResourceNameDnsAAAARecord,
+               (JSON..=) "EnableResourceNameDnsARecord"
+                 Prelude.<$> enableResourceNameDnsARecord,
+               (JSON..=) "HostnameType" Prelude.<$> hostnameType]))
+instance Property "EnableResourceNameDnsAAAARecord" PrivateDnsNameOptionsProperty where
+  type PropertyType "EnableResourceNameDnsAAAARecord" PrivateDnsNameOptionsProperty = Value Prelude.Bool
+  set newValue PrivateDnsNameOptionsProperty {..}
+    = PrivateDnsNameOptionsProperty
+        {enableResourceNameDnsAAAARecord = Prelude.pure newValue, ..}
+instance Property "EnableResourceNameDnsARecord" PrivateDnsNameOptionsProperty where
+  type PropertyType "EnableResourceNameDnsARecord" PrivateDnsNameOptionsProperty = Value Prelude.Bool
+  set newValue PrivateDnsNameOptionsProperty {..}
+    = PrivateDnsNameOptionsProperty
+        {enableResourceNameDnsARecord = Prelude.pure newValue, ..}
+instance Property "HostnameType" PrivateDnsNameOptionsProperty where
+  type PropertyType "HostnameType" PrivateDnsNameOptionsProperty = Value Prelude.Text
+  set newValue PrivateDnsNameOptionsProperty {..}
+    = PrivateDnsNameOptionsProperty
+        {hostnameType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/PrivateDnsNameOptionsProperty.hs-boot b/gen/Stratosphere/EC2/Instance/PrivateDnsNameOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/PrivateDnsNameOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.PrivateDnsNameOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PrivateDnsNameOptionsProperty :: Prelude.Type
+instance ToResourceProperties PrivateDnsNameOptionsProperty
+instance Prelude.Eq PrivateDnsNameOptionsProperty
+instance Prelude.Show PrivateDnsNameOptionsProperty
+instance JSON.ToJSON PrivateDnsNameOptionsProperty
diff --git a/gen/Stratosphere/EC2/Instance/PrivateIpAddressSpecificationProperty.hs b/gen/Stratosphere/EC2/Instance/PrivateIpAddressSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/PrivateIpAddressSpecificationProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.Instance.PrivateIpAddressSpecificationProperty (
+        PrivateIpAddressSpecificationProperty(..),
+        mkPrivateIpAddressSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PrivateIpAddressSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-privateipaddressspecification.html>
+    PrivateIpAddressSpecificationProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-privateipaddressspecification.html#cfn-ec2-instance-privateipaddressspecification-primary>
+                                           primary :: (Value Prelude.Bool),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-privateipaddressspecification.html#cfn-ec2-instance-privateipaddressspecification-privateipaddress>
+                                           privateIpAddress :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrivateIpAddressSpecificationProperty ::
+  Value Prelude.Bool
+  -> Value Prelude.Text -> PrivateIpAddressSpecificationProperty
+mkPrivateIpAddressSpecificationProperty primary privateIpAddress
+  = PrivateIpAddressSpecificationProperty
+      {haddock_workaround_ = (), primary = primary,
+       privateIpAddress = privateIpAddress}
+instance ToResourceProperties PrivateIpAddressSpecificationProperty where
+  toResourceProperties PrivateIpAddressSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.PrivateIpAddressSpecification",
+         supportsTags = Prelude.False,
+         properties = ["Primary" JSON..= primary,
+                       "PrivateIpAddress" JSON..= privateIpAddress]}
+instance JSON.ToJSON PrivateIpAddressSpecificationProperty where
+  toJSON PrivateIpAddressSpecificationProperty {..}
+    = JSON.object
+        ["Primary" JSON..= primary,
+         "PrivateIpAddress" JSON..= privateIpAddress]
+instance Property "Primary" PrivateIpAddressSpecificationProperty where
+  type PropertyType "Primary" PrivateIpAddressSpecificationProperty = Value Prelude.Bool
+  set newValue PrivateIpAddressSpecificationProperty {..}
+    = PrivateIpAddressSpecificationProperty {primary = newValue, ..}
+instance Property "PrivateIpAddress" PrivateIpAddressSpecificationProperty where
+  type PropertyType "PrivateIpAddress" PrivateIpAddressSpecificationProperty = Value Prelude.Text
+  set newValue PrivateIpAddressSpecificationProperty {..}
+    = PrivateIpAddressSpecificationProperty
+        {privateIpAddress = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/PrivateIpAddressSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/Instance/PrivateIpAddressSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/PrivateIpAddressSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.PrivateIpAddressSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PrivateIpAddressSpecificationProperty :: Prelude.Type
+instance ToResourceProperties PrivateIpAddressSpecificationProperty
+instance Prelude.Eq PrivateIpAddressSpecificationProperty
+instance Prelude.Show PrivateIpAddressSpecificationProperty
+instance JSON.ToJSON PrivateIpAddressSpecificationProperty
diff --git a/gen/Stratosphere/EC2/Instance/SsmAssociationProperty.hs b/gen/Stratosphere/EC2/Instance/SsmAssociationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/SsmAssociationProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.EC2.Instance.SsmAssociationProperty (
+        module Exports, SsmAssociationProperty(..),
+        mkSsmAssociationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.Instance.AssociationParameterProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SsmAssociationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociation.html>
+    SsmAssociationProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociation.html#cfn-ec2-instance-ssmassociation-associationparameters>
+                            associationParameters :: (Prelude.Maybe [AssociationParameterProperty]),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-ssmassociation.html#cfn-ec2-instance-ssmassociation-documentname>
+                            documentName :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSsmAssociationProperty ::
+  Value Prelude.Text -> SsmAssociationProperty
+mkSsmAssociationProperty documentName
+  = SsmAssociationProperty
+      {haddock_workaround_ = (), documentName = documentName,
+       associationParameters = Prelude.Nothing}
+instance ToResourceProperties SsmAssociationProperty where
+  toResourceProperties SsmAssociationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.SsmAssociation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DocumentName" JSON..= documentName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AssociationParameters"
+                                 Prelude.<$> associationParameters]))}
+instance JSON.ToJSON SsmAssociationProperty where
+  toJSON SsmAssociationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DocumentName" JSON..= documentName]
+              (Prelude.catMaybes
+                 [(JSON..=) "AssociationParameters"
+                    Prelude.<$> associationParameters])))
+instance Property "AssociationParameters" SsmAssociationProperty where
+  type PropertyType "AssociationParameters" SsmAssociationProperty = [AssociationParameterProperty]
+  set newValue SsmAssociationProperty {..}
+    = SsmAssociationProperty
+        {associationParameters = Prelude.pure newValue, ..}
+instance Property "DocumentName" SsmAssociationProperty where
+  type PropertyType "DocumentName" SsmAssociationProperty = Value Prelude.Text
+  set newValue SsmAssociationProperty {..}
+    = SsmAssociationProperty {documentName = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/SsmAssociationProperty.hs-boot b/gen/Stratosphere/EC2/Instance/SsmAssociationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/SsmAssociationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.SsmAssociationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SsmAssociationProperty :: Prelude.Type
+instance ToResourceProperties SsmAssociationProperty
+instance Prelude.Eq SsmAssociationProperty
+instance Prelude.Show SsmAssociationProperty
+instance JSON.ToJSON SsmAssociationProperty
diff --git a/gen/Stratosphere/EC2/Instance/StateProperty.hs b/gen/Stratosphere/EC2/Instance/StateProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/StateProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.Instance.StateProperty (
+        StateProperty(..), mkStateProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data StateProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-state.html>
+    StateProperty {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-state.html#cfn-ec2-instance-state-code>
+                   code :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-state.html#cfn-ec2-instance-state-name>
+                   name :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkStateProperty :: StateProperty
+mkStateProperty
+  = StateProperty
+      {haddock_workaround_ = (), code = Prelude.Nothing,
+       name = Prelude.Nothing}
+instance ToResourceProperties StateProperty where
+  toResourceProperties StateProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.State",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Code" Prelude.<$> code,
+                            (JSON..=) "Name" Prelude.<$> name])}
+instance JSON.ToJSON StateProperty where
+  toJSON StateProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Code" Prelude.<$> code,
+               (JSON..=) "Name" Prelude.<$> name]))
+instance Property "Code" StateProperty where
+  type PropertyType "Code" StateProperty = Value Prelude.Text
+  set newValue StateProperty {..}
+    = StateProperty {code = Prelude.pure newValue, ..}
+instance Property "Name" StateProperty where
+  type PropertyType "Name" StateProperty = Value Prelude.Text
+  set newValue StateProperty {..}
+    = StateProperty {name = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/StateProperty.hs-boot b/gen/Stratosphere/EC2/Instance/StateProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/StateProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.StateProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data StateProperty :: Prelude.Type
+instance ToResourceProperties StateProperty
+instance Prelude.Eq StateProperty
+instance Prelude.Show StateProperty
+instance JSON.ToJSON StateProperty
diff --git a/gen/Stratosphere/EC2/Instance/VolumeProperty.hs b/gen/Stratosphere/EC2/Instance/VolumeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/VolumeProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.EC2.Instance.VolumeProperty (
+        VolumeProperty(..), mkVolumeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VolumeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-volume.html>
+    VolumeProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-volume.html#cfn-ec2-instance-volume-device>
+                    device :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance-volume.html#cfn-ec2-instance-volume-volumeid>
+                    volumeId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVolumeProperty ::
+  Value Prelude.Text -> Value Prelude.Text -> VolumeProperty
+mkVolumeProperty device volumeId
+  = VolumeProperty
+      {haddock_workaround_ = (), device = device, volumeId = volumeId}
+instance ToResourceProperties VolumeProperty where
+  toResourceProperties VolumeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Instance.Volume",
+         supportsTags = Prelude.False,
+         properties = ["Device" JSON..= device,
+                       "VolumeId" JSON..= volumeId]}
+instance JSON.ToJSON VolumeProperty where
+  toJSON VolumeProperty {..}
+    = JSON.object
+        ["Device" JSON..= device, "VolumeId" JSON..= volumeId]
+instance Property "Device" VolumeProperty where
+  type PropertyType "Device" VolumeProperty = Value Prelude.Text
+  set newValue VolumeProperty {..}
+    = VolumeProperty {device = newValue, ..}
+instance Property "VolumeId" VolumeProperty where
+  type PropertyType "VolumeId" VolumeProperty = Value Prelude.Text
+  set newValue VolumeProperty {..}
+    = VolumeProperty {volumeId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Instance/VolumeProperty.hs-boot b/gen/Stratosphere/EC2/Instance/VolumeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Instance/VolumeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Instance.VolumeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VolumeProperty :: Prelude.Type
+instance ToResourceProperties VolumeProperty
+instance Prelude.Eq VolumeProperty
+instance Prelude.Show VolumeProperty
+instance JSON.ToJSON VolumeProperty
diff --git a/gen/Stratosphere/EC2/InstanceConnectEndpoint.hs b/gen/Stratosphere/EC2/InstanceConnectEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/InstanceConnectEndpoint.hs
@@ -0,0 +1,76 @@
+module Stratosphere.EC2.InstanceConnectEndpoint (
+        InstanceConnectEndpoint(..), mkInstanceConnectEndpoint
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data InstanceConnectEndpoint
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html>
+    InstanceConnectEndpoint {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-clienttoken>
+                             clientToken :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-preserveclientip>
+                             preserveClientIp :: (Prelude.Maybe (Value Prelude.Bool)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-securitygroupids>
+                             securityGroupIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-subnetid>
+                             subnetId :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instanceconnectendpoint.html#cfn-ec2-instanceconnectendpoint-tags>
+                             tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceConnectEndpoint ::
+  Value Prelude.Text -> InstanceConnectEndpoint
+mkInstanceConnectEndpoint subnetId
+  = InstanceConnectEndpoint
+      {haddock_workaround_ = (), subnetId = subnetId,
+       clientToken = Prelude.Nothing, preserveClientIp = Prelude.Nothing,
+       securityGroupIds = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties InstanceConnectEndpoint where
+  toResourceProperties InstanceConnectEndpoint {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::InstanceConnectEndpoint",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SubnetId" JSON..= subnetId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ClientToken" Prelude.<$> clientToken,
+                               (JSON..=) "PreserveClientIp" Prelude.<$> preserveClientIp,
+                               (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON InstanceConnectEndpoint where
+  toJSON InstanceConnectEndpoint {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SubnetId" JSON..= subnetId]
+              (Prelude.catMaybes
+                 [(JSON..=) "ClientToken" Prelude.<$> clientToken,
+                  (JSON..=) "PreserveClientIp" Prelude.<$> preserveClientIp,
+                  (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ClientToken" InstanceConnectEndpoint where
+  type PropertyType "ClientToken" InstanceConnectEndpoint = Value Prelude.Text
+  set newValue InstanceConnectEndpoint {..}
+    = InstanceConnectEndpoint {clientToken = Prelude.pure newValue, ..}
+instance Property "PreserveClientIp" InstanceConnectEndpoint where
+  type PropertyType "PreserveClientIp" InstanceConnectEndpoint = Value Prelude.Bool
+  set newValue InstanceConnectEndpoint {..}
+    = InstanceConnectEndpoint
+        {preserveClientIp = Prelude.pure newValue, ..}
+instance Property "SecurityGroupIds" InstanceConnectEndpoint where
+  type PropertyType "SecurityGroupIds" InstanceConnectEndpoint = ValueList Prelude.Text
+  set newValue InstanceConnectEndpoint {..}
+    = InstanceConnectEndpoint
+        {securityGroupIds = Prelude.pure newValue, ..}
+instance Property "SubnetId" InstanceConnectEndpoint where
+  type PropertyType "SubnetId" InstanceConnectEndpoint = Value Prelude.Text
+  set newValue InstanceConnectEndpoint {..}
+    = InstanceConnectEndpoint {subnetId = newValue, ..}
+instance Property "Tags" InstanceConnectEndpoint where
+  type PropertyType "Tags" InstanceConnectEndpoint = [Tag]
+  set newValue InstanceConnectEndpoint {..}
+    = InstanceConnectEndpoint {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/InternetGateway.hs b/gen/Stratosphere/EC2/InternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/InternetGateway.hs
@@ -0,0 +1,34 @@
+module Stratosphere.EC2.InternetGateway (
+        InternetGateway(..), mkInternetGateway
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+data InternetGateway
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-internetgateway.html>
+    InternetGateway {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-internetgateway.html#cfn-ec2-internetgateway-tags>
+                     tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInternetGateway :: InternetGateway
+mkInternetGateway
+  = InternetGateway
+      {haddock_workaround_ = (), tags = Prelude.Nothing}
+instance ToResourceProperties InternetGateway where
+  toResourceProperties InternetGateway {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::InternetGateway",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON InternetGateway where
+  toJSON InternetGateway {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "Tags" InternetGateway where
+  type PropertyType "Tags" InternetGateway = [Tag]
+  set newValue InternetGateway {..}
+    = InternetGateway {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/IpPoolRouteTableAssociation.hs b/gen/Stratosphere/EC2/IpPoolRouteTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/IpPoolRouteTableAssociation.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EC2.IpPoolRouteTableAssociation (
+        IpPoolRouteTableAssociation(..), mkIpPoolRouteTableAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IpPoolRouteTableAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ippoolroutetableassociation.html>
+    IpPoolRouteTableAssociation {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ippoolroutetableassociation.html#cfn-ec2-ippoolroutetableassociation-publicipv4pool>
+                                 publicIpv4Pool :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ippoolroutetableassociation.html#cfn-ec2-ippoolroutetableassociation-routetableid>
+                                 routeTableId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpPoolRouteTableAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> IpPoolRouteTableAssociation
+mkIpPoolRouteTableAssociation publicIpv4Pool routeTableId
+  = IpPoolRouteTableAssociation
+      {haddock_workaround_ = (), publicIpv4Pool = publicIpv4Pool,
+       routeTableId = routeTableId}
+instance ToResourceProperties IpPoolRouteTableAssociation where
+  toResourceProperties IpPoolRouteTableAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::IpPoolRouteTableAssociation",
+         supportsTags = Prelude.False,
+         properties = ["PublicIpv4Pool" JSON..= publicIpv4Pool,
+                       "RouteTableId" JSON..= routeTableId]}
+instance JSON.ToJSON IpPoolRouteTableAssociation where
+  toJSON IpPoolRouteTableAssociation {..}
+    = JSON.object
+        ["PublicIpv4Pool" JSON..= publicIpv4Pool,
+         "RouteTableId" JSON..= routeTableId]
+instance Property "PublicIpv4Pool" IpPoolRouteTableAssociation where
+  type PropertyType "PublicIpv4Pool" IpPoolRouteTableAssociation = Value Prelude.Text
+  set newValue IpPoolRouteTableAssociation {..}
+    = IpPoolRouteTableAssociation {publicIpv4Pool = newValue, ..}
+instance Property "RouteTableId" IpPoolRouteTableAssociation where
+  type PropertyType "RouteTableId" IpPoolRouteTableAssociation = Value Prelude.Text
+  set newValue IpPoolRouteTableAssociation {..}
+    = IpPoolRouteTableAssociation {routeTableId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/KeyPair.hs b/gen/Stratosphere/EC2/KeyPair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/KeyPair.hs
@@ -0,0 +1,71 @@
+module Stratosphere.EC2.KeyPair (
+        KeyPair(..), mkKeyPair
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data KeyPair
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-keypair.html>
+    KeyPair {haddock_workaround_ :: (),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-keypair.html#cfn-ec2-keypair-keyformat>
+             keyFormat :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-keypair.html#cfn-ec2-keypair-keyname>
+             keyName :: (Value Prelude.Text),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-keypair.html#cfn-ec2-keypair-keytype>
+             keyType :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-keypair.html#cfn-ec2-keypair-publickeymaterial>
+             publicKeyMaterial :: (Prelude.Maybe (Value Prelude.Text)),
+             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-keypair.html#cfn-ec2-keypair-tags>
+             tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKeyPair :: Value Prelude.Text -> KeyPair
+mkKeyPair keyName
+  = KeyPair
+      {haddock_workaround_ = (), keyName = keyName,
+       keyFormat = Prelude.Nothing, keyType = Prelude.Nothing,
+       publicKeyMaterial = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties KeyPair where
+  toResourceProperties KeyPair {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::KeyPair", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["KeyName" JSON..= keyName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "KeyFormat" Prelude.<$> keyFormat,
+                               (JSON..=) "KeyType" Prelude.<$> keyType,
+                               (JSON..=) "PublicKeyMaterial" Prelude.<$> publicKeyMaterial,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON KeyPair where
+  toJSON KeyPair {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["KeyName" JSON..= keyName]
+              (Prelude.catMaybes
+                 [(JSON..=) "KeyFormat" Prelude.<$> keyFormat,
+                  (JSON..=) "KeyType" Prelude.<$> keyType,
+                  (JSON..=) "PublicKeyMaterial" Prelude.<$> publicKeyMaterial,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "KeyFormat" KeyPair where
+  type PropertyType "KeyFormat" KeyPair = Value Prelude.Text
+  set newValue KeyPair {..}
+    = KeyPair {keyFormat = Prelude.pure newValue, ..}
+instance Property "KeyName" KeyPair where
+  type PropertyType "KeyName" KeyPair = Value Prelude.Text
+  set newValue KeyPair {..} = KeyPair {keyName = newValue, ..}
+instance Property "KeyType" KeyPair where
+  type PropertyType "KeyType" KeyPair = Value Prelude.Text
+  set newValue KeyPair {..}
+    = KeyPair {keyType = Prelude.pure newValue, ..}
+instance Property "PublicKeyMaterial" KeyPair where
+  type PropertyType "PublicKeyMaterial" KeyPair = Value Prelude.Text
+  set newValue KeyPair {..}
+    = KeyPair {publicKeyMaterial = Prelude.pure newValue, ..}
+instance Property "Tags" KeyPair where
+  type PropertyType "Tags" KeyPair = [Tag]
+  set newValue KeyPair {..}
+    = KeyPair {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate.hs b/gen/Stratosphere/EC2/LaunchTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate.hs
@@ -0,0 +1,67 @@
+module Stratosphere.EC2.LaunchTemplate (
+        module Exports, LaunchTemplate(..), mkLaunchTemplate
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.LaunchTemplateDataProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.LaunchTemplateTagSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LaunchTemplate
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html>
+    LaunchTemplate {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#cfn-ec2-launchtemplate-launchtemplatedata>
+                    launchTemplateData :: LaunchTemplateDataProperty,
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#cfn-ec2-launchtemplate-launchtemplatename>
+                    launchTemplateName :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#cfn-ec2-launchtemplate-tagspecifications>
+                    tagSpecifications :: (Prelude.Maybe [LaunchTemplateTagSpecificationProperty]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html#cfn-ec2-launchtemplate-versiondescription>
+                    versionDescription :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLaunchTemplate :: LaunchTemplateDataProperty -> LaunchTemplate
+mkLaunchTemplate launchTemplateData
+  = LaunchTemplate
+      {haddock_workaround_ = (), launchTemplateData = launchTemplateData,
+       launchTemplateName = Prelude.Nothing,
+       tagSpecifications = Prelude.Nothing,
+       versionDescription = Prelude.Nothing}
+instance ToResourceProperties LaunchTemplate where
+  toResourceProperties LaunchTemplate {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LaunchTemplateData" JSON..= launchTemplateData]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LaunchTemplateName" Prelude.<$> launchTemplateName,
+                               (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                               (JSON..=) "VersionDescription" Prelude.<$> versionDescription]))}
+instance JSON.ToJSON LaunchTemplate where
+  toJSON LaunchTemplate {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LaunchTemplateData" JSON..= launchTemplateData]
+              (Prelude.catMaybes
+                 [(JSON..=) "LaunchTemplateName" Prelude.<$> launchTemplateName,
+                  (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                  (JSON..=) "VersionDescription" Prelude.<$> versionDescription])))
+instance Property "LaunchTemplateData" LaunchTemplate where
+  type PropertyType "LaunchTemplateData" LaunchTemplate = LaunchTemplateDataProperty
+  set newValue LaunchTemplate {..}
+    = LaunchTemplate {launchTemplateData = newValue, ..}
+instance Property "LaunchTemplateName" LaunchTemplate where
+  type PropertyType "LaunchTemplateName" LaunchTemplate = Value Prelude.Text
+  set newValue LaunchTemplate {..}
+    = LaunchTemplate {launchTemplateName = Prelude.pure newValue, ..}
+instance Property "TagSpecifications" LaunchTemplate where
+  type PropertyType "TagSpecifications" LaunchTemplate = [LaunchTemplateTagSpecificationProperty]
+  set newValue LaunchTemplate {..}
+    = LaunchTemplate {tagSpecifications = Prelude.pure newValue, ..}
+instance Property "VersionDescription" LaunchTemplate where
+  type PropertyType "VersionDescription" LaunchTemplate = Value Prelude.Text
+  set newValue LaunchTemplate {..}
+    = LaunchTemplate {versionDescription = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorCountProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorCountProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorCountProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.LaunchTemplate.AcceleratorCountProperty (
+        AcceleratorCountProperty(..), mkAcceleratorCountProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AcceleratorCountProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-acceleratorcount.html>
+    AcceleratorCountProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-acceleratorcount.html#cfn-ec2-launchtemplate-acceleratorcount-max>
+                              max :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-acceleratorcount.html#cfn-ec2-launchtemplate-acceleratorcount-min>
+                              min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAcceleratorCountProperty :: AcceleratorCountProperty
+mkAcceleratorCountProperty
+  = AcceleratorCountProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties AcceleratorCountProperty where
+  toResourceProperties AcceleratorCountProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.AcceleratorCount",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON AcceleratorCountProperty where
+  toJSON AcceleratorCountProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" AcceleratorCountProperty where
+  type PropertyType "Max" AcceleratorCountProperty = Value Prelude.Integer
+  set newValue AcceleratorCountProperty {..}
+    = AcceleratorCountProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" AcceleratorCountProperty where
+  type PropertyType "Min" AcceleratorCountProperty = Value Prelude.Integer
+  set newValue AcceleratorCountProperty {..}
+    = AcceleratorCountProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorCountProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorCountProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorCountProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.AcceleratorCountProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AcceleratorCountProperty :: Prelude.Type
+instance ToResourceProperties AcceleratorCountProperty
+instance Prelude.Eq AcceleratorCountProperty
+instance Prelude.Show AcceleratorCountProperty
+instance JSON.ToJSON AcceleratorCountProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorTotalMemoryMiBProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorTotalMemoryMiBProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorTotalMemoryMiBProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.LaunchTemplate.AcceleratorTotalMemoryMiBProperty (
+        AcceleratorTotalMemoryMiBProperty(..),
+        mkAcceleratorTotalMemoryMiBProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AcceleratorTotalMemoryMiBProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-acceleratortotalmemorymib.html>
+    AcceleratorTotalMemoryMiBProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-acceleratortotalmemorymib.html#cfn-ec2-launchtemplate-acceleratortotalmemorymib-max>
+                                       max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-acceleratortotalmemorymib.html#cfn-ec2-launchtemplate-acceleratortotalmemorymib-min>
+                                       min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAcceleratorTotalMemoryMiBProperty ::
+  AcceleratorTotalMemoryMiBProperty
+mkAcceleratorTotalMemoryMiBProperty
+  = AcceleratorTotalMemoryMiBProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties AcceleratorTotalMemoryMiBProperty where
+  toResourceProperties AcceleratorTotalMemoryMiBProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.AcceleratorTotalMemoryMiB",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON AcceleratorTotalMemoryMiBProperty where
+  toJSON AcceleratorTotalMemoryMiBProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" AcceleratorTotalMemoryMiBProperty where
+  type PropertyType "Max" AcceleratorTotalMemoryMiBProperty = Value Prelude.Integer
+  set newValue AcceleratorTotalMemoryMiBProperty {..}
+    = AcceleratorTotalMemoryMiBProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" AcceleratorTotalMemoryMiBProperty where
+  type PropertyType "Min" AcceleratorTotalMemoryMiBProperty = Value Prelude.Integer
+  set newValue AcceleratorTotalMemoryMiBProperty {..}
+    = AcceleratorTotalMemoryMiBProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorTotalMemoryMiBProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorTotalMemoryMiBProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/AcceleratorTotalMemoryMiBProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.AcceleratorTotalMemoryMiBProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AcceleratorTotalMemoryMiBProperty :: Prelude.Type
+instance ToResourceProperties AcceleratorTotalMemoryMiBProperty
+instance Prelude.Eq AcceleratorTotalMemoryMiBProperty
+instance Prelude.Show AcceleratorTotalMemoryMiBProperty
+instance JSON.ToJSON AcceleratorTotalMemoryMiBProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/BaselineEbsBandwidthMbpsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/BaselineEbsBandwidthMbpsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/BaselineEbsBandwidthMbpsProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.LaunchTemplate.BaselineEbsBandwidthMbpsProperty (
+        BaselineEbsBandwidthMbpsProperty(..),
+        mkBaselineEbsBandwidthMbpsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BaselineEbsBandwidthMbpsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-baselineebsbandwidthmbps.html>
+    BaselineEbsBandwidthMbpsProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-baselineebsbandwidthmbps.html#cfn-ec2-launchtemplate-baselineebsbandwidthmbps-max>
+                                      max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-baselineebsbandwidthmbps.html#cfn-ec2-launchtemplate-baselineebsbandwidthmbps-min>
+                                      min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBaselineEbsBandwidthMbpsProperty ::
+  BaselineEbsBandwidthMbpsProperty
+mkBaselineEbsBandwidthMbpsProperty
+  = BaselineEbsBandwidthMbpsProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties BaselineEbsBandwidthMbpsProperty where
+  toResourceProperties BaselineEbsBandwidthMbpsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.BaselineEbsBandwidthMbps",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON BaselineEbsBandwidthMbpsProperty where
+  toJSON BaselineEbsBandwidthMbpsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" BaselineEbsBandwidthMbpsProperty where
+  type PropertyType "Max" BaselineEbsBandwidthMbpsProperty = Value Prelude.Integer
+  set newValue BaselineEbsBandwidthMbpsProperty {..}
+    = BaselineEbsBandwidthMbpsProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" BaselineEbsBandwidthMbpsProperty where
+  type PropertyType "Min" BaselineEbsBandwidthMbpsProperty = Value Prelude.Integer
+  set newValue BaselineEbsBandwidthMbpsProperty {..}
+    = BaselineEbsBandwidthMbpsProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/BaselineEbsBandwidthMbpsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/BaselineEbsBandwidthMbpsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/BaselineEbsBandwidthMbpsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.BaselineEbsBandwidthMbpsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BaselineEbsBandwidthMbpsProperty :: Prelude.Type
+instance ToResourceProperties BaselineEbsBandwidthMbpsProperty
+instance Prelude.Eq BaselineEbsBandwidthMbpsProperty
+instance Prelude.Show BaselineEbsBandwidthMbpsProperty
+instance JSON.ToJSON BaselineEbsBandwidthMbpsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/BaselinePerformanceFactorsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/BaselinePerformanceFactorsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/BaselinePerformanceFactorsProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.LaunchTemplate.BaselinePerformanceFactorsProperty (
+        module Exports, BaselinePerformanceFactorsProperty(..),
+        mkBaselinePerformanceFactorsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.CpuProperty as Exports
+import Stratosphere.ResourceProperties
+data BaselinePerformanceFactorsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-baselineperformancefactors.html>
+    BaselinePerformanceFactorsProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-baselineperformancefactors.html#cfn-ec2-launchtemplate-baselineperformancefactors-cpu>
+                                        cpu :: (Prelude.Maybe CpuProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBaselinePerformanceFactorsProperty ::
+  BaselinePerformanceFactorsProperty
+mkBaselinePerformanceFactorsProperty
+  = BaselinePerformanceFactorsProperty
+      {haddock_workaround_ = (), cpu = Prelude.Nothing}
+instance ToResourceProperties BaselinePerformanceFactorsProperty where
+  toResourceProperties BaselinePerformanceFactorsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.BaselinePerformanceFactors",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Cpu" Prelude.<$> cpu])}
+instance JSON.ToJSON BaselinePerformanceFactorsProperty where
+  toJSON BaselinePerformanceFactorsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Cpu" Prelude.<$> cpu]))
+instance Property "Cpu" BaselinePerformanceFactorsProperty where
+  type PropertyType "Cpu" BaselinePerformanceFactorsProperty = CpuProperty
+  set newValue BaselinePerformanceFactorsProperty {..}
+    = BaselinePerformanceFactorsProperty
+        {cpu = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/BaselinePerformanceFactorsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/BaselinePerformanceFactorsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/BaselinePerformanceFactorsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.BaselinePerformanceFactorsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BaselinePerformanceFactorsProperty :: Prelude.Type
+instance ToResourceProperties BaselinePerformanceFactorsProperty
+instance Prelude.Eq BaselinePerformanceFactorsProperty
+instance Prelude.Show BaselinePerformanceFactorsProperty
+instance JSON.ToJSON BaselinePerformanceFactorsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/BlockDeviceMappingProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/BlockDeviceMappingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/BlockDeviceMappingProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.EC2.LaunchTemplate.BlockDeviceMappingProperty (
+        module Exports, BlockDeviceMappingProperty(..),
+        mkBlockDeviceMappingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.EbsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BlockDeviceMappingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html>
+    BlockDeviceMappingProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html#cfn-ec2-launchtemplate-blockdevicemapping-devicename>
+                                deviceName :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html#cfn-ec2-launchtemplate-blockdevicemapping-ebs>
+                                ebs :: (Prelude.Maybe EbsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html#cfn-ec2-launchtemplate-blockdevicemapping-nodevice>
+                                noDevice :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-blockdevicemapping.html#cfn-ec2-launchtemplate-blockdevicemapping-virtualname>
+                                virtualName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBlockDeviceMappingProperty :: BlockDeviceMappingProperty
+mkBlockDeviceMappingProperty
+  = BlockDeviceMappingProperty
+      {haddock_workaround_ = (), deviceName = Prelude.Nothing,
+       ebs = Prelude.Nothing, noDevice = Prelude.Nothing,
+       virtualName = Prelude.Nothing}
+instance ToResourceProperties BlockDeviceMappingProperty where
+  toResourceProperties BlockDeviceMappingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.BlockDeviceMapping",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeviceName" Prelude.<$> deviceName,
+                            (JSON..=) "Ebs" Prelude.<$> ebs,
+                            (JSON..=) "NoDevice" Prelude.<$> noDevice,
+                            (JSON..=) "VirtualName" Prelude.<$> virtualName])}
+instance JSON.ToJSON BlockDeviceMappingProperty where
+  toJSON BlockDeviceMappingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeviceName" Prelude.<$> deviceName,
+               (JSON..=) "Ebs" Prelude.<$> ebs,
+               (JSON..=) "NoDevice" Prelude.<$> noDevice,
+               (JSON..=) "VirtualName" Prelude.<$> virtualName]))
+instance Property "DeviceName" BlockDeviceMappingProperty where
+  type PropertyType "DeviceName" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty
+        {deviceName = Prelude.pure newValue, ..}
+instance Property "Ebs" BlockDeviceMappingProperty where
+  type PropertyType "Ebs" BlockDeviceMappingProperty = EbsProperty
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {ebs = Prelude.pure newValue, ..}
+instance Property "NoDevice" BlockDeviceMappingProperty where
+  type PropertyType "NoDevice" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {noDevice = Prelude.pure newValue, ..}
+instance Property "VirtualName" BlockDeviceMappingProperty where
+  type PropertyType "VirtualName" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty
+        {virtualName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/BlockDeviceMappingProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/BlockDeviceMappingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/BlockDeviceMappingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.BlockDeviceMappingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BlockDeviceMappingProperty :: Prelude.Type
+instance ToResourceProperties BlockDeviceMappingProperty
+instance Prelude.Eq BlockDeviceMappingProperty
+instance Prelude.Show BlockDeviceMappingProperty
+instance JSON.ToJSON BlockDeviceMappingProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationSpecificationProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.EC2.LaunchTemplate.CapacityReservationSpecificationProperty (
+        module Exports, CapacityReservationSpecificationProperty(..),
+        mkCapacityReservationSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.CapacityReservationTargetProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityReservationSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-capacityreservationspecification.html>
+    CapacityReservationSpecificationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-capacityreservationspecification.html#cfn-ec2-launchtemplate-capacityreservationspecification-capacityreservationpreference>
+                                              capacityReservationPreference :: (Prelude.Maybe (Value Prelude.Text)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-capacityreservationspecification.html#cfn-ec2-launchtemplate-capacityreservationspecification-capacityreservationtarget>
+                                              capacityReservationTarget :: (Prelude.Maybe CapacityReservationTargetProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityReservationSpecificationProperty ::
+  CapacityReservationSpecificationProperty
+mkCapacityReservationSpecificationProperty
+  = CapacityReservationSpecificationProperty
+      {haddock_workaround_ = (),
+       capacityReservationPreference = Prelude.Nothing,
+       capacityReservationTarget = Prelude.Nothing}
+instance ToResourceProperties CapacityReservationSpecificationProperty where
+  toResourceProperties CapacityReservationSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.CapacityReservationSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CapacityReservationPreference"
+                              Prelude.<$> capacityReservationPreference,
+                            (JSON..=) "CapacityReservationTarget"
+                              Prelude.<$> capacityReservationTarget])}
+instance JSON.ToJSON CapacityReservationSpecificationProperty where
+  toJSON CapacityReservationSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CapacityReservationPreference"
+                 Prelude.<$> capacityReservationPreference,
+               (JSON..=) "CapacityReservationTarget"
+                 Prelude.<$> capacityReservationTarget]))
+instance Property "CapacityReservationPreference" CapacityReservationSpecificationProperty where
+  type PropertyType "CapacityReservationPreference" CapacityReservationSpecificationProperty = Value Prelude.Text
+  set newValue CapacityReservationSpecificationProperty {..}
+    = CapacityReservationSpecificationProperty
+        {capacityReservationPreference = Prelude.pure newValue, ..}
+instance Property "CapacityReservationTarget" CapacityReservationSpecificationProperty where
+  type PropertyType "CapacityReservationTarget" CapacityReservationSpecificationProperty = CapacityReservationTargetProperty
+  set newValue CapacityReservationSpecificationProperty {..}
+    = CapacityReservationSpecificationProperty
+        {capacityReservationTarget = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.CapacityReservationSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityReservationSpecificationProperty :: Prelude.Type
+instance ToResourceProperties CapacityReservationSpecificationProperty
+instance Prelude.Eq CapacityReservationSpecificationProperty
+instance Prelude.Show CapacityReservationSpecificationProperty
+instance JSON.ToJSON CapacityReservationSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationTargetProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationTargetProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationTargetProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.EC2.LaunchTemplate.CapacityReservationTargetProperty (
+        CapacityReservationTargetProperty(..),
+        mkCapacityReservationTargetProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CapacityReservationTargetProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-capacityreservationtarget.html>
+    CapacityReservationTargetProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-capacityreservationtarget.html#cfn-ec2-launchtemplate-capacityreservationtarget-capacityreservationid>
+                                       capacityReservationId :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-capacityreservationtarget.html#cfn-ec2-launchtemplate-capacityreservationtarget-capacityreservationresourcegrouparn>
+                                       capacityReservationResourceGroupArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCapacityReservationTargetProperty ::
+  CapacityReservationTargetProperty
+mkCapacityReservationTargetProperty
+  = CapacityReservationTargetProperty
+      {haddock_workaround_ = (), capacityReservationId = Prelude.Nothing,
+       capacityReservationResourceGroupArn = Prelude.Nothing}
+instance ToResourceProperties CapacityReservationTargetProperty where
+  toResourceProperties CapacityReservationTargetProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.CapacityReservationTarget",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CapacityReservationId"
+                              Prelude.<$> capacityReservationId,
+                            (JSON..=) "CapacityReservationResourceGroupArn"
+                              Prelude.<$> capacityReservationResourceGroupArn])}
+instance JSON.ToJSON CapacityReservationTargetProperty where
+  toJSON CapacityReservationTargetProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CapacityReservationId"
+                 Prelude.<$> capacityReservationId,
+               (JSON..=) "CapacityReservationResourceGroupArn"
+                 Prelude.<$> capacityReservationResourceGroupArn]))
+instance Property "CapacityReservationId" CapacityReservationTargetProperty where
+  type PropertyType "CapacityReservationId" CapacityReservationTargetProperty = Value Prelude.Text
+  set newValue CapacityReservationTargetProperty {..}
+    = CapacityReservationTargetProperty
+        {capacityReservationId = Prelude.pure newValue, ..}
+instance Property "CapacityReservationResourceGroupArn" CapacityReservationTargetProperty where
+  type PropertyType "CapacityReservationResourceGroupArn" CapacityReservationTargetProperty = Value Prelude.Text
+  set newValue CapacityReservationTargetProperty {..}
+    = CapacityReservationTargetProperty
+        {capacityReservationResourceGroupArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationTargetProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationTargetProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CapacityReservationTargetProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.CapacityReservationTargetProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CapacityReservationTargetProperty :: Prelude.Type
+instance ToResourceProperties CapacityReservationTargetProperty
+instance Prelude.Eq CapacityReservationTargetProperty
+instance Prelude.Show CapacityReservationTargetProperty
+instance JSON.ToJSON CapacityReservationTargetProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/ConnectionTrackingSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/ConnectionTrackingSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/ConnectionTrackingSpecificationProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.EC2.LaunchTemplate.ConnectionTrackingSpecificationProperty (
+        ConnectionTrackingSpecificationProperty(..),
+        mkConnectionTrackingSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConnectionTrackingSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-connectiontrackingspecification.html>
+    ConnectionTrackingSpecificationProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-connectiontrackingspecification.html#cfn-ec2-launchtemplate-connectiontrackingspecification-tcpestablishedtimeout>
+                                             tcpEstablishedTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-connectiontrackingspecification.html#cfn-ec2-launchtemplate-connectiontrackingspecification-udpstreamtimeout>
+                                             udpStreamTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-connectiontrackingspecification.html#cfn-ec2-launchtemplate-connectiontrackingspecification-udptimeout>
+                                             udpTimeout :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConnectionTrackingSpecificationProperty ::
+  ConnectionTrackingSpecificationProperty
+mkConnectionTrackingSpecificationProperty
+  = ConnectionTrackingSpecificationProperty
+      {haddock_workaround_ = (), tcpEstablishedTimeout = Prelude.Nothing,
+       udpStreamTimeout = Prelude.Nothing, udpTimeout = Prelude.Nothing}
+instance ToResourceProperties ConnectionTrackingSpecificationProperty where
+  toResourceProperties ConnectionTrackingSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.ConnectionTrackingSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TcpEstablishedTimeout"
+                              Prelude.<$> tcpEstablishedTimeout,
+                            (JSON..=) "UdpStreamTimeout" Prelude.<$> udpStreamTimeout,
+                            (JSON..=) "UdpTimeout" Prelude.<$> udpTimeout])}
+instance JSON.ToJSON ConnectionTrackingSpecificationProperty where
+  toJSON ConnectionTrackingSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TcpEstablishedTimeout"
+                 Prelude.<$> tcpEstablishedTimeout,
+               (JSON..=) "UdpStreamTimeout" Prelude.<$> udpStreamTimeout,
+               (JSON..=) "UdpTimeout" Prelude.<$> udpTimeout]))
+instance Property "TcpEstablishedTimeout" ConnectionTrackingSpecificationProperty where
+  type PropertyType "TcpEstablishedTimeout" ConnectionTrackingSpecificationProperty = Value Prelude.Integer
+  set newValue ConnectionTrackingSpecificationProperty {..}
+    = ConnectionTrackingSpecificationProperty
+        {tcpEstablishedTimeout = Prelude.pure newValue, ..}
+instance Property "UdpStreamTimeout" ConnectionTrackingSpecificationProperty where
+  type PropertyType "UdpStreamTimeout" ConnectionTrackingSpecificationProperty = Value Prelude.Integer
+  set newValue ConnectionTrackingSpecificationProperty {..}
+    = ConnectionTrackingSpecificationProperty
+        {udpStreamTimeout = Prelude.pure newValue, ..}
+instance Property "UdpTimeout" ConnectionTrackingSpecificationProperty where
+  type PropertyType "UdpTimeout" ConnectionTrackingSpecificationProperty = Value Prelude.Integer
+  set newValue ConnectionTrackingSpecificationProperty {..}
+    = ConnectionTrackingSpecificationProperty
+        {udpTimeout = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/ConnectionTrackingSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/ConnectionTrackingSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/ConnectionTrackingSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.ConnectionTrackingSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConnectionTrackingSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ConnectionTrackingSpecificationProperty
+instance Prelude.Eq ConnectionTrackingSpecificationProperty
+instance Prelude.Show ConnectionTrackingSpecificationProperty
+instance JSON.ToJSON ConnectionTrackingSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CpuOptionsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/CpuOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CpuOptionsProperty.hs
@@ -0,0 +1,53 @@
+module Stratosphere.EC2.LaunchTemplate.CpuOptionsProperty (
+        CpuOptionsProperty(..), mkCpuOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CpuOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-cpuoptions.html>
+    CpuOptionsProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-cpuoptions.html#cfn-ec2-launchtemplate-cpuoptions-amdsevsnp>
+                        amdSevSnp :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-cpuoptions.html#cfn-ec2-launchtemplate-cpuoptions-corecount>
+                        coreCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-cpuoptions.html#cfn-ec2-launchtemplate-cpuoptions-threadspercore>
+                        threadsPerCore :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCpuOptionsProperty :: CpuOptionsProperty
+mkCpuOptionsProperty
+  = CpuOptionsProperty
+      {haddock_workaround_ = (), amdSevSnp = Prelude.Nothing,
+       coreCount = Prelude.Nothing, threadsPerCore = Prelude.Nothing}
+instance ToResourceProperties CpuOptionsProperty where
+  toResourceProperties CpuOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.CpuOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AmdSevSnp" Prelude.<$> amdSevSnp,
+                            (JSON..=) "CoreCount" Prelude.<$> coreCount,
+                            (JSON..=) "ThreadsPerCore" Prelude.<$> threadsPerCore])}
+instance JSON.ToJSON CpuOptionsProperty where
+  toJSON CpuOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AmdSevSnp" Prelude.<$> amdSevSnp,
+               (JSON..=) "CoreCount" Prelude.<$> coreCount,
+               (JSON..=) "ThreadsPerCore" Prelude.<$> threadsPerCore]))
+instance Property "AmdSevSnp" CpuOptionsProperty where
+  type PropertyType "AmdSevSnp" CpuOptionsProperty = Value Prelude.Text
+  set newValue CpuOptionsProperty {..}
+    = CpuOptionsProperty {amdSevSnp = Prelude.pure newValue, ..}
+instance Property "CoreCount" CpuOptionsProperty where
+  type PropertyType "CoreCount" CpuOptionsProperty = Value Prelude.Integer
+  set newValue CpuOptionsProperty {..}
+    = CpuOptionsProperty {coreCount = Prelude.pure newValue, ..}
+instance Property "ThreadsPerCore" CpuOptionsProperty where
+  type PropertyType "ThreadsPerCore" CpuOptionsProperty = Value Prelude.Integer
+  set newValue CpuOptionsProperty {..}
+    = CpuOptionsProperty {threadsPerCore = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CpuOptionsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/CpuOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CpuOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.CpuOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CpuOptionsProperty :: Prelude.Type
+instance ToResourceProperties CpuOptionsProperty
+instance Prelude.Eq CpuOptionsProperty
+instance Prelude.Show CpuOptionsProperty
+instance JSON.ToJSON CpuOptionsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CpuProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/CpuProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CpuProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.EC2.LaunchTemplate.CpuProperty (
+        module Exports, CpuProperty(..), mkCpuProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.ReferenceProperty as Exports
+import Stratosphere.ResourceProperties
+data CpuProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-cpu.html>
+    CpuProperty {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-cpu.html#cfn-ec2-launchtemplate-cpu-references>
+                 references :: (Prelude.Maybe [ReferenceProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCpuProperty :: CpuProperty
+mkCpuProperty
+  = CpuProperty
+      {haddock_workaround_ = (), references = Prelude.Nothing}
+instance ToResourceProperties CpuProperty where
+  toResourceProperties CpuProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.Cpu",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "References" Prelude.<$> references])}
+instance JSON.ToJSON CpuProperty where
+  toJSON CpuProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "References" Prelude.<$> references]))
+instance Property "References" CpuProperty where
+  type PropertyType "References" CpuProperty = [ReferenceProperty]
+  set newValue CpuProperty {..}
+    = CpuProperty {references = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CpuProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/CpuProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CpuProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.CpuProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CpuProperty :: Prelude.Type
+instance ToResourceProperties CpuProperty
+instance Prelude.Eq CpuProperty
+instance Prelude.Show CpuProperty
+instance JSON.ToJSON CpuProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CreditSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/CreditSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CreditSpecificationProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.LaunchTemplate.CreditSpecificationProperty (
+        CreditSpecificationProperty(..), mkCreditSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CreditSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-creditspecification.html>
+    CreditSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-creditspecification.html#cfn-ec2-launchtemplate-creditspecification-cpucredits>
+                                 cpuCredits :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCreditSpecificationProperty :: CreditSpecificationProperty
+mkCreditSpecificationProperty
+  = CreditSpecificationProperty
+      {haddock_workaround_ = (), cpuCredits = Prelude.Nothing}
+instance ToResourceProperties CreditSpecificationProperty where
+  toResourceProperties CreditSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.CreditSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CpuCredits" Prelude.<$> cpuCredits])}
+instance JSON.ToJSON CreditSpecificationProperty where
+  toJSON CreditSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CpuCredits" Prelude.<$> cpuCredits]))
+instance Property "CpuCredits" CreditSpecificationProperty where
+  type PropertyType "CpuCredits" CreditSpecificationProperty = Value Prelude.Text
+  set newValue CreditSpecificationProperty {..}
+    = CreditSpecificationProperty
+        {cpuCredits = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/CreditSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/CreditSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/CreditSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.CreditSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CreditSpecificationProperty :: Prelude.Type
+instance ToResourceProperties CreditSpecificationProperty
+instance Prelude.Eq CreditSpecificationProperty
+instance Prelude.Show CreditSpecificationProperty
+instance JSON.ToJSON CreditSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/EbsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/EbsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/EbsProperty.hs
@@ -0,0 +1,108 @@
+module Stratosphere.EC2.LaunchTemplate.EbsProperty (
+        EbsProperty(..), mkEbsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html>
+    EbsProperty {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html#cfn-ec2-launchtemplate-ebs-deleteontermination>
+                 deleteOnTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html#cfn-ec2-launchtemplate-ebs-encrypted>
+                 encrypted :: (Prelude.Maybe (Value Prelude.Bool)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html#cfn-ec2-launchtemplate-ebs-iops>
+                 iops :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html#cfn-ec2-launchtemplate-ebs-kmskeyid>
+                 kmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html#cfn-ec2-launchtemplate-ebs-snapshotid>
+                 snapshotId :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html#cfn-ec2-launchtemplate-ebs-throughput>
+                 throughput :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html#cfn-ec2-launchtemplate-ebs-volumeinitializationrate>
+                 volumeInitializationRate :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html#cfn-ec2-launchtemplate-ebs-volumesize>
+                 volumeSize :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ebs.html#cfn-ec2-launchtemplate-ebs-volumetype>
+                 volumeType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsProperty :: EbsProperty
+mkEbsProperty
+  = EbsProperty
+      {haddock_workaround_ = (), deleteOnTermination = Prelude.Nothing,
+       encrypted = Prelude.Nothing, iops = Prelude.Nothing,
+       kmsKeyId = Prelude.Nothing, snapshotId = Prelude.Nothing,
+       throughput = Prelude.Nothing,
+       volumeInitializationRate = Prelude.Nothing,
+       volumeSize = Prelude.Nothing, volumeType = Prelude.Nothing}
+instance ToResourceProperties EbsProperty where
+  toResourceProperties EbsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.Ebs",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                            (JSON..=) "Encrypted" Prelude.<$> encrypted,
+                            (JSON..=) "Iops" Prelude.<$> iops,
+                            (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                            (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+                            (JSON..=) "Throughput" Prelude.<$> throughput,
+                            (JSON..=) "VolumeInitializationRate"
+                              Prelude.<$> volumeInitializationRate,
+                            (JSON..=) "VolumeSize" Prelude.<$> volumeSize,
+                            (JSON..=) "VolumeType" Prelude.<$> volumeType])}
+instance JSON.ToJSON EbsProperty where
+  toJSON EbsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+               (JSON..=) "Encrypted" Prelude.<$> encrypted,
+               (JSON..=) "Iops" Prelude.<$> iops,
+               (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+               (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+               (JSON..=) "Throughput" Prelude.<$> throughput,
+               (JSON..=) "VolumeInitializationRate"
+                 Prelude.<$> volumeInitializationRate,
+               (JSON..=) "VolumeSize" Prelude.<$> volumeSize,
+               (JSON..=) "VolumeType" Prelude.<$> volumeType]))
+instance Property "DeleteOnTermination" EbsProperty where
+  type PropertyType "DeleteOnTermination" EbsProperty = Value Prelude.Bool
+  set newValue EbsProperty {..}
+    = EbsProperty {deleteOnTermination = Prelude.pure newValue, ..}
+instance Property "Encrypted" EbsProperty where
+  type PropertyType "Encrypted" EbsProperty = Value Prelude.Bool
+  set newValue EbsProperty {..}
+    = EbsProperty {encrypted = Prelude.pure newValue, ..}
+instance Property "Iops" EbsProperty where
+  type PropertyType "Iops" EbsProperty = Value Prelude.Integer
+  set newValue EbsProperty {..}
+    = EbsProperty {iops = Prelude.pure newValue, ..}
+instance Property "KmsKeyId" EbsProperty where
+  type PropertyType "KmsKeyId" EbsProperty = Value Prelude.Text
+  set newValue EbsProperty {..}
+    = EbsProperty {kmsKeyId = Prelude.pure newValue, ..}
+instance Property "SnapshotId" EbsProperty where
+  type PropertyType "SnapshotId" EbsProperty = Value Prelude.Text
+  set newValue EbsProperty {..}
+    = EbsProperty {snapshotId = Prelude.pure newValue, ..}
+instance Property "Throughput" EbsProperty where
+  type PropertyType "Throughput" EbsProperty = Value Prelude.Integer
+  set newValue EbsProperty {..}
+    = EbsProperty {throughput = Prelude.pure newValue, ..}
+instance Property "VolumeInitializationRate" EbsProperty where
+  type PropertyType "VolumeInitializationRate" EbsProperty = Value Prelude.Integer
+  set newValue EbsProperty {..}
+    = EbsProperty
+        {volumeInitializationRate = Prelude.pure newValue, ..}
+instance Property "VolumeSize" EbsProperty where
+  type PropertyType "VolumeSize" EbsProperty = Value Prelude.Integer
+  set newValue EbsProperty {..}
+    = EbsProperty {volumeSize = Prelude.pure newValue, ..}
+instance Property "VolumeType" EbsProperty where
+  type PropertyType "VolumeType" EbsProperty = Value Prelude.Text
+  set newValue EbsProperty {..}
+    = EbsProperty {volumeType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/EbsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/EbsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/EbsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.EbsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsProperty :: Prelude.Type
+instance ToResourceProperties EbsProperty
+instance Prelude.Eq EbsProperty
+instance Prelude.Show EbsProperty
+instance JSON.ToJSON EbsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdSpecificationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EC2.LaunchTemplate.EnaSrdSpecificationProperty (
+        module Exports, EnaSrdSpecificationProperty(..),
+        mkEnaSrdSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.EnaSrdUdpSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnaSrdSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-enasrdspecification.html>
+    EnaSrdSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-enasrdspecification.html#cfn-ec2-launchtemplate-enasrdspecification-enasrdenabled>
+                                 enaSrdEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-enasrdspecification.html#cfn-ec2-launchtemplate-enasrdspecification-enasrdudpspecification>
+                                 enaSrdUdpSpecification :: (Prelude.Maybe EnaSrdUdpSpecificationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnaSrdSpecificationProperty :: EnaSrdSpecificationProperty
+mkEnaSrdSpecificationProperty
+  = EnaSrdSpecificationProperty
+      {haddock_workaround_ = (), enaSrdEnabled = Prelude.Nothing,
+       enaSrdUdpSpecification = Prelude.Nothing}
+instance ToResourceProperties EnaSrdSpecificationProperty where
+  toResourceProperties EnaSrdSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.EnaSrdSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnaSrdEnabled" Prelude.<$> enaSrdEnabled,
+                            (JSON..=) "EnaSrdUdpSpecification"
+                              Prelude.<$> enaSrdUdpSpecification])}
+instance JSON.ToJSON EnaSrdSpecificationProperty where
+  toJSON EnaSrdSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnaSrdEnabled" Prelude.<$> enaSrdEnabled,
+               (JSON..=) "EnaSrdUdpSpecification"
+                 Prelude.<$> enaSrdUdpSpecification]))
+instance Property "EnaSrdEnabled" EnaSrdSpecificationProperty where
+  type PropertyType "EnaSrdEnabled" EnaSrdSpecificationProperty = Value Prelude.Bool
+  set newValue EnaSrdSpecificationProperty {..}
+    = EnaSrdSpecificationProperty
+        {enaSrdEnabled = Prelude.pure newValue, ..}
+instance Property "EnaSrdUdpSpecification" EnaSrdSpecificationProperty where
+  type PropertyType "EnaSrdUdpSpecification" EnaSrdSpecificationProperty = EnaSrdUdpSpecificationProperty
+  set newValue EnaSrdSpecificationProperty {..}
+    = EnaSrdSpecificationProperty
+        {enaSrdUdpSpecification = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.EnaSrdSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnaSrdSpecificationProperty :: Prelude.Type
+instance ToResourceProperties EnaSrdSpecificationProperty
+instance Prelude.Eq EnaSrdSpecificationProperty
+instance Prelude.Show EnaSrdSpecificationProperty
+instance JSON.ToJSON EnaSrdSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdUdpSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdUdpSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdUdpSpecificationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EC2.LaunchTemplate.EnaSrdUdpSpecificationProperty (
+        EnaSrdUdpSpecificationProperty(..),
+        mkEnaSrdUdpSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnaSrdUdpSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-enasrdudpspecification.html>
+    EnaSrdUdpSpecificationProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-enasrdudpspecification.html#cfn-ec2-launchtemplate-enasrdudpspecification-enasrdudpenabled>
+                                    enaSrdUdpEnabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnaSrdUdpSpecificationProperty :: EnaSrdUdpSpecificationProperty
+mkEnaSrdUdpSpecificationProperty
+  = EnaSrdUdpSpecificationProperty
+      {haddock_workaround_ = (), enaSrdUdpEnabled = Prelude.Nothing}
+instance ToResourceProperties EnaSrdUdpSpecificationProperty where
+  toResourceProperties EnaSrdUdpSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.EnaSrdUdpSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnaSrdUdpEnabled" Prelude.<$> enaSrdUdpEnabled])}
+instance JSON.ToJSON EnaSrdUdpSpecificationProperty where
+  toJSON EnaSrdUdpSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnaSrdUdpEnabled" Prelude.<$> enaSrdUdpEnabled]))
+instance Property "EnaSrdUdpEnabled" EnaSrdUdpSpecificationProperty where
+  type PropertyType "EnaSrdUdpEnabled" EnaSrdUdpSpecificationProperty = Value Prelude.Bool
+  set newValue EnaSrdUdpSpecificationProperty {..}
+    = EnaSrdUdpSpecificationProperty
+        {enaSrdUdpEnabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdUdpSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdUdpSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/EnaSrdUdpSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.EnaSrdUdpSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnaSrdUdpSpecificationProperty :: Prelude.Type
+instance ToResourceProperties EnaSrdUdpSpecificationProperty
+instance Prelude.Eq EnaSrdUdpSpecificationProperty
+instance Prelude.Show EnaSrdUdpSpecificationProperty
+instance JSON.ToJSON EnaSrdUdpSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/EnclaveOptionsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/EnclaveOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/EnclaveOptionsProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.EC2.LaunchTemplate.EnclaveOptionsProperty (
+        EnclaveOptionsProperty(..), mkEnclaveOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnclaveOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-enclaveoptions.html>
+    EnclaveOptionsProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-enclaveoptions.html#cfn-ec2-launchtemplate-enclaveoptions-enabled>
+                            enabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnclaveOptionsProperty :: EnclaveOptionsProperty
+mkEnclaveOptionsProperty
+  = EnclaveOptionsProperty
+      {haddock_workaround_ = (), enabled = Prelude.Nothing}
+instance ToResourceProperties EnclaveOptionsProperty where
+  toResourceProperties EnclaveOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.EnclaveOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Enabled" Prelude.<$> enabled])}
+instance JSON.ToJSON EnclaveOptionsProperty where
+  toJSON EnclaveOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Enabled" Prelude.<$> enabled]))
+instance Property "Enabled" EnclaveOptionsProperty where
+  type PropertyType "Enabled" EnclaveOptionsProperty = Value Prelude.Bool
+  set newValue EnclaveOptionsProperty {..}
+    = EnclaveOptionsProperty {enabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/EnclaveOptionsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/EnclaveOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/EnclaveOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.EnclaveOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnclaveOptionsProperty :: Prelude.Type
+instance ToResourceProperties EnclaveOptionsProperty
+instance Prelude.Eq EnclaveOptionsProperty
+instance Prelude.Show EnclaveOptionsProperty
+instance JSON.ToJSON EnclaveOptionsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/HibernationOptionsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/HibernationOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/HibernationOptionsProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.LaunchTemplate.HibernationOptionsProperty (
+        HibernationOptionsProperty(..), mkHibernationOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data HibernationOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-hibernationoptions.html>
+    HibernationOptionsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-hibernationoptions.html#cfn-ec2-launchtemplate-hibernationoptions-configured>
+                                configured :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkHibernationOptionsProperty :: HibernationOptionsProperty
+mkHibernationOptionsProperty
+  = HibernationOptionsProperty
+      {haddock_workaround_ = (), configured = Prelude.Nothing}
+instance ToResourceProperties HibernationOptionsProperty where
+  toResourceProperties HibernationOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.HibernationOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Configured" Prelude.<$> configured])}
+instance JSON.ToJSON HibernationOptionsProperty where
+  toJSON HibernationOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Configured" Prelude.<$> configured]))
+instance Property "Configured" HibernationOptionsProperty where
+  type PropertyType "Configured" HibernationOptionsProperty = Value Prelude.Bool
+  set newValue HibernationOptionsProperty {..}
+    = HibernationOptionsProperty
+        {configured = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/HibernationOptionsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/HibernationOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/HibernationOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.HibernationOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data HibernationOptionsProperty :: Prelude.Type
+instance ToResourceProperties HibernationOptionsProperty
+instance Prelude.Eq HibernationOptionsProperty
+instance Prelude.Show HibernationOptionsProperty
+instance JSON.ToJSON HibernationOptionsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/IamInstanceProfileProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/IamInstanceProfileProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/IamInstanceProfileProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.LaunchTemplate.IamInstanceProfileProperty (
+        IamInstanceProfileProperty(..), mkIamInstanceProfileProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IamInstanceProfileProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-iaminstanceprofile.html>
+    IamInstanceProfileProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-iaminstanceprofile.html#cfn-ec2-launchtemplate-iaminstanceprofile-arn>
+                                arn :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-iaminstanceprofile.html#cfn-ec2-launchtemplate-iaminstanceprofile-name>
+                                name :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIamInstanceProfileProperty :: IamInstanceProfileProperty
+mkIamInstanceProfileProperty
+  = IamInstanceProfileProperty
+      {haddock_workaround_ = (), arn = Prelude.Nothing,
+       name = Prelude.Nothing}
+instance ToResourceProperties IamInstanceProfileProperty where
+  toResourceProperties IamInstanceProfileProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.IamInstanceProfile",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Arn" Prelude.<$> arn,
+                            (JSON..=) "Name" Prelude.<$> name])}
+instance JSON.ToJSON IamInstanceProfileProperty where
+  toJSON IamInstanceProfileProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Arn" Prelude.<$> arn,
+               (JSON..=) "Name" Prelude.<$> name]))
+instance Property "Arn" IamInstanceProfileProperty where
+  type PropertyType "Arn" IamInstanceProfileProperty = Value Prelude.Text
+  set newValue IamInstanceProfileProperty {..}
+    = IamInstanceProfileProperty {arn = Prelude.pure newValue, ..}
+instance Property "Name" IamInstanceProfileProperty where
+  type PropertyType "Name" IamInstanceProfileProperty = Value Prelude.Text
+  set newValue IamInstanceProfileProperty {..}
+    = IamInstanceProfileProperty {name = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/IamInstanceProfileProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/IamInstanceProfileProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/IamInstanceProfileProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.IamInstanceProfileProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IamInstanceProfileProperty :: Prelude.Type
+instance ToResourceProperties IamInstanceProfileProperty
+instance Prelude.Eq IamInstanceProfileProperty
+instance Prelude.Show IamInstanceProfileProperty
+instance JSON.ToJSON IamInstanceProfileProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/InstanceMarketOptionsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/InstanceMarketOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/InstanceMarketOptionsProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.LaunchTemplate.InstanceMarketOptionsProperty (
+        module Exports, InstanceMarketOptionsProperty(..),
+        mkInstanceMarketOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.SpotOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceMarketOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancemarketoptions.html>
+    InstanceMarketOptionsProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancemarketoptions.html#cfn-ec2-launchtemplate-instancemarketoptions-markettype>
+                                   marketType :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancemarketoptions.html#cfn-ec2-launchtemplate-instancemarketoptions-spotoptions>
+                                   spotOptions :: (Prelude.Maybe SpotOptionsProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceMarketOptionsProperty :: InstanceMarketOptionsProperty
+mkInstanceMarketOptionsProperty
+  = InstanceMarketOptionsProperty
+      {haddock_workaround_ = (), marketType = Prelude.Nothing,
+       spotOptions = Prelude.Nothing}
+instance ToResourceProperties InstanceMarketOptionsProperty where
+  toResourceProperties InstanceMarketOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.InstanceMarketOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "MarketType" Prelude.<$> marketType,
+                            (JSON..=) "SpotOptions" Prelude.<$> spotOptions])}
+instance JSON.ToJSON InstanceMarketOptionsProperty where
+  toJSON InstanceMarketOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "MarketType" Prelude.<$> marketType,
+               (JSON..=) "SpotOptions" Prelude.<$> spotOptions]))
+instance Property "MarketType" InstanceMarketOptionsProperty where
+  type PropertyType "MarketType" InstanceMarketOptionsProperty = Value Prelude.Text
+  set newValue InstanceMarketOptionsProperty {..}
+    = InstanceMarketOptionsProperty
+        {marketType = Prelude.pure newValue, ..}
+instance Property "SpotOptions" InstanceMarketOptionsProperty where
+  type PropertyType "SpotOptions" InstanceMarketOptionsProperty = SpotOptionsProperty
+  set newValue InstanceMarketOptionsProperty {..}
+    = InstanceMarketOptionsProperty
+        {spotOptions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/InstanceMarketOptionsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/InstanceMarketOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/InstanceMarketOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.InstanceMarketOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceMarketOptionsProperty :: Prelude.Type
+instance ToResourceProperties InstanceMarketOptionsProperty
+instance Prelude.Eq InstanceMarketOptionsProperty
+instance Prelude.Show InstanceMarketOptionsProperty
+instance JSON.ToJSON InstanceMarketOptionsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/InstanceRequirementsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/InstanceRequirementsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/InstanceRequirementsProperty.hs
@@ -0,0 +1,309 @@
+module Stratosphere.EC2.LaunchTemplate.InstanceRequirementsProperty (
+        module Exports, InstanceRequirementsProperty(..),
+        mkInstanceRequirementsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.AcceleratorCountProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.AcceleratorTotalMemoryMiBProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.BaselineEbsBandwidthMbpsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.BaselinePerformanceFactorsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.MemoryGiBPerVCpuProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.MemoryMiBProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.NetworkBandwidthGbpsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.NetworkInterfaceCountProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.TotalLocalStorageGBProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.VCpuCountProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceRequirementsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html>
+    InstanceRequirementsProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-acceleratorcount>
+                                  acceleratorCount :: (Prelude.Maybe AcceleratorCountProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-acceleratormanufacturers>
+                                  acceleratorManufacturers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-acceleratornames>
+                                  acceleratorNames :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-acceleratortotalmemorymib>
+                                  acceleratorTotalMemoryMiB :: (Prelude.Maybe AcceleratorTotalMemoryMiBProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-acceleratortypes>
+                                  acceleratorTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-allowedinstancetypes>
+                                  allowedInstanceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-baremetal>
+                                  bareMetal :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-baselineebsbandwidthmbps>
+                                  baselineEbsBandwidthMbps :: (Prelude.Maybe BaselineEbsBandwidthMbpsProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-baselineperformancefactors>
+                                  baselinePerformanceFactors :: (Prelude.Maybe BaselinePerformanceFactorsProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-burstableperformance>
+                                  burstablePerformance :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-cpumanufacturers>
+                                  cpuManufacturers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-excludedinstancetypes>
+                                  excludedInstanceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-instancegenerations>
+                                  instanceGenerations :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-localstorage>
+                                  localStorage :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-localstoragetypes>
+                                  localStorageTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-maxspotpriceaspercentageofoptimalondemandprice>
+                                  maxSpotPriceAsPercentageOfOptimalOnDemandPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-memorygibpervcpu>
+                                  memoryGiBPerVCpu :: (Prelude.Maybe MemoryGiBPerVCpuProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-memorymib>
+                                  memoryMiB :: (Prelude.Maybe MemoryMiBProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-networkbandwidthgbps>
+                                  networkBandwidthGbps :: (Prelude.Maybe NetworkBandwidthGbpsProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-networkinterfacecount>
+                                  networkInterfaceCount :: (Prelude.Maybe NetworkInterfaceCountProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-ondemandmaxpricepercentageoverlowestprice>
+                                  onDemandMaxPricePercentageOverLowestPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-requirehibernatesupport>
+                                  requireHibernateSupport :: (Prelude.Maybe (Value Prelude.Bool)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-spotmaxpricepercentageoverlowestprice>
+                                  spotMaxPricePercentageOverLowestPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-totallocalstoragegb>
+                                  totalLocalStorageGB :: (Prelude.Maybe TotalLocalStorageGBProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-instancerequirements.html#cfn-ec2-launchtemplate-instancerequirements-vcpucount>
+                                  vCpuCount :: (Prelude.Maybe VCpuCountProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceRequirementsProperty :: InstanceRequirementsProperty
+mkInstanceRequirementsProperty
+  = InstanceRequirementsProperty
+      {haddock_workaround_ = (), acceleratorCount = Prelude.Nothing,
+       acceleratorManufacturers = Prelude.Nothing,
+       acceleratorNames = Prelude.Nothing,
+       acceleratorTotalMemoryMiB = Prelude.Nothing,
+       acceleratorTypes = Prelude.Nothing,
+       allowedInstanceTypes = Prelude.Nothing,
+       bareMetal = Prelude.Nothing,
+       baselineEbsBandwidthMbps = Prelude.Nothing,
+       baselinePerformanceFactors = Prelude.Nothing,
+       burstablePerformance = Prelude.Nothing,
+       cpuManufacturers = Prelude.Nothing,
+       excludedInstanceTypes = Prelude.Nothing,
+       instanceGenerations = Prelude.Nothing,
+       localStorage = Prelude.Nothing,
+       localStorageTypes = Prelude.Nothing,
+       maxSpotPriceAsPercentageOfOptimalOnDemandPrice = Prelude.Nothing,
+       memoryGiBPerVCpu = Prelude.Nothing, memoryMiB = Prelude.Nothing,
+       networkBandwidthGbps = Prelude.Nothing,
+       networkInterfaceCount = Prelude.Nothing,
+       onDemandMaxPricePercentageOverLowestPrice = Prelude.Nothing,
+       requireHibernateSupport = Prelude.Nothing,
+       spotMaxPricePercentageOverLowestPrice = Prelude.Nothing,
+       totalLocalStorageGB = Prelude.Nothing, vCpuCount = Prelude.Nothing}
+instance ToResourceProperties InstanceRequirementsProperty where
+  toResourceProperties InstanceRequirementsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.InstanceRequirements",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AcceleratorCount" Prelude.<$> acceleratorCount,
+                            (JSON..=) "AcceleratorManufacturers"
+                              Prelude.<$> acceleratorManufacturers,
+                            (JSON..=) "AcceleratorNames" Prelude.<$> acceleratorNames,
+                            (JSON..=) "AcceleratorTotalMemoryMiB"
+                              Prelude.<$> acceleratorTotalMemoryMiB,
+                            (JSON..=) "AcceleratorTypes" Prelude.<$> acceleratorTypes,
+                            (JSON..=) "AllowedInstanceTypes" Prelude.<$> allowedInstanceTypes,
+                            (JSON..=) "BareMetal" Prelude.<$> bareMetal,
+                            (JSON..=) "BaselineEbsBandwidthMbps"
+                              Prelude.<$> baselineEbsBandwidthMbps,
+                            (JSON..=) "BaselinePerformanceFactors"
+                              Prelude.<$> baselinePerformanceFactors,
+                            (JSON..=) "BurstablePerformance" Prelude.<$> burstablePerformance,
+                            (JSON..=) "CpuManufacturers" Prelude.<$> cpuManufacturers,
+                            (JSON..=) "ExcludedInstanceTypes"
+                              Prelude.<$> excludedInstanceTypes,
+                            (JSON..=) "InstanceGenerations" Prelude.<$> instanceGenerations,
+                            (JSON..=) "LocalStorage" Prelude.<$> localStorage,
+                            (JSON..=) "LocalStorageTypes" Prelude.<$> localStorageTypes,
+                            (JSON..=) "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice"
+                              Prelude.<$> maxSpotPriceAsPercentageOfOptimalOnDemandPrice,
+                            (JSON..=) "MemoryGiBPerVCpu" Prelude.<$> memoryGiBPerVCpu,
+                            (JSON..=) "MemoryMiB" Prelude.<$> memoryMiB,
+                            (JSON..=) "NetworkBandwidthGbps" Prelude.<$> networkBandwidthGbps,
+                            (JSON..=) "NetworkInterfaceCount"
+                              Prelude.<$> networkInterfaceCount,
+                            (JSON..=) "OnDemandMaxPricePercentageOverLowestPrice"
+                              Prelude.<$> onDemandMaxPricePercentageOverLowestPrice,
+                            (JSON..=) "RequireHibernateSupport"
+                              Prelude.<$> requireHibernateSupport,
+                            (JSON..=) "SpotMaxPricePercentageOverLowestPrice"
+                              Prelude.<$> spotMaxPricePercentageOverLowestPrice,
+                            (JSON..=) "TotalLocalStorageGB" Prelude.<$> totalLocalStorageGB,
+                            (JSON..=) "VCpuCount" Prelude.<$> vCpuCount])}
+instance JSON.ToJSON InstanceRequirementsProperty where
+  toJSON InstanceRequirementsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AcceleratorCount" Prelude.<$> acceleratorCount,
+               (JSON..=) "AcceleratorManufacturers"
+                 Prelude.<$> acceleratorManufacturers,
+               (JSON..=) "AcceleratorNames" Prelude.<$> acceleratorNames,
+               (JSON..=) "AcceleratorTotalMemoryMiB"
+                 Prelude.<$> acceleratorTotalMemoryMiB,
+               (JSON..=) "AcceleratorTypes" Prelude.<$> acceleratorTypes,
+               (JSON..=) "AllowedInstanceTypes" Prelude.<$> allowedInstanceTypes,
+               (JSON..=) "BareMetal" Prelude.<$> bareMetal,
+               (JSON..=) "BaselineEbsBandwidthMbps"
+                 Prelude.<$> baselineEbsBandwidthMbps,
+               (JSON..=) "BaselinePerformanceFactors"
+                 Prelude.<$> baselinePerformanceFactors,
+               (JSON..=) "BurstablePerformance" Prelude.<$> burstablePerformance,
+               (JSON..=) "CpuManufacturers" Prelude.<$> cpuManufacturers,
+               (JSON..=) "ExcludedInstanceTypes"
+                 Prelude.<$> excludedInstanceTypes,
+               (JSON..=) "InstanceGenerations" Prelude.<$> instanceGenerations,
+               (JSON..=) "LocalStorage" Prelude.<$> localStorage,
+               (JSON..=) "LocalStorageTypes" Prelude.<$> localStorageTypes,
+               (JSON..=) "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice"
+                 Prelude.<$> maxSpotPriceAsPercentageOfOptimalOnDemandPrice,
+               (JSON..=) "MemoryGiBPerVCpu" Prelude.<$> memoryGiBPerVCpu,
+               (JSON..=) "MemoryMiB" Prelude.<$> memoryMiB,
+               (JSON..=) "NetworkBandwidthGbps" Prelude.<$> networkBandwidthGbps,
+               (JSON..=) "NetworkInterfaceCount"
+                 Prelude.<$> networkInterfaceCount,
+               (JSON..=) "OnDemandMaxPricePercentageOverLowestPrice"
+                 Prelude.<$> onDemandMaxPricePercentageOverLowestPrice,
+               (JSON..=) "RequireHibernateSupport"
+                 Prelude.<$> requireHibernateSupport,
+               (JSON..=) "SpotMaxPricePercentageOverLowestPrice"
+                 Prelude.<$> spotMaxPricePercentageOverLowestPrice,
+               (JSON..=) "TotalLocalStorageGB" Prelude.<$> totalLocalStorageGB,
+               (JSON..=) "VCpuCount" Prelude.<$> vCpuCount]))
+instance Property "AcceleratorCount" InstanceRequirementsProperty where
+  type PropertyType "AcceleratorCount" InstanceRequirementsProperty = AcceleratorCountProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {acceleratorCount = Prelude.pure newValue, ..}
+instance Property "AcceleratorManufacturers" InstanceRequirementsProperty where
+  type PropertyType "AcceleratorManufacturers" InstanceRequirementsProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {acceleratorManufacturers = Prelude.pure newValue, ..}
+instance Property "AcceleratorNames" InstanceRequirementsProperty where
+  type PropertyType "AcceleratorNames" InstanceRequirementsProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {acceleratorNames = Prelude.pure newValue, ..}
+instance Property "AcceleratorTotalMemoryMiB" InstanceRequirementsProperty where
+  type PropertyType "AcceleratorTotalMemoryMiB" InstanceRequirementsProperty = AcceleratorTotalMemoryMiBProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {acceleratorTotalMemoryMiB = Prelude.pure newValue, ..}
+instance Property "AcceleratorTypes" InstanceRequirementsProperty where
+  type PropertyType "AcceleratorTypes" InstanceRequirementsProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {acceleratorTypes = Prelude.pure newValue, ..}
+instance Property "AllowedInstanceTypes" InstanceRequirementsProperty where
+  type PropertyType "AllowedInstanceTypes" InstanceRequirementsProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {allowedInstanceTypes = Prelude.pure newValue, ..}
+instance Property "BareMetal" InstanceRequirementsProperty where
+  type PropertyType "BareMetal" InstanceRequirementsProperty = Value Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {bareMetal = Prelude.pure newValue, ..}
+instance Property "BaselineEbsBandwidthMbps" InstanceRequirementsProperty where
+  type PropertyType "BaselineEbsBandwidthMbps" InstanceRequirementsProperty = BaselineEbsBandwidthMbpsProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {baselineEbsBandwidthMbps = Prelude.pure newValue, ..}
+instance Property "BaselinePerformanceFactors" InstanceRequirementsProperty where
+  type PropertyType "BaselinePerformanceFactors" InstanceRequirementsProperty = BaselinePerformanceFactorsProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {baselinePerformanceFactors = Prelude.pure newValue, ..}
+instance Property "BurstablePerformance" InstanceRequirementsProperty where
+  type PropertyType "BurstablePerformance" InstanceRequirementsProperty = Value Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {burstablePerformance = Prelude.pure newValue, ..}
+instance Property "CpuManufacturers" InstanceRequirementsProperty where
+  type PropertyType "CpuManufacturers" InstanceRequirementsProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {cpuManufacturers = Prelude.pure newValue, ..}
+instance Property "ExcludedInstanceTypes" InstanceRequirementsProperty where
+  type PropertyType "ExcludedInstanceTypes" InstanceRequirementsProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {excludedInstanceTypes = Prelude.pure newValue, ..}
+instance Property "InstanceGenerations" InstanceRequirementsProperty where
+  type PropertyType "InstanceGenerations" InstanceRequirementsProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {instanceGenerations = Prelude.pure newValue, ..}
+instance Property "LocalStorage" InstanceRequirementsProperty where
+  type PropertyType "LocalStorage" InstanceRequirementsProperty = Value Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {localStorage = Prelude.pure newValue, ..}
+instance Property "LocalStorageTypes" InstanceRequirementsProperty where
+  type PropertyType "LocalStorageTypes" InstanceRequirementsProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {localStorageTypes = Prelude.pure newValue, ..}
+instance Property "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" InstanceRequirementsProperty where
+  type PropertyType "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" InstanceRequirementsProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {maxSpotPriceAsPercentageOfOptimalOnDemandPrice = Prelude.pure
+                                                            newValue,
+         ..}
+instance Property "MemoryGiBPerVCpu" InstanceRequirementsProperty where
+  type PropertyType "MemoryGiBPerVCpu" InstanceRequirementsProperty = MemoryGiBPerVCpuProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {memoryGiBPerVCpu = Prelude.pure newValue, ..}
+instance Property "MemoryMiB" InstanceRequirementsProperty where
+  type PropertyType "MemoryMiB" InstanceRequirementsProperty = MemoryMiBProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {memoryMiB = Prelude.pure newValue, ..}
+instance Property "NetworkBandwidthGbps" InstanceRequirementsProperty where
+  type PropertyType "NetworkBandwidthGbps" InstanceRequirementsProperty = NetworkBandwidthGbpsProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {networkBandwidthGbps = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceCount" InstanceRequirementsProperty where
+  type PropertyType "NetworkInterfaceCount" InstanceRequirementsProperty = NetworkInterfaceCountProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {networkInterfaceCount = Prelude.pure newValue, ..}
+instance Property "OnDemandMaxPricePercentageOverLowestPrice" InstanceRequirementsProperty where
+  type PropertyType "OnDemandMaxPricePercentageOverLowestPrice" InstanceRequirementsProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {onDemandMaxPricePercentageOverLowestPrice = Prelude.pure newValue,
+         ..}
+instance Property "RequireHibernateSupport" InstanceRequirementsProperty where
+  type PropertyType "RequireHibernateSupport" InstanceRequirementsProperty = Value Prelude.Bool
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {requireHibernateSupport = Prelude.pure newValue, ..}
+instance Property "SpotMaxPricePercentageOverLowestPrice" InstanceRequirementsProperty where
+  type PropertyType "SpotMaxPricePercentageOverLowestPrice" InstanceRequirementsProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {spotMaxPricePercentageOverLowestPrice = Prelude.pure newValue, ..}
+instance Property "TotalLocalStorageGB" InstanceRequirementsProperty where
+  type PropertyType "TotalLocalStorageGB" InstanceRequirementsProperty = TotalLocalStorageGBProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {totalLocalStorageGB = Prelude.pure newValue, ..}
+instance Property "VCpuCount" InstanceRequirementsProperty where
+  type PropertyType "VCpuCount" InstanceRequirementsProperty = VCpuCountProperty
+  set newValue InstanceRequirementsProperty {..}
+    = InstanceRequirementsProperty
+        {vCpuCount = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/InstanceRequirementsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/InstanceRequirementsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/InstanceRequirementsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.InstanceRequirementsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceRequirementsProperty :: Prelude.Type
+instance ToResourceProperties InstanceRequirementsProperty
+instance Prelude.Eq InstanceRequirementsProperty
+instance Prelude.Show InstanceRequirementsProperty
+instance JSON.ToJSON InstanceRequirementsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/Ipv4PrefixSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/Ipv4PrefixSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/Ipv4PrefixSpecificationProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.LaunchTemplate.Ipv4PrefixSpecificationProperty (
+        Ipv4PrefixSpecificationProperty(..),
+        mkIpv4PrefixSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Ipv4PrefixSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ipv4prefixspecification.html>
+    Ipv4PrefixSpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ipv4prefixspecification.html#cfn-ec2-launchtemplate-ipv4prefixspecification-ipv4prefix>
+                                     ipv4Prefix :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpv4PrefixSpecificationProperty ::
+  Ipv4PrefixSpecificationProperty
+mkIpv4PrefixSpecificationProperty
+  = Ipv4PrefixSpecificationProperty
+      {haddock_workaround_ = (), ipv4Prefix = Prelude.Nothing}
+instance ToResourceProperties Ipv4PrefixSpecificationProperty where
+  toResourceProperties Ipv4PrefixSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.Ipv4PrefixSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Ipv4Prefix" Prelude.<$> ipv4Prefix])}
+instance JSON.ToJSON Ipv4PrefixSpecificationProperty where
+  toJSON Ipv4PrefixSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Ipv4Prefix" Prelude.<$> ipv4Prefix]))
+instance Property "Ipv4Prefix" Ipv4PrefixSpecificationProperty where
+  type PropertyType "Ipv4Prefix" Ipv4PrefixSpecificationProperty = Value Prelude.Text
+  set newValue Ipv4PrefixSpecificationProperty {..}
+    = Ipv4PrefixSpecificationProperty
+        {ipv4Prefix = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/Ipv4PrefixSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/Ipv4PrefixSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/Ipv4PrefixSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.Ipv4PrefixSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Ipv4PrefixSpecificationProperty :: Prelude.Type
+instance ToResourceProperties Ipv4PrefixSpecificationProperty
+instance Prelude.Eq Ipv4PrefixSpecificationProperty
+instance Prelude.Show Ipv4PrefixSpecificationProperty
+instance JSON.ToJSON Ipv4PrefixSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/Ipv6AddProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/Ipv6AddProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/Ipv6AddProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.EC2.LaunchTemplate.Ipv6AddProperty (
+        Ipv6AddProperty(..), mkIpv6AddProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Ipv6AddProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ipv6add.html>
+    Ipv6AddProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ipv6add.html#cfn-ec2-launchtemplate-ipv6add-ipv6address>
+                     ipv6Address :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpv6AddProperty :: Ipv6AddProperty
+mkIpv6AddProperty
+  = Ipv6AddProperty
+      {haddock_workaround_ = (), ipv6Address = Prelude.Nothing}
+instance ToResourceProperties Ipv6AddProperty where
+  toResourceProperties Ipv6AddProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.Ipv6Add",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Ipv6Address" Prelude.<$> ipv6Address])}
+instance JSON.ToJSON Ipv6AddProperty where
+  toJSON Ipv6AddProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Ipv6Address" Prelude.<$> ipv6Address]))
+instance Property "Ipv6Address" Ipv6AddProperty where
+  type PropertyType "Ipv6Address" Ipv6AddProperty = Value Prelude.Text
+  set newValue Ipv6AddProperty {..}
+    = Ipv6AddProperty {ipv6Address = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/Ipv6AddProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/Ipv6AddProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/Ipv6AddProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.Ipv6AddProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Ipv6AddProperty :: Prelude.Type
+instance ToResourceProperties Ipv6AddProperty
+instance Prelude.Eq Ipv6AddProperty
+instance Prelude.Show Ipv6AddProperty
+instance JSON.ToJSON Ipv6AddProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/Ipv6PrefixSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/Ipv6PrefixSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/Ipv6PrefixSpecificationProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.LaunchTemplate.Ipv6PrefixSpecificationProperty (
+        Ipv6PrefixSpecificationProperty(..),
+        mkIpv6PrefixSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Ipv6PrefixSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ipv6prefixspecification.html>
+    Ipv6PrefixSpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-ipv6prefixspecification.html#cfn-ec2-launchtemplate-ipv6prefixspecification-ipv6prefix>
+                                     ipv6Prefix :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpv6PrefixSpecificationProperty ::
+  Ipv6PrefixSpecificationProperty
+mkIpv6PrefixSpecificationProperty
+  = Ipv6PrefixSpecificationProperty
+      {haddock_workaround_ = (), ipv6Prefix = Prelude.Nothing}
+instance ToResourceProperties Ipv6PrefixSpecificationProperty where
+  toResourceProperties Ipv6PrefixSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.Ipv6PrefixSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Ipv6Prefix" Prelude.<$> ipv6Prefix])}
+instance JSON.ToJSON Ipv6PrefixSpecificationProperty where
+  toJSON Ipv6PrefixSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Ipv6Prefix" Prelude.<$> ipv6Prefix]))
+instance Property "Ipv6Prefix" Ipv6PrefixSpecificationProperty where
+  type PropertyType "Ipv6Prefix" Ipv6PrefixSpecificationProperty = Value Prelude.Text
+  set newValue Ipv6PrefixSpecificationProperty {..}
+    = Ipv6PrefixSpecificationProperty
+        {ipv6Prefix = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/Ipv6PrefixSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/Ipv6PrefixSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/Ipv6PrefixSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.Ipv6PrefixSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Ipv6PrefixSpecificationProperty :: Prelude.Type
+instance ToResourceProperties Ipv6PrefixSpecificationProperty
+instance Prelude.Eq Ipv6PrefixSpecificationProperty
+instance Prelude.Show Ipv6PrefixSpecificationProperty
+instance JSON.ToJSON Ipv6PrefixSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateDataProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateDataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateDataProperty.hs
@@ -0,0 +1,349 @@
+module Stratosphere.EC2.LaunchTemplate.LaunchTemplateDataProperty (
+        module Exports, LaunchTemplateDataProperty(..),
+        mkLaunchTemplateDataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.BlockDeviceMappingProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.CapacityReservationSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.CpuOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.CreditSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.EnclaveOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.HibernationOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.IamInstanceProfileProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.InstanceMarketOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.InstanceRequirementsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.LicenseSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.MaintenanceOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.MetadataOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.MonitoringProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.NetworkInterfaceProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.NetworkPerformanceOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.PlacementProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.PrivateDnsNameOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.TagSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LaunchTemplateDataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html>
+    LaunchTemplateDataProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-blockdevicemappings>
+                                blockDeviceMappings :: (Prelude.Maybe [BlockDeviceMappingProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-capacityreservationspecification>
+                                capacityReservationSpecification :: (Prelude.Maybe CapacityReservationSpecificationProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-cpuoptions>
+                                cpuOptions :: (Prelude.Maybe CpuOptionsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-creditspecification>
+                                creditSpecification :: (Prelude.Maybe CreditSpecificationProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-disableapistop>
+                                disableApiStop :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-disableapitermination>
+                                disableApiTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-ebsoptimized>
+                                ebsOptimized :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-enclaveoptions>
+                                enclaveOptions :: (Prelude.Maybe EnclaveOptionsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-hibernationoptions>
+                                hibernationOptions :: (Prelude.Maybe HibernationOptionsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-iaminstanceprofile>
+                                iamInstanceProfile :: (Prelude.Maybe IamInstanceProfileProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-imageid>
+                                imageId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-instanceinitiatedshutdownbehavior>
+                                instanceInitiatedShutdownBehavior :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-instancemarketoptions>
+                                instanceMarketOptions :: (Prelude.Maybe InstanceMarketOptionsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-instancerequirements>
+                                instanceRequirements :: (Prelude.Maybe InstanceRequirementsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-instancetype>
+                                instanceType :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-kernelid>
+                                kernelId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-keyname>
+                                keyName :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-licensespecifications>
+                                licenseSpecifications :: (Prelude.Maybe [LicenseSpecificationProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-maintenanceoptions>
+                                maintenanceOptions :: (Prelude.Maybe MaintenanceOptionsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-metadataoptions>
+                                metadataOptions :: (Prelude.Maybe MetadataOptionsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-monitoring>
+                                monitoring :: (Prelude.Maybe MonitoringProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-networkinterfaces>
+                                networkInterfaces :: (Prelude.Maybe [NetworkInterfaceProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-networkperformanceoptions>
+                                networkPerformanceOptions :: (Prelude.Maybe NetworkPerformanceOptionsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-placement>
+                                placement :: (Prelude.Maybe PlacementProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-privatednsnameoptions>
+                                privateDnsNameOptions :: (Prelude.Maybe PrivateDnsNameOptionsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-ramdiskid>
+                                ramDiskId :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-securitygroupids>
+                                securityGroupIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-securitygroups>
+                                securityGroups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-tagspecifications>
+                                tagSpecifications :: (Prelude.Maybe [TagSpecificationProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html#cfn-ec2-launchtemplate-launchtemplatedata-userdata>
+                                userData :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLaunchTemplateDataProperty :: LaunchTemplateDataProperty
+mkLaunchTemplateDataProperty
+  = LaunchTemplateDataProperty
+      {haddock_workaround_ = (), blockDeviceMappings = Prelude.Nothing,
+       capacityReservationSpecification = Prelude.Nothing,
+       cpuOptions = Prelude.Nothing,
+       creditSpecification = Prelude.Nothing,
+       disableApiStop = Prelude.Nothing,
+       disableApiTermination = Prelude.Nothing,
+       ebsOptimized = Prelude.Nothing, enclaveOptions = Prelude.Nothing,
+       hibernationOptions = Prelude.Nothing,
+       iamInstanceProfile = Prelude.Nothing, imageId = Prelude.Nothing,
+       instanceInitiatedShutdownBehavior = Prelude.Nothing,
+       instanceMarketOptions = Prelude.Nothing,
+       instanceRequirements = Prelude.Nothing,
+       instanceType = Prelude.Nothing, kernelId = Prelude.Nothing,
+       keyName = Prelude.Nothing, licenseSpecifications = Prelude.Nothing,
+       maintenanceOptions = Prelude.Nothing,
+       metadataOptions = Prelude.Nothing, monitoring = Prelude.Nothing,
+       networkInterfaces = Prelude.Nothing,
+       networkPerformanceOptions = Prelude.Nothing,
+       placement = Prelude.Nothing,
+       privateDnsNameOptions = Prelude.Nothing,
+       ramDiskId = Prelude.Nothing, securityGroupIds = Prelude.Nothing,
+       securityGroups = Prelude.Nothing,
+       tagSpecifications = Prelude.Nothing, userData = Prelude.Nothing}
+instance ToResourceProperties LaunchTemplateDataProperty where
+  toResourceProperties LaunchTemplateDataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.LaunchTemplateData",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BlockDeviceMappings" Prelude.<$> blockDeviceMappings,
+                            (JSON..=) "CapacityReservationSpecification"
+                              Prelude.<$> capacityReservationSpecification,
+                            (JSON..=) "CpuOptions" Prelude.<$> cpuOptions,
+                            (JSON..=) "CreditSpecification" Prelude.<$> creditSpecification,
+                            (JSON..=) "DisableApiStop" Prelude.<$> disableApiStop,
+                            (JSON..=) "DisableApiTermination"
+                              Prelude.<$> disableApiTermination,
+                            (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+                            (JSON..=) "EnclaveOptions" Prelude.<$> enclaveOptions,
+                            (JSON..=) "HibernationOptions" Prelude.<$> hibernationOptions,
+                            (JSON..=) "IamInstanceProfile" Prelude.<$> iamInstanceProfile,
+                            (JSON..=) "ImageId" Prelude.<$> imageId,
+                            (JSON..=) "InstanceInitiatedShutdownBehavior"
+                              Prelude.<$> instanceInitiatedShutdownBehavior,
+                            (JSON..=) "InstanceMarketOptions"
+                              Prelude.<$> instanceMarketOptions,
+                            (JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+                            (JSON..=) "InstanceType" Prelude.<$> instanceType,
+                            (JSON..=) "KernelId" Prelude.<$> kernelId,
+                            (JSON..=) "KeyName" Prelude.<$> keyName,
+                            (JSON..=) "LicenseSpecifications"
+                              Prelude.<$> licenseSpecifications,
+                            (JSON..=) "MaintenanceOptions" Prelude.<$> maintenanceOptions,
+                            (JSON..=) "MetadataOptions" Prelude.<$> metadataOptions,
+                            (JSON..=) "Monitoring" Prelude.<$> monitoring,
+                            (JSON..=) "NetworkInterfaces" Prelude.<$> networkInterfaces,
+                            (JSON..=) "NetworkPerformanceOptions"
+                              Prelude.<$> networkPerformanceOptions,
+                            (JSON..=) "Placement" Prelude.<$> placement,
+                            (JSON..=) "PrivateDnsNameOptions"
+                              Prelude.<$> privateDnsNameOptions,
+                            (JSON..=) "RamDiskId" Prelude.<$> ramDiskId,
+                            (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                            (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+                            (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                            (JSON..=) "UserData" Prelude.<$> userData])}
+instance JSON.ToJSON LaunchTemplateDataProperty where
+  toJSON LaunchTemplateDataProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BlockDeviceMappings" Prelude.<$> blockDeviceMappings,
+               (JSON..=) "CapacityReservationSpecification"
+                 Prelude.<$> capacityReservationSpecification,
+               (JSON..=) "CpuOptions" Prelude.<$> cpuOptions,
+               (JSON..=) "CreditSpecification" Prelude.<$> creditSpecification,
+               (JSON..=) "DisableApiStop" Prelude.<$> disableApiStop,
+               (JSON..=) "DisableApiTermination"
+                 Prelude.<$> disableApiTermination,
+               (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+               (JSON..=) "EnclaveOptions" Prelude.<$> enclaveOptions,
+               (JSON..=) "HibernationOptions" Prelude.<$> hibernationOptions,
+               (JSON..=) "IamInstanceProfile" Prelude.<$> iamInstanceProfile,
+               (JSON..=) "ImageId" Prelude.<$> imageId,
+               (JSON..=) "InstanceInitiatedShutdownBehavior"
+                 Prelude.<$> instanceInitiatedShutdownBehavior,
+               (JSON..=) "InstanceMarketOptions"
+                 Prelude.<$> instanceMarketOptions,
+               (JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+               (JSON..=) "InstanceType" Prelude.<$> instanceType,
+               (JSON..=) "KernelId" Prelude.<$> kernelId,
+               (JSON..=) "KeyName" Prelude.<$> keyName,
+               (JSON..=) "LicenseSpecifications"
+                 Prelude.<$> licenseSpecifications,
+               (JSON..=) "MaintenanceOptions" Prelude.<$> maintenanceOptions,
+               (JSON..=) "MetadataOptions" Prelude.<$> metadataOptions,
+               (JSON..=) "Monitoring" Prelude.<$> monitoring,
+               (JSON..=) "NetworkInterfaces" Prelude.<$> networkInterfaces,
+               (JSON..=) "NetworkPerformanceOptions"
+                 Prelude.<$> networkPerformanceOptions,
+               (JSON..=) "Placement" Prelude.<$> placement,
+               (JSON..=) "PrivateDnsNameOptions"
+                 Prelude.<$> privateDnsNameOptions,
+               (JSON..=) "RamDiskId" Prelude.<$> ramDiskId,
+               (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+               (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+               (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+               (JSON..=) "UserData" Prelude.<$> userData]))
+instance Property "BlockDeviceMappings" LaunchTemplateDataProperty where
+  type PropertyType "BlockDeviceMappings" LaunchTemplateDataProperty = [BlockDeviceMappingProperty]
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {blockDeviceMappings = Prelude.pure newValue, ..}
+instance Property "CapacityReservationSpecification" LaunchTemplateDataProperty where
+  type PropertyType "CapacityReservationSpecification" LaunchTemplateDataProperty = CapacityReservationSpecificationProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {capacityReservationSpecification = Prelude.pure newValue, ..}
+instance Property "CpuOptions" LaunchTemplateDataProperty where
+  type PropertyType "CpuOptions" LaunchTemplateDataProperty = CpuOptionsProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {cpuOptions = Prelude.pure newValue, ..}
+instance Property "CreditSpecification" LaunchTemplateDataProperty where
+  type PropertyType "CreditSpecification" LaunchTemplateDataProperty = CreditSpecificationProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {creditSpecification = Prelude.pure newValue, ..}
+instance Property "DisableApiStop" LaunchTemplateDataProperty where
+  type PropertyType "DisableApiStop" LaunchTemplateDataProperty = Value Prelude.Bool
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {disableApiStop = Prelude.pure newValue, ..}
+instance Property "DisableApiTermination" LaunchTemplateDataProperty where
+  type PropertyType "DisableApiTermination" LaunchTemplateDataProperty = Value Prelude.Bool
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {disableApiTermination = Prelude.pure newValue, ..}
+instance Property "EbsOptimized" LaunchTemplateDataProperty where
+  type PropertyType "EbsOptimized" LaunchTemplateDataProperty = Value Prelude.Bool
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {ebsOptimized = Prelude.pure newValue, ..}
+instance Property "EnclaveOptions" LaunchTemplateDataProperty where
+  type PropertyType "EnclaveOptions" LaunchTemplateDataProperty = EnclaveOptionsProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {enclaveOptions = Prelude.pure newValue, ..}
+instance Property "HibernationOptions" LaunchTemplateDataProperty where
+  type PropertyType "HibernationOptions" LaunchTemplateDataProperty = HibernationOptionsProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {hibernationOptions = Prelude.pure newValue, ..}
+instance Property "IamInstanceProfile" LaunchTemplateDataProperty where
+  type PropertyType "IamInstanceProfile" LaunchTemplateDataProperty = IamInstanceProfileProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {iamInstanceProfile = Prelude.pure newValue, ..}
+instance Property "ImageId" LaunchTemplateDataProperty where
+  type PropertyType "ImageId" LaunchTemplateDataProperty = Value Prelude.Text
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty {imageId = Prelude.pure newValue, ..}
+instance Property "InstanceInitiatedShutdownBehavior" LaunchTemplateDataProperty where
+  type PropertyType "InstanceInitiatedShutdownBehavior" LaunchTemplateDataProperty = Value Prelude.Text
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {instanceInitiatedShutdownBehavior = Prelude.pure newValue, ..}
+instance Property "InstanceMarketOptions" LaunchTemplateDataProperty where
+  type PropertyType "InstanceMarketOptions" LaunchTemplateDataProperty = InstanceMarketOptionsProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {instanceMarketOptions = Prelude.pure newValue, ..}
+instance Property "InstanceRequirements" LaunchTemplateDataProperty where
+  type PropertyType "InstanceRequirements" LaunchTemplateDataProperty = InstanceRequirementsProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {instanceRequirements = Prelude.pure newValue, ..}
+instance Property "InstanceType" LaunchTemplateDataProperty where
+  type PropertyType "InstanceType" LaunchTemplateDataProperty = Value Prelude.Text
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {instanceType = Prelude.pure newValue, ..}
+instance Property "KernelId" LaunchTemplateDataProperty where
+  type PropertyType "KernelId" LaunchTemplateDataProperty = Value Prelude.Text
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty {kernelId = Prelude.pure newValue, ..}
+instance Property "KeyName" LaunchTemplateDataProperty where
+  type PropertyType "KeyName" LaunchTemplateDataProperty = Value Prelude.Text
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty {keyName = Prelude.pure newValue, ..}
+instance Property "LicenseSpecifications" LaunchTemplateDataProperty where
+  type PropertyType "LicenseSpecifications" LaunchTemplateDataProperty = [LicenseSpecificationProperty]
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {licenseSpecifications = Prelude.pure newValue, ..}
+instance Property "MaintenanceOptions" LaunchTemplateDataProperty where
+  type PropertyType "MaintenanceOptions" LaunchTemplateDataProperty = MaintenanceOptionsProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {maintenanceOptions = Prelude.pure newValue, ..}
+instance Property "MetadataOptions" LaunchTemplateDataProperty where
+  type PropertyType "MetadataOptions" LaunchTemplateDataProperty = MetadataOptionsProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {metadataOptions = Prelude.pure newValue, ..}
+instance Property "Monitoring" LaunchTemplateDataProperty where
+  type PropertyType "Monitoring" LaunchTemplateDataProperty = MonitoringProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {monitoring = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaces" LaunchTemplateDataProperty where
+  type PropertyType "NetworkInterfaces" LaunchTemplateDataProperty = [NetworkInterfaceProperty]
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {networkInterfaces = Prelude.pure newValue, ..}
+instance Property "NetworkPerformanceOptions" LaunchTemplateDataProperty where
+  type PropertyType "NetworkPerformanceOptions" LaunchTemplateDataProperty = NetworkPerformanceOptionsProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {networkPerformanceOptions = Prelude.pure newValue, ..}
+instance Property "Placement" LaunchTemplateDataProperty where
+  type PropertyType "Placement" LaunchTemplateDataProperty = PlacementProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {placement = Prelude.pure newValue, ..}
+instance Property "PrivateDnsNameOptions" LaunchTemplateDataProperty where
+  type PropertyType "PrivateDnsNameOptions" LaunchTemplateDataProperty = PrivateDnsNameOptionsProperty
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {privateDnsNameOptions = Prelude.pure newValue, ..}
+instance Property "RamDiskId" LaunchTemplateDataProperty where
+  type PropertyType "RamDiskId" LaunchTemplateDataProperty = Value Prelude.Text
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {ramDiskId = Prelude.pure newValue, ..}
+instance Property "SecurityGroupIds" LaunchTemplateDataProperty where
+  type PropertyType "SecurityGroupIds" LaunchTemplateDataProperty = ValueList Prelude.Text
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {securityGroupIds = Prelude.pure newValue, ..}
+instance Property "SecurityGroups" LaunchTemplateDataProperty where
+  type PropertyType "SecurityGroups" LaunchTemplateDataProperty = ValueList Prelude.Text
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {securityGroups = Prelude.pure newValue, ..}
+instance Property "TagSpecifications" LaunchTemplateDataProperty where
+  type PropertyType "TagSpecifications" LaunchTemplateDataProperty = [TagSpecificationProperty]
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty
+        {tagSpecifications = Prelude.pure newValue, ..}
+instance Property "UserData" LaunchTemplateDataProperty where
+  type PropertyType "UserData" LaunchTemplateDataProperty = Value Prelude.Text
+  set newValue LaunchTemplateDataProperty {..}
+    = LaunchTemplateDataProperty {userData = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateDataProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateDataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateDataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.LaunchTemplateDataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LaunchTemplateDataProperty :: Prelude.Type
+instance ToResourceProperties LaunchTemplateDataProperty
+instance Prelude.Eq LaunchTemplateDataProperty
+instance Prelude.Show LaunchTemplateDataProperty
+instance JSON.ToJSON LaunchTemplateDataProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateTagSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateTagSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateTagSpecificationProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.EC2.LaunchTemplate.LaunchTemplateTagSpecificationProperty (
+        LaunchTemplateTagSpecificationProperty(..),
+        mkLaunchTemplateTagSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LaunchTemplateTagSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatetagspecification.html>
+    LaunchTemplateTagSpecificationProperty {haddock_workaround_ :: (),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatetagspecification.html#cfn-ec2-launchtemplate-launchtemplatetagspecification-resourcetype>
+                                            resourceType :: (Prelude.Maybe (Value Prelude.Text)),
+                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatetagspecification.html#cfn-ec2-launchtemplate-launchtemplatetagspecification-tags>
+                                            tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLaunchTemplateTagSpecificationProperty ::
+  LaunchTemplateTagSpecificationProperty
+mkLaunchTemplateTagSpecificationProperty
+  = LaunchTemplateTagSpecificationProperty
+      {haddock_workaround_ = (), resourceType = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties LaunchTemplateTagSpecificationProperty where
+  toResourceProperties LaunchTemplateTagSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.LaunchTemplateTagSpecification",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON LaunchTemplateTagSpecificationProperty where
+  toJSON LaunchTemplateTagSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ResourceType" LaunchTemplateTagSpecificationProperty where
+  type PropertyType "ResourceType" LaunchTemplateTagSpecificationProperty = Value Prelude.Text
+  set newValue LaunchTemplateTagSpecificationProperty {..}
+    = LaunchTemplateTagSpecificationProperty
+        {resourceType = Prelude.pure newValue, ..}
+instance Property "Tags" LaunchTemplateTagSpecificationProperty where
+  type PropertyType "Tags" LaunchTemplateTagSpecificationProperty = [Tag]
+  set newValue LaunchTemplateTagSpecificationProperty {..}
+    = LaunchTemplateTagSpecificationProperty
+        {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateTagSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateTagSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/LaunchTemplateTagSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.LaunchTemplateTagSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LaunchTemplateTagSpecificationProperty :: Prelude.Type
+instance ToResourceProperties LaunchTemplateTagSpecificationProperty
+instance Prelude.Eq LaunchTemplateTagSpecificationProperty
+instance Prelude.Show LaunchTemplateTagSpecificationProperty
+instance JSON.ToJSON LaunchTemplateTagSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/LicenseSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/LicenseSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/LicenseSpecificationProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.EC2.LaunchTemplate.LicenseSpecificationProperty (
+        LicenseSpecificationProperty(..), mkLicenseSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LicenseSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-licensespecification.html>
+    LicenseSpecificationProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-licensespecification.html#cfn-ec2-launchtemplate-licensespecification-licenseconfigurationarn>
+                                  licenseConfigurationArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLicenseSpecificationProperty :: LicenseSpecificationProperty
+mkLicenseSpecificationProperty
+  = LicenseSpecificationProperty
+      {haddock_workaround_ = (),
+       licenseConfigurationArn = Prelude.Nothing}
+instance ToResourceProperties LicenseSpecificationProperty where
+  toResourceProperties LicenseSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.LicenseSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LicenseConfigurationArn"
+                              Prelude.<$> licenseConfigurationArn])}
+instance JSON.ToJSON LicenseSpecificationProperty where
+  toJSON LicenseSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LicenseConfigurationArn"
+                 Prelude.<$> licenseConfigurationArn]))
+instance Property "LicenseConfigurationArn" LicenseSpecificationProperty where
+  type PropertyType "LicenseConfigurationArn" LicenseSpecificationProperty = Value Prelude.Text
+  set newValue LicenseSpecificationProperty {..}
+    = LicenseSpecificationProperty
+        {licenseConfigurationArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/LicenseSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/LicenseSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/LicenseSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.LicenseSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LicenseSpecificationProperty :: Prelude.Type
+instance ToResourceProperties LicenseSpecificationProperty
+instance Prelude.Eq LicenseSpecificationProperty
+instance Prelude.Show LicenseSpecificationProperty
+instance JSON.ToJSON LicenseSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MaintenanceOptionsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/MaintenanceOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MaintenanceOptionsProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.LaunchTemplate.MaintenanceOptionsProperty (
+        MaintenanceOptionsProperty(..), mkMaintenanceOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MaintenanceOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-maintenanceoptions.html>
+    MaintenanceOptionsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-maintenanceoptions.html#cfn-ec2-launchtemplate-maintenanceoptions-autorecovery>
+                                autoRecovery :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMaintenanceOptionsProperty :: MaintenanceOptionsProperty
+mkMaintenanceOptionsProperty
+  = MaintenanceOptionsProperty
+      {haddock_workaround_ = (), autoRecovery = Prelude.Nothing}
+instance ToResourceProperties MaintenanceOptionsProperty where
+  toResourceProperties MaintenanceOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.MaintenanceOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AutoRecovery" Prelude.<$> autoRecovery])}
+instance JSON.ToJSON MaintenanceOptionsProperty where
+  toJSON MaintenanceOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AutoRecovery" Prelude.<$> autoRecovery]))
+instance Property "AutoRecovery" MaintenanceOptionsProperty where
+  type PropertyType "AutoRecovery" MaintenanceOptionsProperty = Value Prelude.Text
+  set newValue MaintenanceOptionsProperty {..}
+    = MaintenanceOptionsProperty
+        {autoRecovery = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MaintenanceOptionsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/MaintenanceOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MaintenanceOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.MaintenanceOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MaintenanceOptionsProperty :: Prelude.Type
+instance ToResourceProperties MaintenanceOptionsProperty
+instance Prelude.Eq MaintenanceOptionsProperty
+instance Prelude.Show MaintenanceOptionsProperty
+instance JSON.ToJSON MaintenanceOptionsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MemoryGiBPerVCpuProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/MemoryGiBPerVCpuProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MemoryGiBPerVCpuProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.LaunchTemplate.MemoryGiBPerVCpuProperty (
+        MemoryGiBPerVCpuProperty(..), mkMemoryGiBPerVCpuProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MemoryGiBPerVCpuProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-memorygibpervcpu.html>
+    MemoryGiBPerVCpuProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-memorygibpervcpu.html#cfn-ec2-launchtemplate-memorygibpervcpu-max>
+                              max :: (Prelude.Maybe (Value Prelude.Double)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-memorygibpervcpu.html#cfn-ec2-launchtemplate-memorygibpervcpu-min>
+                              min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMemoryGiBPerVCpuProperty :: MemoryGiBPerVCpuProperty
+mkMemoryGiBPerVCpuProperty
+  = MemoryGiBPerVCpuProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties MemoryGiBPerVCpuProperty where
+  toResourceProperties MemoryGiBPerVCpuProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.MemoryGiBPerVCpu",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON MemoryGiBPerVCpuProperty where
+  toJSON MemoryGiBPerVCpuProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" MemoryGiBPerVCpuProperty where
+  type PropertyType "Max" MemoryGiBPerVCpuProperty = Value Prelude.Double
+  set newValue MemoryGiBPerVCpuProperty {..}
+    = MemoryGiBPerVCpuProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" MemoryGiBPerVCpuProperty where
+  type PropertyType "Min" MemoryGiBPerVCpuProperty = Value Prelude.Double
+  set newValue MemoryGiBPerVCpuProperty {..}
+    = MemoryGiBPerVCpuProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MemoryGiBPerVCpuProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/MemoryGiBPerVCpuProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MemoryGiBPerVCpuProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.MemoryGiBPerVCpuProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MemoryGiBPerVCpuProperty :: Prelude.Type
+instance ToResourceProperties MemoryGiBPerVCpuProperty
+instance Prelude.Eq MemoryGiBPerVCpuProperty
+instance Prelude.Show MemoryGiBPerVCpuProperty
+instance JSON.ToJSON MemoryGiBPerVCpuProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MemoryMiBProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/MemoryMiBProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MemoryMiBProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.LaunchTemplate.MemoryMiBProperty (
+        MemoryMiBProperty(..), mkMemoryMiBProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MemoryMiBProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-memorymib.html>
+    MemoryMiBProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-memorymib.html#cfn-ec2-launchtemplate-memorymib-max>
+                       max :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-memorymib.html#cfn-ec2-launchtemplate-memorymib-min>
+                       min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMemoryMiBProperty :: MemoryMiBProperty
+mkMemoryMiBProperty
+  = MemoryMiBProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties MemoryMiBProperty where
+  toResourceProperties MemoryMiBProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.MemoryMiB",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON MemoryMiBProperty where
+  toJSON MemoryMiBProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" MemoryMiBProperty where
+  type PropertyType "Max" MemoryMiBProperty = Value Prelude.Integer
+  set newValue MemoryMiBProperty {..}
+    = MemoryMiBProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" MemoryMiBProperty where
+  type PropertyType "Min" MemoryMiBProperty = Value Prelude.Integer
+  set newValue MemoryMiBProperty {..}
+    = MemoryMiBProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MemoryMiBProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/MemoryMiBProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MemoryMiBProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.MemoryMiBProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MemoryMiBProperty :: Prelude.Type
+instance ToResourceProperties MemoryMiBProperty
+instance Prelude.Eq MemoryMiBProperty
+instance Prelude.Show MemoryMiBProperty
+instance JSON.ToJSON MemoryMiBProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MetadataOptionsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/MetadataOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MetadataOptionsProperty.hs
@@ -0,0 +1,80 @@
+module Stratosphere.EC2.LaunchTemplate.MetadataOptionsProperty (
+        MetadataOptionsProperty(..), mkMetadataOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MetadataOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html>
+    MetadataOptionsProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html#cfn-ec2-launchtemplate-metadataoptions-httpendpoint>
+                             httpEndpoint :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html#cfn-ec2-launchtemplate-metadataoptions-httpprotocolipv6>
+                             httpProtocolIpv6 :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html#cfn-ec2-launchtemplate-metadataoptions-httpputresponsehoplimit>
+                             httpPutResponseHopLimit :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html#cfn-ec2-launchtemplate-metadataoptions-httptokens>
+                             httpTokens :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html#cfn-ec2-launchtemplate-metadataoptions-instancemetadatatags>
+                             instanceMetadataTags :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMetadataOptionsProperty :: MetadataOptionsProperty
+mkMetadataOptionsProperty
+  = MetadataOptionsProperty
+      {haddock_workaround_ = (), httpEndpoint = Prelude.Nothing,
+       httpProtocolIpv6 = Prelude.Nothing,
+       httpPutResponseHopLimit = Prelude.Nothing,
+       httpTokens = Prelude.Nothing,
+       instanceMetadataTags = Prelude.Nothing}
+instance ToResourceProperties MetadataOptionsProperty where
+  toResourceProperties MetadataOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.MetadataOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "HttpEndpoint" Prelude.<$> httpEndpoint,
+                            (JSON..=) "HttpProtocolIpv6" Prelude.<$> httpProtocolIpv6,
+                            (JSON..=) "HttpPutResponseHopLimit"
+                              Prelude.<$> httpPutResponseHopLimit,
+                            (JSON..=) "HttpTokens" Prelude.<$> httpTokens,
+                            (JSON..=) "InstanceMetadataTags"
+                              Prelude.<$> instanceMetadataTags])}
+instance JSON.ToJSON MetadataOptionsProperty where
+  toJSON MetadataOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "HttpEndpoint" Prelude.<$> httpEndpoint,
+               (JSON..=) "HttpProtocolIpv6" Prelude.<$> httpProtocolIpv6,
+               (JSON..=) "HttpPutResponseHopLimit"
+                 Prelude.<$> httpPutResponseHopLimit,
+               (JSON..=) "HttpTokens" Prelude.<$> httpTokens,
+               (JSON..=) "InstanceMetadataTags"
+                 Prelude.<$> instanceMetadataTags]))
+instance Property "HttpEndpoint" MetadataOptionsProperty where
+  type PropertyType "HttpEndpoint" MetadataOptionsProperty = Value Prelude.Text
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty
+        {httpEndpoint = Prelude.pure newValue, ..}
+instance Property "HttpProtocolIpv6" MetadataOptionsProperty where
+  type PropertyType "HttpProtocolIpv6" MetadataOptionsProperty = Value Prelude.Text
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty
+        {httpProtocolIpv6 = Prelude.pure newValue, ..}
+instance Property "HttpPutResponseHopLimit" MetadataOptionsProperty where
+  type PropertyType "HttpPutResponseHopLimit" MetadataOptionsProperty = Value Prelude.Integer
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty
+        {httpPutResponseHopLimit = Prelude.pure newValue, ..}
+instance Property "HttpTokens" MetadataOptionsProperty where
+  type PropertyType "HttpTokens" MetadataOptionsProperty = Value Prelude.Text
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty {httpTokens = Prelude.pure newValue, ..}
+instance Property "InstanceMetadataTags" MetadataOptionsProperty where
+  type PropertyType "InstanceMetadataTags" MetadataOptionsProperty = Value Prelude.Text
+  set newValue MetadataOptionsProperty {..}
+    = MetadataOptionsProperty
+        {instanceMetadataTags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MetadataOptionsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/MetadataOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MetadataOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.MetadataOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MetadataOptionsProperty :: Prelude.Type
+instance ToResourceProperties MetadataOptionsProperty
+instance Prelude.Eq MetadataOptionsProperty
+instance Prelude.Show MetadataOptionsProperty
+instance JSON.ToJSON MetadataOptionsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MonitoringProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/MonitoringProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MonitoringProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.EC2.LaunchTemplate.MonitoringProperty (
+        MonitoringProperty(..), mkMonitoringProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MonitoringProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-monitoring.html>
+    MonitoringProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-monitoring.html#cfn-ec2-launchtemplate-monitoring-enabled>
+                        enabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMonitoringProperty :: MonitoringProperty
+mkMonitoringProperty
+  = MonitoringProperty
+      {haddock_workaround_ = (), enabled = Prelude.Nothing}
+instance ToResourceProperties MonitoringProperty where
+  toResourceProperties MonitoringProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.Monitoring",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Enabled" Prelude.<$> enabled])}
+instance JSON.ToJSON MonitoringProperty where
+  toJSON MonitoringProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Enabled" Prelude.<$> enabled]))
+instance Property "Enabled" MonitoringProperty where
+  type PropertyType "Enabled" MonitoringProperty = Value Prelude.Bool
+  set newValue MonitoringProperty {..}
+    = MonitoringProperty {enabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/MonitoringProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/MonitoringProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/MonitoringProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.MonitoringProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MonitoringProperty :: Prelude.Type
+instance ToResourceProperties MonitoringProperty
+instance Prelude.Eq MonitoringProperty
+instance Prelude.Show MonitoringProperty
+instance JSON.ToJSON MonitoringProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/NetworkBandwidthGbpsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/NetworkBandwidthGbpsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/NetworkBandwidthGbpsProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.LaunchTemplate.NetworkBandwidthGbpsProperty (
+        NetworkBandwidthGbpsProperty(..), mkNetworkBandwidthGbpsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkBandwidthGbpsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkbandwidthgbps.html>
+    NetworkBandwidthGbpsProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkbandwidthgbps.html#cfn-ec2-launchtemplate-networkbandwidthgbps-max>
+                                  max :: (Prelude.Maybe (Value Prelude.Double)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkbandwidthgbps.html#cfn-ec2-launchtemplate-networkbandwidthgbps-min>
+                                  min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkBandwidthGbpsProperty :: NetworkBandwidthGbpsProperty
+mkNetworkBandwidthGbpsProperty
+  = NetworkBandwidthGbpsProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties NetworkBandwidthGbpsProperty where
+  toResourceProperties NetworkBandwidthGbpsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.NetworkBandwidthGbps",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON NetworkBandwidthGbpsProperty where
+  toJSON NetworkBandwidthGbpsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" NetworkBandwidthGbpsProperty where
+  type PropertyType "Max" NetworkBandwidthGbpsProperty = Value Prelude.Double
+  set newValue NetworkBandwidthGbpsProperty {..}
+    = NetworkBandwidthGbpsProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" NetworkBandwidthGbpsProperty where
+  type PropertyType "Min" NetworkBandwidthGbpsProperty = Value Prelude.Double
+  set newValue NetworkBandwidthGbpsProperty {..}
+    = NetworkBandwidthGbpsProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/NetworkBandwidthGbpsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/NetworkBandwidthGbpsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/NetworkBandwidthGbpsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.NetworkBandwidthGbpsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkBandwidthGbpsProperty :: Prelude.Type
+instance ToResourceProperties NetworkBandwidthGbpsProperty
+instance Prelude.Eq NetworkBandwidthGbpsProperty
+instance Prelude.Show NetworkBandwidthGbpsProperty
+instance JSON.ToJSON NetworkBandwidthGbpsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceCountProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceCountProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceCountProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.LaunchTemplate.NetworkInterfaceCountProperty (
+        NetworkInterfaceCountProperty(..), mkNetworkInterfaceCountProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkInterfaceCountProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterfacecount.html>
+    NetworkInterfaceCountProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterfacecount.html#cfn-ec2-launchtemplate-networkinterfacecount-max>
+                                   max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterfacecount.html#cfn-ec2-launchtemplate-networkinterfacecount-min>
+                                   min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterfaceCountProperty :: NetworkInterfaceCountProperty
+mkNetworkInterfaceCountProperty
+  = NetworkInterfaceCountProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties NetworkInterfaceCountProperty where
+  toResourceProperties NetworkInterfaceCountProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.NetworkInterfaceCount",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON NetworkInterfaceCountProperty where
+  toJSON NetworkInterfaceCountProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" NetworkInterfaceCountProperty where
+  type PropertyType "Max" NetworkInterfaceCountProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceCountProperty {..}
+    = NetworkInterfaceCountProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" NetworkInterfaceCountProperty where
+  type PropertyType "Min" NetworkInterfaceCountProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceCountProperty {..}
+    = NetworkInterfaceCountProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceCountProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceCountProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceCountProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.NetworkInterfaceCountProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkInterfaceCountProperty :: Prelude.Type
+instance ToResourceProperties NetworkInterfaceCountProperty
+instance Prelude.Eq NetworkInterfaceCountProperty
+instance Prelude.Show NetworkInterfaceCountProperty
+instance JSON.ToJSON NetworkInterfaceCountProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceProperty.hs
@@ -0,0 +1,264 @@
+module Stratosphere.EC2.LaunchTemplate.NetworkInterfaceProperty (
+        module Exports, NetworkInterfaceProperty(..),
+        mkNetworkInterfaceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.ConnectionTrackingSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.EnaSrdSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.Ipv4PrefixSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.Ipv6AddProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.Ipv6PrefixSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.LaunchTemplate.PrivateIpAddProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkInterfaceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html>
+    NetworkInterfaceProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-associatecarrieripaddress>
+                              associateCarrierIpAddress :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-associatepublicipaddress>
+                              associatePublicIpAddress :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-connectiontrackingspecification>
+                              connectionTrackingSpecification :: (Prelude.Maybe ConnectionTrackingSpecificationProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-deleteontermination>
+                              deleteOnTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-description>
+                              description :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-deviceindex>
+                              deviceIndex :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-enaqueuecount>
+                              enaQueueCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-enasrdspecification>
+                              enaSrdSpecification :: (Prelude.Maybe EnaSrdSpecificationProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-groups>
+                              groups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-interfacetype>
+                              interfaceType :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-ipv4prefixcount>
+                              ipv4PrefixCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-ipv4prefixes>
+                              ipv4Prefixes :: (Prelude.Maybe [Ipv4PrefixSpecificationProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-ipv6addresscount>
+                              ipv6AddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-ipv6addresses>
+                              ipv6Addresses :: (Prelude.Maybe [Ipv6AddProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-ipv6prefixcount>
+                              ipv6PrefixCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-ipv6prefixes>
+                              ipv6Prefixes :: (Prelude.Maybe [Ipv6PrefixSpecificationProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-networkcardindex>
+                              networkCardIndex :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-networkinterfaceid>
+                              networkInterfaceId :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-primaryipv6>
+                              primaryIpv6 :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-privateipaddress>
+                              privateIpAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-privateipaddresses>
+                              privateIpAddresses :: (Prelude.Maybe [PrivateIpAddProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-secondaryprivateipaddresscount>
+                              secondaryPrivateIpAddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkinterface.html#cfn-ec2-launchtemplate-networkinterface-subnetid>
+                              subnetId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterfaceProperty :: NetworkInterfaceProperty
+mkNetworkInterfaceProperty
+  = NetworkInterfaceProperty
+      {haddock_workaround_ = (),
+       associateCarrierIpAddress = Prelude.Nothing,
+       associatePublicIpAddress = Prelude.Nothing,
+       connectionTrackingSpecification = Prelude.Nothing,
+       deleteOnTermination = Prelude.Nothing,
+       description = Prelude.Nothing, deviceIndex = Prelude.Nothing,
+       enaQueueCount = Prelude.Nothing,
+       enaSrdSpecification = Prelude.Nothing, groups = Prelude.Nothing,
+       interfaceType = Prelude.Nothing, ipv4PrefixCount = Prelude.Nothing,
+       ipv4Prefixes = Prelude.Nothing, ipv6AddressCount = Prelude.Nothing,
+       ipv6Addresses = Prelude.Nothing, ipv6PrefixCount = Prelude.Nothing,
+       ipv6Prefixes = Prelude.Nothing, networkCardIndex = Prelude.Nothing,
+       networkInterfaceId = Prelude.Nothing,
+       primaryIpv6 = Prelude.Nothing, privateIpAddress = Prelude.Nothing,
+       privateIpAddresses = Prelude.Nothing,
+       secondaryPrivateIpAddressCount = Prelude.Nothing,
+       subnetId = Prelude.Nothing}
+instance ToResourceProperties NetworkInterfaceProperty where
+  toResourceProperties NetworkInterfaceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.NetworkInterface",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AssociateCarrierIpAddress"
+                              Prelude.<$> associateCarrierIpAddress,
+                            (JSON..=) "AssociatePublicIpAddress"
+                              Prelude.<$> associatePublicIpAddress,
+                            (JSON..=) "ConnectionTrackingSpecification"
+                              Prelude.<$> connectionTrackingSpecification,
+                            (JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "DeviceIndex" Prelude.<$> deviceIndex,
+                            (JSON..=) "EnaQueueCount" Prelude.<$> enaQueueCount,
+                            (JSON..=) "EnaSrdSpecification" Prelude.<$> enaSrdSpecification,
+                            (JSON..=) "Groups" Prelude.<$> groups,
+                            (JSON..=) "InterfaceType" Prelude.<$> interfaceType,
+                            (JSON..=) "Ipv4PrefixCount" Prelude.<$> ipv4PrefixCount,
+                            (JSON..=) "Ipv4Prefixes" Prelude.<$> ipv4Prefixes,
+                            (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+                            (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+                            (JSON..=) "Ipv6PrefixCount" Prelude.<$> ipv6PrefixCount,
+                            (JSON..=) "Ipv6Prefixes" Prelude.<$> ipv6Prefixes,
+                            (JSON..=) "NetworkCardIndex" Prelude.<$> networkCardIndex,
+                            (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                            (JSON..=) "PrimaryIpv6" Prelude.<$> primaryIpv6,
+                            (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+                            (JSON..=) "PrivateIpAddresses" Prelude.<$> privateIpAddresses,
+                            (JSON..=) "SecondaryPrivateIpAddressCount"
+                              Prelude.<$> secondaryPrivateIpAddressCount,
+                            (JSON..=) "SubnetId" Prelude.<$> subnetId])}
+instance JSON.ToJSON NetworkInterfaceProperty where
+  toJSON NetworkInterfaceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AssociateCarrierIpAddress"
+                 Prelude.<$> associateCarrierIpAddress,
+               (JSON..=) "AssociatePublicIpAddress"
+                 Prelude.<$> associatePublicIpAddress,
+               (JSON..=) "ConnectionTrackingSpecification"
+                 Prelude.<$> connectionTrackingSpecification,
+               (JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "DeviceIndex" Prelude.<$> deviceIndex,
+               (JSON..=) "EnaQueueCount" Prelude.<$> enaQueueCount,
+               (JSON..=) "EnaSrdSpecification" Prelude.<$> enaSrdSpecification,
+               (JSON..=) "Groups" Prelude.<$> groups,
+               (JSON..=) "InterfaceType" Prelude.<$> interfaceType,
+               (JSON..=) "Ipv4PrefixCount" Prelude.<$> ipv4PrefixCount,
+               (JSON..=) "Ipv4Prefixes" Prelude.<$> ipv4Prefixes,
+               (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+               (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+               (JSON..=) "Ipv6PrefixCount" Prelude.<$> ipv6PrefixCount,
+               (JSON..=) "Ipv6Prefixes" Prelude.<$> ipv6Prefixes,
+               (JSON..=) "NetworkCardIndex" Prelude.<$> networkCardIndex,
+               (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+               (JSON..=) "PrimaryIpv6" Prelude.<$> primaryIpv6,
+               (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+               (JSON..=) "PrivateIpAddresses" Prelude.<$> privateIpAddresses,
+               (JSON..=) "SecondaryPrivateIpAddressCount"
+                 Prelude.<$> secondaryPrivateIpAddressCount,
+               (JSON..=) "SubnetId" Prelude.<$> subnetId]))
+instance Property "AssociateCarrierIpAddress" NetworkInterfaceProperty where
+  type PropertyType "AssociateCarrierIpAddress" NetworkInterfaceProperty = Value Prelude.Bool
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {associateCarrierIpAddress = Prelude.pure newValue, ..}
+instance Property "AssociatePublicIpAddress" NetworkInterfaceProperty where
+  type PropertyType "AssociatePublicIpAddress" NetworkInterfaceProperty = Value Prelude.Bool
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {associatePublicIpAddress = Prelude.pure newValue, ..}
+instance Property "ConnectionTrackingSpecification" NetworkInterfaceProperty where
+  type PropertyType "ConnectionTrackingSpecification" NetworkInterfaceProperty = ConnectionTrackingSpecificationProperty
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {connectionTrackingSpecification = Prelude.pure newValue, ..}
+instance Property "DeleteOnTermination" NetworkInterfaceProperty where
+  type PropertyType "DeleteOnTermination" NetworkInterfaceProperty = Value Prelude.Bool
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {deleteOnTermination = Prelude.pure newValue, ..}
+instance Property "Description" NetworkInterfaceProperty where
+  type PropertyType "Description" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {description = Prelude.pure newValue, ..}
+instance Property "DeviceIndex" NetworkInterfaceProperty where
+  type PropertyType "DeviceIndex" NetworkInterfaceProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {deviceIndex = Prelude.pure newValue, ..}
+instance Property "EnaQueueCount" NetworkInterfaceProperty where
+  type PropertyType "EnaQueueCount" NetworkInterfaceProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {enaQueueCount = Prelude.pure newValue, ..}
+instance Property "EnaSrdSpecification" NetworkInterfaceProperty where
+  type PropertyType "EnaSrdSpecification" NetworkInterfaceProperty = EnaSrdSpecificationProperty
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {enaSrdSpecification = Prelude.pure newValue, ..}
+instance Property "Groups" NetworkInterfaceProperty where
+  type PropertyType "Groups" NetworkInterfaceProperty = ValueList Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty {groups = Prelude.pure newValue, ..}
+instance Property "InterfaceType" NetworkInterfaceProperty where
+  type PropertyType "InterfaceType" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {interfaceType = Prelude.pure newValue, ..}
+instance Property "Ipv4PrefixCount" NetworkInterfaceProperty where
+  type PropertyType "Ipv4PrefixCount" NetworkInterfaceProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {ipv4PrefixCount = Prelude.pure newValue, ..}
+instance Property "Ipv4Prefixes" NetworkInterfaceProperty where
+  type PropertyType "Ipv4Prefixes" NetworkInterfaceProperty = [Ipv4PrefixSpecificationProperty]
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {ipv4Prefixes = Prelude.pure newValue, ..}
+instance Property "Ipv6AddressCount" NetworkInterfaceProperty where
+  type PropertyType "Ipv6AddressCount" NetworkInterfaceProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {ipv6AddressCount = Prelude.pure newValue, ..}
+instance Property "Ipv6Addresses" NetworkInterfaceProperty where
+  type PropertyType "Ipv6Addresses" NetworkInterfaceProperty = [Ipv6AddProperty]
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {ipv6Addresses = Prelude.pure newValue, ..}
+instance Property "Ipv6PrefixCount" NetworkInterfaceProperty where
+  type PropertyType "Ipv6PrefixCount" NetworkInterfaceProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {ipv6PrefixCount = Prelude.pure newValue, ..}
+instance Property "Ipv6Prefixes" NetworkInterfaceProperty where
+  type PropertyType "Ipv6Prefixes" NetworkInterfaceProperty = [Ipv6PrefixSpecificationProperty]
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {ipv6Prefixes = Prelude.pure newValue, ..}
+instance Property "NetworkCardIndex" NetworkInterfaceProperty where
+  type PropertyType "NetworkCardIndex" NetworkInterfaceProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {networkCardIndex = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceId" NetworkInterfaceProperty where
+  type PropertyType "NetworkInterfaceId" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {networkInterfaceId = Prelude.pure newValue, ..}
+instance Property "PrimaryIpv6" NetworkInterfaceProperty where
+  type PropertyType "PrimaryIpv6" NetworkInterfaceProperty = Value Prelude.Bool
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {primaryIpv6 = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddress" NetworkInterfaceProperty where
+  type PropertyType "PrivateIpAddress" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {privateIpAddress = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddresses" NetworkInterfaceProperty where
+  type PropertyType "PrivateIpAddresses" NetworkInterfaceProperty = [PrivateIpAddProperty]
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {privateIpAddresses = Prelude.pure newValue, ..}
+instance Property "SecondaryPrivateIpAddressCount" NetworkInterfaceProperty where
+  type PropertyType "SecondaryPrivateIpAddressCount" NetworkInterfaceProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty
+        {secondaryPrivateIpAddressCount = Prelude.pure newValue, ..}
+instance Property "SubnetId" NetworkInterfaceProperty where
+  type PropertyType "SubnetId" NetworkInterfaceProperty = Value Prelude.Text
+  set newValue NetworkInterfaceProperty {..}
+    = NetworkInterfaceProperty {subnetId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/NetworkInterfaceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.NetworkInterfaceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkInterfaceProperty :: Prelude.Type
+instance ToResourceProperties NetworkInterfaceProperty
+instance Prelude.Eq NetworkInterfaceProperty
+instance Prelude.Show NetworkInterfaceProperty
+instance JSON.ToJSON NetworkInterfaceProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/NetworkPerformanceOptionsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/NetworkPerformanceOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/NetworkPerformanceOptionsProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.LaunchTemplate.NetworkPerformanceOptionsProperty (
+        NetworkPerformanceOptionsProperty(..),
+        mkNetworkPerformanceOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkPerformanceOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkperformanceoptions.html>
+    NetworkPerformanceOptionsProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-networkperformanceoptions.html#cfn-ec2-launchtemplate-networkperformanceoptions-bandwidthweighting>
+                                       bandwidthWeighting :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkPerformanceOptionsProperty ::
+  NetworkPerformanceOptionsProperty
+mkNetworkPerformanceOptionsProperty
+  = NetworkPerformanceOptionsProperty
+      {haddock_workaround_ = (), bandwidthWeighting = Prelude.Nothing}
+instance ToResourceProperties NetworkPerformanceOptionsProperty where
+  toResourceProperties NetworkPerformanceOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.NetworkPerformanceOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BandwidthWeighting" Prelude.<$> bandwidthWeighting])}
+instance JSON.ToJSON NetworkPerformanceOptionsProperty where
+  toJSON NetworkPerformanceOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BandwidthWeighting" Prelude.<$> bandwidthWeighting]))
+instance Property "BandwidthWeighting" NetworkPerformanceOptionsProperty where
+  type PropertyType "BandwidthWeighting" NetworkPerformanceOptionsProperty = Value Prelude.Text
+  set newValue NetworkPerformanceOptionsProperty {..}
+    = NetworkPerformanceOptionsProperty
+        {bandwidthWeighting = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/NetworkPerformanceOptionsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/NetworkPerformanceOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/NetworkPerformanceOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.NetworkPerformanceOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkPerformanceOptionsProperty :: Prelude.Type
+instance ToResourceProperties NetworkPerformanceOptionsProperty
+instance Prelude.Eq NetworkPerformanceOptionsProperty
+instance Prelude.Show NetworkPerformanceOptionsProperty
+instance JSON.ToJSON NetworkPerformanceOptionsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/PlacementProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/PlacementProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/PlacementProperty.hs
@@ -0,0 +1,106 @@
+module Stratosphere.EC2.LaunchTemplate.PlacementProperty (
+        PlacementProperty(..), mkPlacementProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PlacementProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html>
+    PlacementProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html#cfn-ec2-launchtemplate-placement-affinity>
+                       affinity :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html#cfn-ec2-launchtemplate-placement-availabilityzone>
+                       availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html#cfn-ec2-launchtemplate-placement-groupid>
+                       groupId :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html#cfn-ec2-launchtemplate-placement-groupname>
+                       groupName :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html#cfn-ec2-launchtemplate-placement-hostid>
+                       hostId :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html#cfn-ec2-launchtemplate-placement-hostresourcegrouparn>
+                       hostResourceGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html#cfn-ec2-launchtemplate-placement-partitionnumber>
+                       partitionNumber :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html#cfn-ec2-launchtemplate-placement-spreaddomain>
+                       spreadDomain :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-placement.html#cfn-ec2-launchtemplate-placement-tenancy>
+                       tenancy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPlacementProperty :: PlacementProperty
+mkPlacementProperty
+  = PlacementProperty
+      {haddock_workaround_ = (), affinity = Prelude.Nothing,
+       availabilityZone = Prelude.Nothing, groupId = Prelude.Nothing,
+       groupName = Prelude.Nothing, hostId = Prelude.Nothing,
+       hostResourceGroupArn = Prelude.Nothing,
+       partitionNumber = Prelude.Nothing, spreadDomain = Prelude.Nothing,
+       tenancy = Prelude.Nothing}
+instance ToResourceProperties PlacementProperty where
+  toResourceProperties PlacementProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.Placement",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Affinity" Prelude.<$> affinity,
+                            (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                            (JSON..=) "GroupId" Prelude.<$> groupId,
+                            (JSON..=) "GroupName" Prelude.<$> groupName,
+                            (JSON..=) "HostId" Prelude.<$> hostId,
+                            (JSON..=) "HostResourceGroupArn" Prelude.<$> hostResourceGroupArn,
+                            (JSON..=) "PartitionNumber" Prelude.<$> partitionNumber,
+                            (JSON..=) "SpreadDomain" Prelude.<$> spreadDomain,
+                            (JSON..=) "Tenancy" Prelude.<$> tenancy])}
+instance JSON.ToJSON PlacementProperty where
+  toJSON PlacementProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Affinity" Prelude.<$> affinity,
+               (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+               (JSON..=) "GroupId" Prelude.<$> groupId,
+               (JSON..=) "GroupName" Prelude.<$> groupName,
+               (JSON..=) "HostId" Prelude.<$> hostId,
+               (JSON..=) "HostResourceGroupArn" Prelude.<$> hostResourceGroupArn,
+               (JSON..=) "PartitionNumber" Prelude.<$> partitionNumber,
+               (JSON..=) "SpreadDomain" Prelude.<$> spreadDomain,
+               (JSON..=) "Tenancy" Prelude.<$> tenancy]))
+instance Property "Affinity" PlacementProperty where
+  type PropertyType "Affinity" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {affinity = Prelude.pure newValue, ..}
+instance Property "AvailabilityZone" PlacementProperty where
+  type PropertyType "AvailabilityZone" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {availabilityZone = Prelude.pure newValue, ..}
+instance Property "GroupId" PlacementProperty where
+  type PropertyType "GroupId" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {groupId = Prelude.pure newValue, ..}
+instance Property "GroupName" PlacementProperty where
+  type PropertyType "GroupName" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {groupName = Prelude.pure newValue, ..}
+instance Property "HostId" PlacementProperty where
+  type PropertyType "HostId" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {hostId = Prelude.pure newValue, ..}
+instance Property "HostResourceGroupArn" PlacementProperty where
+  type PropertyType "HostResourceGroupArn" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty
+        {hostResourceGroupArn = Prelude.pure newValue, ..}
+instance Property "PartitionNumber" PlacementProperty where
+  type PropertyType "PartitionNumber" PlacementProperty = Value Prelude.Integer
+  set newValue PlacementProperty {..}
+    = PlacementProperty {partitionNumber = Prelude.pure newValue, ..}
+instance Property "SpreadDomain" PlacementProperty where
+  type PropertyType "SpreadDomain" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {spreadDomain = Prelude.pure newValue, ..}
+instance Property "Tenancy" PlacementProperty where
+  type PropertyType "Tenancy" PlacementProperty = Value Prelude.Text
+  set newValue PlacementProperty {..}
+    = PlacementProperty {tenancy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/PlacementProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/PlacementProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/PlacementProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.PlacementProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PlacementProperty :: Prelude.Type
+instance ToResourceProperties PlacementProperty
+instance Prelude.Eq PlacementProperty
+instance Prelude.Show PlacementProperty
+instance JSON.ToJSON PlacementProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/PrivateDnsNameOptionsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/PrivateDnsNameOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/PrivateDnsNameOptionsProperty.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EC2.LaunchTemplate.PrivateDnsNameOptionsProperty (
+        PrivateDnsNameOptionsProperty(..), mkPrivateDnsNameOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PrivateDnsNameOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privatednsnameoptions.html>
+    PrivateDnsNameOptionsProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privatednsnameoptions.html#cfn-ec2-launchtemplate-privatednsnameoptions-enableresourcenamednsaaaarecord>
+                                   enableResourceNameDnsAAAARecord :: (Prelude.Maybe (Value Prelude.Bool)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privatednsnameoptions.html#cfn-ec2-launchtemplate-privatednsnameoptions-enableresourcenamednsarecord>
+                                   enableResourceNameDnsARecord :: (Prelude.Maybe (Value Prelude.Bool)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privatednsnameoptions.html#cfn-ec2-launchtemplate-privatednsnameoptions-hostnametype>
+                                   hostnameType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrivateDnsNameOptionsProperty :: PrivateDnsNameOptionsProperty
+mkPrivateDnsNameOptionsProperty
+  = PrivateDnsNameOptionsProperty
+      {haddock_workaround_ = (),
+       enableResourceNameDnsAAAARecord = Prelude.Nothing,
+       enableResourceNameDnsARecord = Prelude.Nothing,
+       hostnameType = Prelude.Nothing}
+instance ToResourceProperties PrivateDnsNameOptionsProperty where
+  toResourceProperties PrivateDnsNameOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.PrivateDnsNameOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnableResourceNameDnsAAAARecord"
+                              Prelude.<$> enableResourceNameDnsAAAARecord,
+                            (JSON..=) "EnableResourceNameDnsARecord"
+                              Prelude.<$> enableResourceNameDnsARecord,
+                            (JSON..=) "HostnameType" Prelude.<$> hostnameType])}
+instance JSON.ToJSON PrivateDnsNameOptionsProperty where
+  toJSON PrivateDnsNameOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnableResourceNameDnsAAAARecord"
+                 Prelude.<$> enableResourceNameDnsAAAARecord,
+               (JSON..=) "EnableResourceNameDnsARecord"
+                 Prelude.<$> enableResourceNameDnsARecord,
+               (JSON..=) "HostnameType" Prelude.<$> hostnameType]))
+instance Property "EnableResourceNameDnsAAAARecord" PrivateDnsNameOptionsProperty where
+  type PropertyType "EnableResourceNameDnsAAAARecord" PrivateDnsNameOptionsProperty = Value Prelude.Bool
+  set newValue PrivateDnsNameOptionsProperty {..}
+    = PrivateDnsNameOptionsProperty
+        {enableResourceNameDnsAAAARecord = Prelude.pure newValue, ..}
+instance Property "EnableResourceNameDnsARecord" PrivateDnsNameOptionsProperty where
+  type PropertyType "EnableResourceNameDnsARecord" PrivateDnsNameOptionsProperty = Value Prelude.Bool
+  set newValue PrivateDnsNameOptionsProperty {..}
+    = PrivateDnsNameOptionsProperty
+        {enableResourceNameDnsARecord = Prelude.pure newValue, ..}
+instance Property "HostnameType" PrivateDnsNameOptionsProperty where
+  type PropertyType "HostnameType" PrivateDnsNameOptionsProperty = Value Prelude.Text
+  set newValue PrivateDnsNameOptionsProperty {..}
+    = PrivateDnsNameOptionsProperty
+        {hostnameType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/PrivateDnsNameOptionsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/PrivateDnsNameOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/PrivateDnsNameOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.PrivateDnsNameOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PrivateDnsNameOptionsProperty :: Prelude.Type
+instance ToResourceProperties PrivateDnsNameOptionsProperty
+instance Prelude.Eq PrivateDnsNameOptionsProperty
+instance Prelude.Show PrivateDnsNameOptionsProperty
+instance JSON.ToJSON PrivateDnsNameOptionsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/PrivateIpAddProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/PrivateIpAddProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/PrivateIpAddProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.EC2.LaunchTemplate.PrivateIpAddProperty (
+        PrivateIpAddProperty(..), mkPrivateIpAddProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PrivateIpAddProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privateipadd.html>
+    PrivateIpAddProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privateipadd.html#cfn-ec2-launchtemplate-privateipadd-primary>
+                          primary :: (Prelude.Maybe (Value Prelude.Bool)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-privateipadd.html#cfn-ec2-launchtemplate-privateipadd-privateipaddress>
+                          privateIpAddress :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrivateIpAddProperty :: PrivateIpAddProperty
+mkPrivateIpAddProperty
+  = PrivateIpAddProperty
+      {haddock_workaround_ = (), primary = Prelude.Nothing,
+       privateIpAddress = Prelude.Nothing}
+instance ToResourceProperties PrivateIpAddProperty where
+  toResourceProperties PrivateIpAddProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.PrivateIpAdd",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Primary" Prelude.<$> primary,
+                            (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress])}
+instance JSON.ToJSON PrivateIpAddProperty where
+  toJSON PrivateIpAddProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Primary" Prelude.<$> primary,
+               (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress]))
+instance Property "Primary" PrivateIpAddProperty where
+  type PropertyType "Primary" PrivateIpAddProperty = Value Prelude.Bool
+  set newValue PrivateIpAddProperty {..}
+    = PrivateIpAddProperty {primary = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddress" PrivateIpAddProperty where
+  type PropertyType "PrivateIpAddress" PrivateIpAddProperty = Value Prelude.Text
+  set newValue PrivateIpAddProperty {..}
+    = PrivateIpAddProperty
+        {privateIpAddress = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/PrivateIpAddProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/PrivateIpAddProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/PrivateIpAddProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.PrivateIpAddProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PrivateIpAddProperty :: Prelude.Type
+instance ToResourceProperties PrivateIpAddProperty
+instance Prelude.Eq PrivateIpAddProperty
+instance Prelude.Show PrivateIpAddProperty
+instance JSON.ToJSON PrivateIpAddProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/ReferenceProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/ReferenceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/ReferenceProperty.hs
@@ -0,0 +1,36 @@
+module Stratosphere.EC2.LaunchTemplate.ReferenceProperty (
+        ReferenceProperty(..), mkReferenceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ReferenceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-reference.html>
+    ReferenceProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-reference.html#cfn-ec2-launchtemplate-reference-instancefamily>
+                       instanceFamily :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkReferenceProperty :: ReferenceProperty
+mkReferenceProperty
+  = ReferenceProperty
+      {haddock_workaround_ = (), instanceFamily = Prelude.Nothing}
+instance ToResourceProperties ReferenceProperty where
+  toResourceProperties ReferenceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.Reference",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "InstanceFamily" Prelude.<$> instanceFamily])}
+instance JSON.ToJSON ReferenceProperty where
+  toJSON ReferenceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "InstanceFamily" Prelude.<$> instanceFamily]))
+instance Property "InstanceFamily" ReferenceProperty where
+  type PropertyType "InstanceFamily" ReferenceProperty = Value Prelude.Text
+  set newValue ReferenceProperty {..}
+    = ReferenceProperty {instanceFamily = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/ReferenceProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/ReferenceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/ReferenceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.ReferenceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ReferenceProperty :: Prelude.Type
+instance ToResourceProperties ReferenceProperty
+instance Prelude.Eq ReferenceProperty
+instance Prelude.Show ReferenceProperty
+instance JSON.ToJSON ReferenceProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/SpotOptionsProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/SpotOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/SpotOptionsProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.EC2.LaunchTemplate.SpotOptionsProperty (
+        SpotOptionsProperty(..), mkSpotOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-spotoptions.html>
+    SpotOptionsProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-spotoptions.html#cfn-ec2-launchtemplate-spotoptions-blockdurationminutes>
+                         blockDurationMinutes :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-spotoptions.html#cfn-ec2-launchtemplate-spotoptions-instanceinterruptionbehavior>
+                         instanceInterruptionBehavior :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-spotoptions.html#cfn-ec2-launchtemplate-spotoptions-maxprice>
+                         maxPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-spotoptions.html#cfn-ec2-launchtemplate-spotoptions-spotinstancetype>
+                         spotInstanceType :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-spotoptions.html#cfn-ec2-launchtemplate-spotoptions-validuntil>
+                         validUntil :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotOptionsProperty :: SpotOptionsProperty
+mkSpotOptionsProperty
+  = SpotOptionsProperty
+      {haddock_workaround_ = (), blockDurationMinutes = Prelude.Nothing,
+       instanceInterruptionBehavior = Prelude.Nothing,
+       maxPrice = Prelude.Nothing, spotInstanceType = Prelude.Nothing,
+       validUntil = Prelude.Nothing}
+instance ToResourceProperties SpotOptionsProperty where
+  toResourceProperties SpotOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.SpotOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BlockDurationMinutes" Prelude.<$> blockDurationMinutes,
+                            (JSON..=) "InstanceInterruptionBehavior"
+                              Prelude.<$> instanceInterruptionBehavior,
+                            (JSON..=) "MaxPrice" Prelude.<$> maxPrice,
+                            (JSON..=) "SpotInstanceType" Prelude.<$> spotInstanceType,
+                            (JSON..=) "ValidUntil" Prelude.<$> validUntil])}
+instance JSON.ToJSON SpotOptionsProperty where
+  toJSON SpotOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BlockDurationMinutes" Prelude.<$> blockDurationMinutes,
+               (JSON..=) "InstanceInterruptionBehavior"
+                 Prelude.<$> instanceInterruptionBehavior,
+               (JSON..=) "MaxPrice" Prelude.<$> maxPrice,
+               (JSON..=) "SpotInstanceType" Prelude.<$> spotInstanceType,
+               (JSON..=) "ValidUntil" Prelude.<$> validUntil]))
+instance Property "BlockDurationMinutes" SpotOptionsProperty where
+  type PropertyType "BlockDurationMinutes" SpotOptionsProperty = Value Prelude.Integer
+  set newValue SpotOptionsProperty {..}
+    = SpotOptionsProperty
+        {blockDurationMinutes = Prelude.pure newValue, ..}
+instance Property "InstanceInterruptionBehavior" SpotOptionsProperty where
+  type PropertyType "InstanceInterruptionBehavior" SpotOptionsProperty = Value Prelude.Text
+  set newValue SpotOptionsProperty {..}
+    = SpotOptionsProperty
+        {instanceInterruptionBehavior = Prelude.pure newValue, ..}
+instance Property "MaxPrice" SpotOptionsProperty where
+  type PropertyType "MaxPrice" SpotOptionsProperty = Value Prelude.Text
+  set newValue SpotOptionsProperty {..}
+    = SpotOptionsProperty {maxPrice = Prelude.pure newValue, ..}
+instance Property "SpotInstanceType" SpotOptionsProperty where
+  type PropertyType "SpotInstanceType" SpotOptionsProperty = Value Prelude.Text
+  set newValue SpotOptionsProperty {..}
+    = SpotOptionsProperty
+        {spotInstanceType = Prelude.pure newValue, ..}
+instance Property "ValidUntil" SpotOptionsProperty where
+  type PropertyType "ValidUntil" SpotOptionsProperty = Value Prelude.Text
+  set newValue SpotOptionsProperty {..}
+    = SpotOptionsProperty {validUntil = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/SpotOptionsProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/SpotOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/SpotOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.SpotOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotOptionsProperty :: Prelude.Type
+instance ToResourceProperties SpotOptionsProperty
+instance Prelude.Eq SpotOptionsProperty
+instance Prelude.Show SpotOptionsProperty
+instance JSON.ToJSON SpotOptionsProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/TagSpecificationProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/TagSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/TagSpecificationProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.LaunchTemplate.TagSpecificationProperty (
+        TagSpecificationProperty(..), mkTagSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TagSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-tagspecification.html>
+    TagSpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-tagspecification.html#cfn-ec2-launchtemplate-tagspecification-resourcetype>
+                              resourceType :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-tagspecification.html#cfn-ec2-launchtemplate-tagspecification-tags>
+                              tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTagSpecificationProperty :: TagSpecificationProperty
+mkTagSpecificationProperty
+  = TagSpecificationProperty
+      {haddock_workaround_ = (), resourceType = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties TagSpecificationProperty where
+  toResourceProperties TagSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.TagSpecification",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON TagSpecificationProperty where
+  toJSON TagSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ResourceType" TagSpecificationProperty where
+  type PropertyType "ResourceType" TagSpecificationProperty = Value Prelude.Text
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty
+        {resourceType = Prelude.pure newValue, ..}
+instance Property "Tags" TagSpecificationProperty where
+  type PropertyType "Tags" TagSpecificationProperty = [Tag]
+  set newValue TagSpecificationProperty {..}
+    = TagSpecificationProperty {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/TagSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/TagSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/TagSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.TagSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TagSpecificationProperty :: Prelude.Type
+instance ToResourceProperties TagSpecificationProperty
+instance Prelude.Eq TagSpecificationProperty
+instance Prelude.Show TagSpecificationProperty
+instance JSON.ToJSON TagSpecificationProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/TotalLocalStorageGBProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/TotalLocalStorageGBProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/TotalLocalStorageGBProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.LaunchTemplate.TotalLocalStorageGBProperty (
+        TotalLocalStorageGBProperty(..), mkTotalLocalStorageGBProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TotalLocalStorageGBProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-totallocalstoragegb.html>
+    TotalLocalStorageGBProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-totallocalstoragegb.html#cfn-ec2-launchtemplate-totallocalstoragegb-max>
+                                 max :: (Prelude.Maybe (Value Prelude.Double)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-totallocalstoragegb.html#cfn-ec2-launchtemplate-totallocalstoragegb-min>
+                                 min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTotalLocalStorageGBProperty :: TotalLocalStorageGBProperty
+mkTotalLocalStorageGBProperty
+  = TotalLocalStorageGBProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties TotalLocalStorageGBProperty where
+  toResourceProperties TotalLocalStorageGBProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.TotalLocalStorageGB",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON TotalLocalStorageGBProperty where
+  toJSON TotalLocalStorageGBProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" TotalLocalStorageGBProperty where
+  type PropertyType "Max" TotalLocalStorageGBProperty = Value Prelude.Double
+  set newValue TotalLocalStorageGBProperty {..}
+    = TotalLocalStorageGBProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" TotalLocalStorageGBProperty where
+  type PropertyType "Min" TotalLocalStorageGBProperty = Value Prelude.Double
+  set newValue TotalLocalStorageGBProperty {..}
+    = TotalLocalStorageGBProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/TotalLocalStorageGBProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/TotalLocalStorageGBProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/TotalLocalStorageGBProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.TotalLocalStorageGBProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TotalLocalStorageGBProperty :: Prelude.Type
+instance ToResourceProperties TotalLocalStorageGBProperty
+instance Prelude.Eq TotalLocalStorageGBProperty
+instance Prelude.Show TotalLocalStorageGBProperty
+instance JSON.ToJSON TotalLocalStorageGBProperty
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/VCpuCountProperty.hs b/gen/Stratosphere/EC2/LaunchTemplate/VCpuCountProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/VCpuCountProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.LaunchTemplate.VCpuCountProperty (
+        VCpuCountProperty(..), mkVCpuCountProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VCpuCountProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-vcpucount.html>
+    VCpuCountProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-vcpucount.html#cfn-ec2-launchtemplate-vcpucount-max>
+                       max :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-vcpucount.html#cfn-ec2-launchtemplate-vcpucount-min>
+                       min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVCpuCountProperty :: VCpuCountProperty
+mkVCpuCountProperty
+  = VCpuCountProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties VCpuCountProperty where
+  toResourceProperties VCpuCountProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LaunchTemplate.VCpuCount",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON VCpuCountProperty where
+  toJSON VCpuCountProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" VCpuCountProperty where
+  type PropertyType "Max" VCpuCountProperty = Value Prelude.Integer
+  set newValue VCpuCountProperty {..}
+    = VCpuCountProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" VCpuCountProperty where
+  type PropertyType "Min" VCpuCountProperty = Value Prelude.Integer
+  set newValue VCpuCountProperty {..}
+    = VCpuCountProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LaunchTemplate/VCpuCountProperty.hs-boot b/gen/Stratosphere/EC2/LaunchTemplate/VCpuCountProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LaunchTemplate/VCpuCountProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.LaunchTemplate.VCpuCountProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VCpuCountProperty :: Prelude.Type
+instance ToResourceProperties VCpuCountProperty
+instance Prelude.Eq VCpuCountProperty
+instance Prelude.Show VCpuCountProperty
+instance JSON.ToJSON VCpuCountProperty
diff --git a/gen/Stratosphere/EC2/LocalGatewayRoute.hs b/gen/Stratosphere/EC2/LocalGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LocalGatewayRoute.hs
@@ -0,0 +1,71 @@
+module Stratosphere.EC2.LocalGatewayRoute (
+        LocalGatewayRoute(..), mkLocalGatewayRoute
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LocalGatewayRoute
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroute.html>
+    LocalGatewayRoute {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroute.html#cfn-ec2-localgatewayroute-destinationcidrblock>
+                       destinationCidrBlock :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroute.html#cfn-ec2-localgatewayroute-localgatewayroutetableid>
+                       localGatewayRouteTableId :: (Value Prelude.Text),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroute.html#cfn-ec2-localgatewayroute-localgatewayvirtualinterfacegroupid>
+                       localGatewayVirtualInterfaceGroupId :: (Prelude.Maybe (Value Prelude.Text)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroute.html#cfn-ec2-localgatewayroute-networkinterfaceid>
+                       networkInterfaceId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocalGatewayRoute ::
+  Value Prelude.Text -> Value Prelude.Text -> LocalGatewayRoute
+mkLocalGatewayRoute destinationCidrBlock localGatewayRouteTableId
+  = LocalGatewayRoute
+      {haddock_workaround_ = (),
+       destinationCidrBlock = destinationCidrBlock,
+       localGatewayRouteTableId = localGatewayRouteTableId,
+       localGatewayVirtualInterfaceGroupId = Prelude.Nothing,
+       networkInterfaceId = Prelude.Nothing}
+instance ToResourceProperties LocalGatewayRoute where
+  toResourceProperties LocalGatewayRoute {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LocalGatewayRoute",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DestinationCidrBlock" JSON..= destinationCidrBlock,
+                            "LocalGatewayRouteTableId" JSON..= localGatewayRouteTableId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LocalGatewayVirtualInterfaceGroupId"
+                                 Prelude.<$> localGatewayVirtualInterfaceGroupId,
+                               (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId]))}
+instance JSON.ToJSON LocalGatewayRoute where
+  toJSON LocalGatewayRoute {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DestinationCidrBlock" JSON..= destinationCidrBlock,
+               "LocalGatewayRouteTableId" JSON..= localGatewayRouteTableId]
+              (Prelude.catMaybes
+                 [(JSON..=) "LocalGatewayVirtualInterfaceGroupId"
+                    Prelude.<$> localGatewayVirtualInterfaceGroupId,
+                  (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId])))
+instance Property "DestinationCidrBlock" LocalGatewayRoute where
+  type PropertyType "DestinationCidrBlock" LocalGatewayRoute = Value Prelude.Text
+  set newValue LocalGatewayRoute {..}
+    = LocalGatewayRoute {destinationCidrBlock = newValue, ..}
+instance Property "LocalGatewayRouteTableId" LocalGatewayRoute where
+  type PropertyType "LocalGatewayRouteTableId" LocalGatewayRoute = Value Prelude.Text
+  set newValue LocalGatewayRoute {..}
+    = LocalGatewayRoute {localGatewayRouteTableId = newValue, ..}
+instance Property "LocalGatewayVirtualInterfaceGroupId" LocalGatewayRoute where
+  type PropertyType "LocalGatewayVirtualInterfaceGroupId" LocalGatewayRoute = Value Prelude.Text
+  set newValue LocalGatewayRoute {..}
+    = LocalGatewayRoute
+        {localGatewayVirtualInterfaceGroupId = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceId" LocalGatewayRoute where
+  type PropertyType "NetworkInterfaceId" LocalGatewayRoute = Value Prelude.Text
+  set newValue LocalGatewayRoute {..}
+    = LocalGatewayRoute
+        {networkInterfaceId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LocalGatewayRouteTable.hs b/gen/Stratosphere/EC2/LocalGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LocalGatewayRouteTable.hs
@@ -0,0 +1,57 @@
+module Stratosphere.EC2.LocalGatewayRouteTable (
+        LocalGatewayRouteTable(..), mkLocalGatewayRouteTable
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocalGatewayRouteTable
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetable.html>
+    LocalGatewayRouteTable {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetable.html#cfn-ec2-localgatewayroutetable-localgatewayid>
+                            localGatewayId :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetable.html#cfn-ec2-localgatewayroutetable-mode>
+                            mode :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetable.html#cfn-ec2-localgatewayroutetable-tags>
+                            tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocalGatewayRouteTable ::
+  Value Prelude.Text -> LocalGatewayRouteTable
+mkLocalGatewayRouteTable localGatewayId
+  = LocalGatewayRouteTable
+      {haddock_workaround_ = (), localGatewayId = localGatewayId,
+       mode = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties LocalGatewayRouteTable where
+  toResourceProperties LocalGatewayRouteTable {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LocalGatewayRouteTable",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LocalGatewayId" JSON..= localGatewayId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Mode" Prelude.<$> mode,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocalGatewayRouteTable where
+  toJSON LocalGatewayRouteTable {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LocalGatewayId" JSON..= localGatewayId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Mode" Prelude.<$> mode,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "LocalGatewayId" LocalGatewayRouteTable where
+  type PropertyType "LocalGatewayId" LocalGatewayRouteTable = Value Prelude.Text
+  set newValue LocalGatewayRouteTable {..}
+    = LocalGatewayRouteTable {localGatewayId = newValue, ..}
+instance Property "Mode" LocalGatewayRouteTable where
+  type PropertyType "Mode" LocalGatewayRouteTable = Value Prelude.Text
+  set newValue LocalGatewayRouteTable {..}
+    = LocalGatewayRouteTable {mode = Prelude.pure newValue, ..}
+instance Property "Tags" LocalGatewayRouteTable where
+  type PropertyType "Tags" LocalGatewayRouteTable = [Tag]
+  set newValue LocalGatewayRouteTable {..}
+    = LocalGatewayRouteTable {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LocalGatewayRouteTableVPCAssociation.hs b/gen/Stratosphere/EC2/LocalGatewayRouteTableVPCAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LocalGatewayRouteTableVPCAssociation.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EC2.LocalGatewayRouteTableVPCAssociation (
+        LocalGatewayRouteTableVPCAssociation(..),
+        mkLocalGatewayRouteTableVPCAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocalGatewayRouteTableVPCAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevpcassociation.html>
+    LocalGatewayRouteTableVPCAssociation {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevpcassociation.html#cfn-ec2-localgatewayroutetablevpcassociation-localgatewayroutetableid>
+                                          localGatewayRouteTableId :: (Value Prelude.Text),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevpcassociation.html#cfn-ec2-localgatewayroutetablevpcassociation-tags>
+                                          tags :: (Prelude.Maybe [Tag]),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevpcassociation.html#cfn-ec2-localgatewayroutetablevpcassociation-vpcid>
+                                          vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocalGatewayRouteTableVPCAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> LocalGatewayRouteTableVPCAssociation
+mkLocalGatewayRouteTableVPCAssociation
+  localGatewayRouteTableId
+  vpcId
+  = LocalGatewayRouteTableVPCAssociation
+      {haddock_workaround_ = (),
+       localGatewayRouteTableId = localGatewayRouteTableId, vpcId = vpcId,
+       tags = Prelude.Nothing}
+instance ToResourceProperties LocalGatewayRouteTableVPCAssociation where
+  toResourceProperties LocalGatewayRouteTableVPCAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LocalGatewayRouteTableVPCAssociation",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LocalGatewayRouteTableId" JSON..= localGatewayRouteTableId,
+                            "VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocalGatewayRouteTableVPCAssociation where
+  toJSON LocalGatewayRouteTableVPCAssociation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LocalGatewayRouteTableId" JSON..= localGatewayRouteTableId,
+               "VpcId" JSON..= vpcId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "LocalGatewayRouteTableId" LocalGatewayRouteTableVPCAssociation where
+  type PropertyType "LocalGatewayRouteTableId" LocalGatewayRouteTableVPCAssociation = Value Prelude.Text
+  set newValue LocalGatewayRouteTableVPCAssociation {..}
+    = LocalGatewayRouteTableVPCAssociation
+        {localGatewayRouteTableId = newValue, ..}
+instance Property "Tags" LocalGatewayRouteTableVPCAssociation where
+  type PropertyType "Tags" LocalGatewayRouteTableVPCAssociation = [Tag]
+  set newValue LocalGatewayRouteTableVPCAssociation {..}
+    = LocalGatewayRouteTableVPCAssociation
+        {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" LocalGatewayRouteTableVPCAssociation where
+  type PropertyType "VpcId" LocalGatewayRouteTableVPCAssociation = Value Prelude.Text
+  set newValue LocalGatewayRouteTableVPCAssociation {..}
+    = LocalGatewayRouteTableVPCAssociation {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/LocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs b/gen/Stratosphere/EC2/LocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs
@@ -0,0 +1,74 @@
+module Stratosphere.EC2.LocalGatewayRouteTableVirtualInterfaceGroupAssociation (
+        LocalGatewayRouteTableVirtualInterfaceGroupAssociation(..),
+        mkLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevirtualinterfacegroupassociation.html>
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation {haddock_workaround_ :: (),
+                                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevirtualinterfacegroupassociation.html#cfn-ec2-localgatewayroutetablevirtualinterfacegroupassociation-localgatewayroutetableid>
+                                                            localGatewayRouteTableId :: (Value Prelude.Text),
+                                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevirtualinterfacegroupassociation.html#cfn-ec2-localgatewayroutetablevirtualinterfacegroupassociation-localgatewayvirtualinterfacegroupid>
+                                                            localGatewayVirtualInterfaceGroupId :: (Value Prelude.Text),
+                                                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayroutetablevirtualinterfacegroupassociation.html#cfn-ec2-localgatewayroutetablevirtualinterfacegroupassociation-tags>
+                                                            tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocalGatewayRouteTableVirtualInterfaceGroupAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+mkLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  localGatewayRouteTableId
+  localGatewayVirtualInterfaceGroupId
+  = LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+      {haddock_workaround_ = (),
+       localGatewayRouteTableId = localGatewayRouteTableId,
+       localGatewayVirtualInterfaceGroupId = localGatewayVirtualInterfaceGroupId,
+       tags = Prelude.Nothing}
+instance ToResourceProperties LocalGatewayRouteTableVirtualInterfaceGroupAssociation where
+  toResourceProperties
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LocalGatewayRouteTableVirtualInterfaceGroupAssociation",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LocalGatewayRouteTableId" JSON..= localGatewayRouteTableId,
+                            "LocalGatewayVirtualInterfaceGroupId"
+                              JSON..= localGatewayVirtualInterfaceGroupId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocalGatewayRouteTableVirtualInterfaceGroupAssociation where
+  toJSON LocalGatewayRouteTableVirtualInterfaceGroupAssociation {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LocalGatewayRouteTableId" JSON..= localGatewayRouteTableId,
+               "LocalGatewayVirtualInterfaceGroupId"
+                 JSON..= localGatewayVirtualInterfaceGroupId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "LocalGatewayRouteTableId" LocalGatewayRouteTableVirtualInterfaceGroupAssociation where
+  type PropertyType "LocalGatewayRouteTableId" LocalGatewayRouteTableVirtualInterfaceGroupAssociation = Value Prelude.Text
+  set
+    newValue
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation {..}
+    = LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+        {localGatewayRouteTableId = newValue, ..}
+instance Property "LocalGatewayVirtualInterfaceGroupId" LocalGatewayRouteTableVirtualInterfaceGroupAssociation where
+  type PropertyType "LocalGatewayVirtualInterfaceGroupId" LocalGatewayRouteTableVirtualInterfaceGroupAssociation = Value Prelude.Text
+  set
+    newValue
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation {..}
+    = LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+        {localGatewayVirtualInterfaceGroupId = newValue, ..}
+instance Property "Tags" LocalGatewayRouteTableVirtualInterfaceGroupAssociation where
+  type PropertyType "Tags" LocalGatewayRouteTableVirtualInterfaceGroupAssociation = [Tag]
+  set
+    newValue
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation {..}
+    = LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+        {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/LocalGatewayVirtualInterface.hs b/gen/Stratosphere/EC2/LocalGatewayVirtualInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LocalGatewayVirtualInterface.hs
@@ -0,0 +1,112 @@
+module Stratosphere.EC2.LocalGatewayVirtualInterface (
+        LocalGatewayVirtualInterface(..), mkLocalGatewayVirtualInterface
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocalGatewayVirtualInterface
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterface.html>
+    LocalGatewayVirtualInterface {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterface.html#cfn-ec2-localgatewayvirtualinterface-localaddress>
+                                  localAddress :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterface.html#cfn-ec2-localgatewayvirtualinterface-localgatewayvirtualinterfacegroupid>
+                                  localGatewayVirtualInterfaceGroupId :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterface.html#cfn-ec2-localgatewayvirtualinterface-outpostlagid>
+                                  outpostLagId :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterface.html#cfn-ec2-localgatewayvirtualinterface-peeraddress>
+                                  peerAddress :: (Value Prelude.Text),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterface.html#cfn-ec2-localgatewayvirtualinterface-peerbgpasn>
+                                  peerBgpAsn :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterface.html#cfn-ec2-localgatewayvirtualinterface-peerbgpasnextended>
+                                  peerBgpAsnExtended :: (Prelude.Maybe (Value Prelude.Integer)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterface.html#cfn-ec2-localgatewayvirtualinterface-tags>
+                                  tags :: (Prelude.Maybe [Tag]),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterface.html#cfn-ec2-localgatewayvirtualinterface-vlan>
+                                  vlan :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocalGatewayVirtualInterface ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text
+           -> Value Prelude.Integer -> LocalGatewayVirtualInterface
+mkLocalGatewayVirtualInterface
+  localAddress
+  localGatewayVirtualInterfaceGroupId
+  outpostLagId
+  peerAddress
+  vlan
+  = LocalGatewayVirtualInterface
+      {haddock_workaround_ = (), localAddress = localAddress,
+       localGatewayVirtualInterfaceGroupId = localGatewayVirtualInterfaceGroupId,
+       outpostLagId = outpostLagId, peerAddress = peerAddress,
+       vlan = vlan, peerBgpAsn = Prelude.Nothing,
+       peerBgpAsnExtended = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties LocalGatewayVirtualInterface where
+  toResourceProperties LocalGatewayVirtualInterface {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LocalGatewayVirtualInterface",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LocalAddress" JSON..= localAddress,
+                            "LocalGatewayVirtualInterfaceGroupId"
+                              JSON..= localGatewayVirtualInterfaceGroupId,
+                            "OutpostLagId" JSON..= outpostLagId,
+                            "PeerAddress" JSON..= peerAddress, "Vlan" JSON..= vlan]
+                           (Prelude.catMaybes
+                              [(JSON..=) "PeerBgpAsn" Prelude.<$> peerBgpAsn,
+                               (JSON..=) "PeerBgpAsnExtended" Prelude.<$> peerBgpAsnExtended,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocalGatewayVirtualInterface where
+  toJSON LocalGatewayVirtualInterface {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LocalAddress" JSON..= localAddress,
+               "LocalGatewayVirtualInterfaceGroupId"
+                 JSON..= localGatewayVirtualInterfaceGroupId,
+               "OutpostLagId" JSON..= outpostLagId,
+               "PeerAddress" JSON..= peerAddress, "Vlan" JSON..= vlan]
+              (Prelude.catMaybes
+                 [(JSON..=) "PeerBgpAsn" Prelude.<$> peerBgpAsn,
+                  (JSON..=) "PeerBgpAsnExtended" Prelude.<$> peerBgpAsnExtended,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "LocalAddress" LocalGatewayVirtualInterface where
+  type PropertyType "LocalAddress" LocalGatewayVirtualInterface = Value Prelude.Text
+  set newValue LocalGatewayVirtualInterface {..}
+    = LocalGatewayVirtualInterface {localAddress = newValue, ..}
+instance Property "LocalGatewayVirtualInterfaceGroupId" LocalGatewayVirtualInterface where
+  type PropertyType "LocalGatewayVirtualInterfaceGroupId" LocalGatewayVirtualInterface = Value Prelude.Text
+  set newValue LocalGatewayVirtualInterface {..}
+    = LocalGatewayVirtualInterface
+        {localGatewayVirtualInterfaceGroupId = newValue, ..}
+instance Property "OutpostLagId" LocalGatewayVirtualInterface where
+  type PropertyType "OutpostLagId" LocalGatewayVirtualInterface = Value Prelude.Text
+  set newValue LocalGatewayVirtualInterface {..}
+    = LocalGatewayVirtualInterface {outpostLagId = newValue, ..}
+instance Property "PeerAddress" LocalGatewayVirtualInterface where
+  type PropertyType "PeerAddress" LocalGatewayVirtualInterface = Value Prelude.Text
+  set newValue LocalGatewayVirtualInterface {..}
+    = LocalGatewayVirtualInterface {peerAddress = newValue, ..}
+instance Property "PeerBgpAsn" LocalGatewayVirtualInterface where
+  type PropertyType "PeerBgpAsn" LocalGatewayVirtualInterface = Value Prelude.Integer
+  set newValue LocalGatewayVirtualInterface {..}
+    = LocalGatewayVirtualInterface
+        {peerBgpAsn = Prelude.pure newValue, ..}
+instance Property "PeerBgpAsnExtended" LocalGatewayVirtualInterface where
+  type PropertyType "PeerBgpAsnExtended" LocalGatewayVirtualInterface = Value Prelude.Integer
+  set newValue LocalGatewayVirtualInterface {..}
+    = LocalGatewayVirtualInterface
+        {peerBgpAsnExtended = Prelude.pure newValue, ..}
+instance Property "Tags" LocalGatewayVirtualInterface where
+  type PropertyType "Tags" LocalGatewayVirtualInterface = [Tag]
+  set newValue LocalGatewayVirtualInterface {..}
+    = LocalGatewayVirtualInterface {tags = Prelude.pure newValue, ..}
+instance Property "Vlan" LocalGatewayVirtualInterface where
+  type PropertyType "Vlan" LocalGatewayVirtualInterface = Value Prelude.Integer
+  set newValue LocalGatewayVirtualInterface {..}
+    = LocalGatewayVirtualInterface {vlan = newValue, ..}
diff --git a/gen/Stratosphere/EC2/LocalGatewayVirtualInterfaceGroup.hs b/gen/Stratosphere/EC2/LocalGatewayVirtualInterfaceGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/LocalGatewayVirtualInterfaceGroup.hs
@@ -0,0 +1,70 @@
+module Stratosphere.EC2.LocalGatewayVirtualInterfaceGroup (
+        LocalGatewayVirtualInterfaceGroup(..),
+        mkLocalGatewayVirtualInterfaceGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data LocalGatewayVirtualInterfaceGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterfacegroup.html>
+    LocalGatewayVirtualInterfaceGroup {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterfacegroup.html#cfn-ec2-localgatewayvirtualinterfacegroup-localbgpasn>
+                                       localBgpAsn :: (Prelude.Maybe (Value Prelude.Integer)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterfacegroup.html#cfn-ec2-localgatewayvirtualinterfacegroup-localbgpasnextended>
+                                       localBgpAsnExtended :: (Prelude.Maybe (Value Prelude.Integer)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterfacegroup.html#cfn-ec2-localgatewayvirtualinterfacegroup-localgatewayid>
+                                       localGatewayId :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-localgatewayvirtualinterfacegroup.html#cfn-ec2-localgatewayvirtualinterfacegroup-tags>
+                                       tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLocalGatewayVirtualInterfaceGroup ::
+  Value Prelude.Text -> LocalGatewayVirtualInterfaceGroup
+mkLocalGatewayVirtualInterfaceGroup localGatewayId
+  = LocalGatewayVirtualInterfaceGroup
+      {haddock_workaround_ = (), localGatewayId = localGatewayId,
+       localBgpAsn = Prelude.Nothing,
+       localBgpAsnExtended = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties LocalGatewayVirtualInterfaceGroup where
+  toResourceProperties LocalGatewayVirtualInterfaceGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::LocalGatewayVirtualInterfaceGroup",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["LocalGatewayId" JSON..= localGatewayId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LocalBgpAsn" Prelude.<$> localBgpAsn,
+                               (JSON..=) "LocalBgpAsnExtended" Prelude.<$> localBgpAsnExtended,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON LocalGatewayVirtualInterfaceGroup where
+  toJSON LocalGatewayVirtualInterfaceGroup {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["LocalGatewayId" JSON..= localGatewayId]
+              (Prelude.catMaybes
+                 [(JSON..=) "LocalBgpAsn" Prelude.<$> localBgpAsn,
+                  (JSON..=) "LocalBgpAsnExtended" Prelude.<$> localBgpAsnExtended,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "LocalBgpAsn" LocalGatewayVirtualInterfaceGroup where
+  type PropertyType "LocalBgpAsn" LocalGatewayVirtualInterfaceGroup = Value Prelude.Integer
+  set newValue LocalGatewayVirtualInterfaceGroup {..}
+    = LocalGatewayVirtualInterfaceGroup
+        {localBgpAsn = Prelude.pure newValue, ..}
+instance Property "LocalBgpAsnExtended" LocalGatewayVirtualInterfaceGroup where
+  type PropertyType "LocalBgpAsnExtended" LocalGatewayVirtualInterfaceGroup = Value Prelude.Integer
+  set newValue LocalGatewayVirtualInterfaceGroup {..}
+    = LocalGatewayVirtualInterfaceGroup
+        {localBgpAsnExtended = Prelude.pure newValue, ..}
+instance Property "LocalGatewayId" LocalGatewayVirtualInterfaceGroup where
+  type PropertyType "LocalGatewayId" LocalGatewayVirtualInterfaceGroup = Value Prelude.Text
+  set newValue LocalGatewayVirtualInterfaceGroup {..}
+    = LocalGatewayVirtualInterfaceGroup {localGatewayId = newValue, ..}
+instance Property "Tags" LocalGatewayVirtualInterfaceGroup where
+  type PropertyType "Tags" LocalGatewayVirtualInterfaceGroup = [Tag]
+  set newValue LocalGatewayVirtualInterfaceGroup {..}
+    = LocalGatewayVirtualInterfaceGroup
+        {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NatGateway.hs b/gen/Stratosphere/EC2/NatGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NatGateway.hs
@@ -0,0 +1,126 @@
+module Stratosphere.EC2.NatGateway (
+        NatGateway(..), mkNatGateway
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data NatGateway
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html>
+    NatGateway {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-allocationid>
+                allocationId :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-connectivitytype>
+                connectivityType :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-maxdraindurationseconds>
+                maxDrainDurationSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-privateipaddress>
+                privateIpAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-secondaryallocationids>
+                secondaryAllocationIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-secondaryprivateipaddresscount>
+                secondaryPrivateIpAddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-secondaryprivateipaddresses>
+                secondaryPrivateIpAddresses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-subnetid>
+                subnetId :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-tags>
+                tags :: (Prelude.Maybe [Tag]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-natgateway.html#cfn-ec2-natgateway-vpcid>
+                vpcId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNatGateway :: NatGateway
+mkNatGateway
+  = NatGateway
+      {haddock_workaround_ = (), allocationId = Prelude.Nothing,
+       connectivityType = Prelude.Nothing,
+       maxDrainDurationSeconds = Prelude.Nothing,
+       privateIpAddress = Prelude.Nothing,
+       secondaryAllocationIds = Prelude.Nothing,
+       secondaryPrivateIpAddressCount = Prelude.Nothing,
+       secondaryPrivateIpAddresses = Prelude.Nothing,
+       subnetId = Prelude.Nothing, tags = Prelude.Nothing,
+       vpcId = Prelude.Nothing}
+instance ToResourceProperties NatGateway where
+  toResourceProperties NatGateway {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NatGateway", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AllocationId" Prelude.<$> allocationId,
+                            (JSON..=) "ConnectivityType" Prelude.<$> connectivityType,
+                            (JSON..=) "MaxDrainDurationSeconds"
+                              Prelude.<$> maxDrainDurationSeconds,
+                            (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+                            (JSON..=) "SecondaryAllocationIds"
+                              Prelude.<$> secondaryAllocationIds,
+                            (JSON..=) "SecondaryPrivateIpAddressCount"
+                              Prelude.<$> secondaryPrivateIpAddressCount,
+                            (JSON..=) "SecondaryPrivateIpAddresses"
+                              Prelude.<$> secondaryPrivateIpAddresses,
+                            (JSON..=) "SubnetId" Prelude.<$> subnetId,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "VpcId" Prelude.<$> vpcId])}
+instance JSON.ToJSON NatGateway where
+  toJSON NatGateway {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AllocationId" Prelude.<$> allocationId,
+               (JSON..=) "ConnectivityType" Prelude.<$> connectivityType,
+               (JSON..=) "MaxDrainDurationSeconds"
+                 Prelude.<$> maxDrainDurationSeconds,
+               (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+               (JSON..=) "SecondaryAllocationIds"
+                 Prelude.<$> secondaryAllocationIds,
+               (JSON..=) "SecondaryPrivateIpAddressCount"
+                 Prelude.<$> secondaryPrivateIpAddressCount,
+               (JSON..=) "SecondaryPrivateIpAddresses"
+                 Prelude.<$> secondaryPrivateIpAddresses,
+               (JSON..=) "SubnetId" Prelude.<$> subnetId,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "VpcId" Prelude.<$> vpcId]))
+instance Property "AllocationId" NatGateway where
+  type PropertyType "AllocationId" NatGateway = Value Prelude.Text
+  set newValue NatGateway {..}
+    = NatGateway {allocationId = Prelude.pure newValue, ..}
+instance Property "ConnectivityType" NatGateway where
+  type PropertyType "ConnectivityType" NatGateway = Value Prelude.Text
+  set newValue NatGateway {..}
+    = NatGateway {connectivityType = Prelude.pure newValue, ..}
+instance Property "MaxDrainDurationSeconds" NatGateway where
+  type PropertyType "MaxDrainDurationSeconds" NatGateway = Value Prelude.Integer
+  set newValue NatGateway {..}
+    = NatGateway {maxDrainDurationSeconds = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddress" NatGateway where
+  type PropertyType "PrivateIpAddress" NatGateway = Value Prelude.Text
+  set newValue NatGateway {..}
+    = NatGateway {privateIpAddress = Prelude.pure newValue, ..}
+instance Property "SecondaryAllocationIds" NatGateway where
+  type PropertyType "SecondaryAllocationIds" NatGateway = ValueList Prelude.Text
+  set newValue NatGateway {..}
+    = NatGateway {secondaryAllocationIds = Prelude.pure newValue, ..}
+instance Property "SecondaryPrivateIpAddressCount" NatGateway where
+  type PropertyType "SecondaryPrivateIpAddressCount" NatGateway = Value Prelude.Integer
+  set newValue NatGateway {..}
+    = NatGateway
+        {secondaryPrivateIpAddressCount = Prelude.pure newValue, ..}
+instance Property "SecondaryPrivateIpAddresses" NatGateway where
+  type PropertyType "SecondaryPrivateIpAddresses" NatGateway = ValueList Prelude.Text
+  set newValue NatGateway {..}
+    = NatGateway
+        {secondaryPrivateIpAddresses = Prelude.pure newValue, ..}
+instance Property "SubnetId" NatGateway where
+  type PropertyType "SubnetId" NatGateway = Value Prelude.Text
+  set newValue NatGateway {..}
+    = NatGateway {subnetId = Prelude.pure newValue, ..}
+instance Property "Tags" NatGateway where
+  type PropertyType "Tags" NatGateway = [Tag]
+  set newValue NatGateway {..}
+    = NatGateway {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" NatGateway where
+  type PropertyType "VpcId" NatGateway = Value Prelude.Text
+  set newValue NatGateway {..}
+    = NatGateway {vpcId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkAcl.hs b/gen/Stratosphere/EC2/NetworkAcl.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkAcl.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EC2.NetworkAcl (
+        NetworkAcl(..), mkNetworkAcl
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data NetworkAcl
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkacl.html>
+    NetworkAcl {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkacl.html#cfn-ec2-networkacl-tags>
+                tags :: (Prelude.Maybe [Tag]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkacl.html#cfn-ec2-networkacl-vpcid>
+                vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkAcl :: Value Prelude.Text -> NetworkAcl
+mkNetworkAcl vpcId
+  = NetworkAcl
+      {haddock_workaround_ = (), vpcId = vpcId, tags = Prelude.Nothing}
+instance ToResourceProperties NetworkAcl where
+  toResourceProperties NetworkAcl {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkAcl", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON NetworkAcl where
+  toJSON NetworkAcl {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcId" JSON..= vpcId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Tags" NetworkAcl where
+  type PropertyType "Tags" NetworkAcl = [Tag]
+  set newValue NetworkAcl {..}
+    = NetworkAcl {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" NetworkAcl where
+  type PropertyType "VpcId" NetworkAcl = Value Prelude.Text
+  set newValue NetworkAcl {..} = NetworkAcl {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkAclEntry.hs b/gen/Stratosphere/EC2/NetworkAclEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkAclEntry.hs
@@ -0,0 +1,107 @@
+module Stratosphere.EC2.NetworkAclEntry (
+        module Exports, NetworkAclEntry(..), mkNetworkAclEntry
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkAclEntry.IcmpProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkAclEntry.PortRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkAclEntry
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html>
+    NetworkAclEntry {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-cidrblock>
+                     cidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-egress>
+                     egress :: (Prelude.Maybe (Value Prelude.Bool)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-icmp>
+                     icmp :: (Prelude.Maybe IcmpProperty),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-ipv6cidrblock>
+                     ipv6CidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-networkaclid>
+                     networkAclId :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-portrange>
+                     portRange :: (Prelude.Maybe PortRangeProperty),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-protocol>
+                     protocol :: (Value Prelude.Integer),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-ruleaction>
+                     ruleAction :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkaclentry.html#cfn-ec2-networkaclentry-rulenumber>
+                     ruleNumber :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkAclEntry ::
+  Value Prelude.Text
+  -> Value Prelude.Integer
+     -> Value Prelude.Text -> Value Prelude.Integer -> NetworkAclEntry
+mkNetworkAclEntry networkAclId protocol ruleAction ruleNumber
+  = NetworkAclEntry
+      {haddock_workaround_ = (), networkAclId = networkAclId,
+       protocol = protocol, ruleAction = ruleAction,
+       ruleNumber = ruleNumber, cidrBlock = Prelude.Nothing,
+       egress = Prelude.Nothing, icmp = Prelude.Nothing,
+       ipv6CidrBlock = Prelude.Nothing, portRange = Prelude.Nothing}
+instance ToResourceProperties NetworkAclEntry where
+  toResourceProperties NetworkAclEntry {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkAclEntry",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["NetworkAclId" JSON..= networkAclId, "Protocol" JSON..= protocol,
+                            "RuleAction" JSON..= ruleAction, "RuleNumber" JSON..= ruleNumber]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CidrBlock" Prelude.<$> cidrBlock,
+                               (JSON..=) "Egress" Prelude.<$> egress,
+                               (JSON..=) "Icmp" Prelude.<$> icmp,
+                               (JSON..=) "Ipv6CidrBlock" Prelude.<$> ipv6CidrBlock,
+                               (JSON..=) "PortRange" Prelude.<$> portRange]))}
+instance JSON.ToJSON NetworkAclEntry where
+  toJSON NetworkAclEntry {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["NetworkAclId" JSON..= networkAclId, "Protocol" JSON..= protocol,
+               "RuleAction" JSON..= ruleAction, "RuleNumber" JSON..= ruleNumber]
+              (Prelude.catMaybes
+                 [(JSON..=) "CidrBlock" Prelude.<$> cidrBlock,
+                  (JSON..=) "Egress" Prelude.<$> egress,
+                  (JSON..=) "Icmp" Prelude.<$> icmp,
+                  (JSON..=) "Ipv6CidrBlock" Prelude.<$> ipv6CidrBlock,
+                  (JSON..=) "PortRange" Prelude.<$> portRange])))
+instance Property "CidrBlock" NetworkAclEntry where
+  type PropertyType "CidrBlock" NetworkAclEntry = Value Prelude.Text
+  set newValue NetworkAclEntry {..}
+    = NetworkAclEntry {cidrBlock = Prelude.pure newValue, ..}
+instance Property "Egress" NetworkAclEntry where
+  type PropertyType "Egress" NetworkAclEntry = Value Prelude.Bool
+  set newValue NetworkAclEntry {..}
+    = NetworkAclEntry {egress = Prelude.pure newValue, ..}
+instance Property "Icmp" NetworkAclEntry where
+  type PropertyType "Icmp" NetworkAclEntry = IcmpProperty
+  set newValue NetworkAclEntry {..}
+    = NetworkAclEntry {icmp = Prelude.pure newValue, ..}
+instance Property "Ipv6CidrBlock" NetworkAclEntry where
+  type PropertyType "Ipv6CidrBlock" NetworkAclEntry = Value Prelude.Text
+  set newValue NetworkAclEntry {..}
+    = NetworkAclEntry {ipv6CidrBlock = Prelude.pure newValue, ..}
+instance Property "NetworkAclId" NetworkAclEntry where
+  type PropertyType "NetworkAclId" NetworkAclEntry = Value Prelude.Text
+  set newValue NetworkAclEntry {..}
+    = NetworkAclEntry {networkAclId = newValue, ..}
+instance Property "PortRange" NetworkAclEntry where
+  type PropertyType "PortRange" NetworkAclEntry = PortRangeProperty
+  set newValue NetworkAclEntry {..}
+    = NetworkAclEntry {portRange = Prelude.pure newValue, ..}
+instance Property "Protocol" NetworkAclEntry where
+  type PropertyType "Protocol" NetworkAclEntry = Value Prelude.Integer
+  set newValue NetworkAclEntry {..}
+    = NetworkAclEntry {protocol = newValue, ..}
+instance Property "RuleAction" NetworkAclEntry where
+  type PropertyType "RuleAction" NetworkAclEntry = Value Prelude.Text
+  set newValue NetworkAclEntry {..}
+    = NetworkAclEntry {ruleAction = newValue, ..}
+instance Property "RuleNumber" NetworkAclEntry where
+  type PropertyType "RuleNumber" NetworkAclEntry = Value Prelude.Integer
+  set newValue NetworkAclEntry {..}
+    = NetworkAclEntry {ruleNumber = newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkAclEntry/IcmpProperty.hs b/gen/Stratosphere/EC2/NetworkAclEntry/IcmpProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkAclEntry/IcmpProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.NetworkAclEntry.IcmpProperty (
+        IcmpProperty(..), mkIcmpProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IcmpProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html>
+    IcmpProperty {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html#cfn-ec2-networkaclentry-icmp-code>
+                  code :: (Prelude.Maybe (Value Prelude.Integer)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-icmp.html#cfn-ec2-networkaclentry-icmp-type>
+                  type' :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIcmpProperty :: IcmpProperty
+mkIcmpProperty
+  = IcmpProperty
+      {haddock_workaround_ = (), code = Prelude.Nothing,
+       type' = Prelude.Nothing}
+instance ToResourceProperties IcmpProperty where
+  toResourceProperties IcmpProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkAclEntry.Icmp",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Code" Prelude.<$> code,
+                            (JSON..=) "Type" Prelude.<$> type'])}
+instance JSON.ToJSON IcmpProperty where
+  toJSON IcmpProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Code" Prelude.<$> code,
+               (JSON..=) "Type" Prelude.<$> type']))
+instance Property "Code" IcmpProperty where
+  type PropertyType "Code" IcmpProperty = Value Prelude.Integer
+  set newValue IcmpProperty {..}
+    = IcmpProperty {code = Prelude.pure newValue, ..}
+instance Property "Type" IcmpProperty where
+  type PropertyType "Type" IcmpProperty = Value Prelude.Integer
+  set newValue IcmpProperty {..}
+    = IcmpProperty {type' = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkAclEntry/IcmpProperty.hs-boot b/gen/Stratosphere/EC2/NetworkAclEntry/IcmpProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkAclEntry/IcmpProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkAclEntry.IcmpProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IcmpProperty :: Prelude.Type
+instance ToResourceProperties IcmpProperty
+instance Prelude.Eq IcmpProperty
+instance Prelude.Show IcmpProperty
+instance JSON.ToJSON IcmpProperty
diff --git a/gen/Stratosphere/EC2/NetworkAclEntry/PortRangeProperty.hs b/gen/Stratosphere/EC2/NetworkAclEntry/PortRangeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkAclEntry/PortRangeProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.NetworkAclEntry.PortRangeProperty (
+        PortRangeProperty(..), mkPortRangeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PortRangeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html>
+    PortRangeProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html#cfn-ec2-networkaclentry-portrange-from>
+                       from :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkaclentry-portrange.html#cfn-ec2-networkaclentry-portrange-to>
+                       to :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPortRangeProperty :: PortRangeProperty
+mkPortRangeProperty
+  = PortRangeProperty
+      {haddock_workaround_ = (), from = Prelude.Nothing,
+       to = Prelude.Nothing}
+instance ToResourceProperties PortRangeProperty where
+  toResourceProperties PortRangeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkAclEntry.PortRange",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "From" Prelude.<$> from,
+                            (JSON..=) "To" Prelude.<$> to])}
+instance JSON.ToJSON PortRangeProperty where
+  toJSON PortRangeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "From" Prelude.<$> from,
+               (JSON..=) "To" Prelude.<$> to]))
+instance Property "From" PortRangeProperty where
+  type PropertyType "From" PortRangeProperty = Value Prelude.Integer
+  set newValue PortRangeProperty {..}
+    = PortRangeProperty {from = Prelude.pure newValue, ..}
+instance Property "To" PortRangeProperty where
+  type PropertyType "To" PortRangeProperty = Value Prelude.Integer
+  set newValue PortRangeProperty {..}
+    = PortRangeProperty {to = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkAclEntry/PortRangeProperty.hs-boot b/gen/Stratosphere/EC2/NetworkAclEntry/PortRangeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkAclEntry/PortRangeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkAclEntry.PortRangeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PortRangeProperty :: Prelude.Type
+instance ToResourceProperties PortRangeProperty
+instance Prelude.Eq PortRangeProperty
+instance Prelude.Show PortRangeProperty
+instance JSON.ToJSON PortRangeProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope.hs b/gen/Stratosphere/EC2/NetworkInsightsAccessScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope.hs
@@ -0,0 +1,57 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope (
+        module Exports, NetworkInsightsAccessScope(..),
+        mkNetworkInsightsAccessScope
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAccessScope.AccessScopePathRequestProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+data NetworkInsightsAccessScope
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscope.html>
+    NetworkInsightsAccessScope {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscope.html#cfn-ec2-networkinsightsaccessscope-excludepaths>
+                                excludePaths :: (Prelude.Maybe [AccessScopePathRequestProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscope.html#cfn-ec2-networkinsightsaccessscope-matchpaths>
+                                matchPaths :: (Prelude.Maybe [AccessScopePathRequestProperty]),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscope.html#cfn-ec2-networkinsightsaccessscope-tags>
+                                tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInsightsAccessScope :: NetworkInsightsAccessScope
+mkNetworkInsightsAccessScope
+  = NetworkInsightsAccessScope
+      {haddock_workaround_ = (), excludePaths = Prelude.Nothing,
+       matchPaths = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties NetworkInsightsAccessScope where
+  toResourceProperties NetworkInsightsAccessScope {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAccessScope",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ExcludePaths" Prelude.<$> excludePaths,
+                            (JSON..=) "MatchPaths" Prelude.<$> matchPaths,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON NetworkInsightsAccessScope where
+  toJSON NetworkInsightsAccessScope {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ExcludePaths" Prelude.<$> excludePaths,
+               (JSON..=) "MatchPaths" Prelude.<$> matchPaths,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ExcludePaths" NetworkInsightsAccessScope where
+  type PropertyType "ExcludePaths" NetworkInsightsAccessScope = [AccessScopePathRequestProperty]
+  set newValue NetworkInsightsAccessScope {..}
+    = NetworkInsightsAccessScope
+        {excludePaths = Prelude.pure newValue, ..}
+instance Property "MatchPaths" NetworkInsightsAccessScope where
+  type PropertyType "MatchPaths" NetworkInsightsAccessScope = [AccessScopePathRequestProperty]
+  set newValue NetworkInsightsAccessScope {..}
+    = NetworkInsightsAccessScope
+        {matchPaths = Prelude.pure newValue, ..}
+instance Property "Tags" NetworkInsightsAccessScope where
+  type PropertyType "Tags" NetworkInsightsAccessScope = [Tag]
+  set newValue NetworkInsightsAccessScope {..}
+    = NetworkInsightsAccessScope {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/AccessScopePathRequestProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/AccessScopePathRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/AccessScopePathRequestProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.AccessScopePathRequestProperty (
+        module Exports, AccessScopePathRequestProperty(..),
+        mkAccessScopePathRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAccessScope.PathStatementRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAccessScope.ThroughResourcesStatementRequestProperty as Exports
+import Stratosphere.ResourceProperties
+data AccessScopePathRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-accessscopepathrequest.html>
+    AccessScopePathRequestProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-accessscopepathrequest.html#cfn-ec2-networkinsightsaccessscope-accessscopepathrequest-destination>
+                                    destination :: (Prelude.Maybe PathStatementRequestProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-accessscopepathrequest.html#cfn-ec2-networkinsightsaccessscope-accessscopepathrequest-source>
+                                    source :: (Prelude.Maybe PathStatementRequestProperty),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-accessscopepathrequest.html#cfn-ec2-networkinsightsaccessscope-accessscopepathrequest-throughresources>
+                                    throughResources :: (Prelude.Maybe [ThroughResourcesStatementRequestProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAccessScopePathRequestProperty :: AccessScopePathRequestProperty
+mkAccessScopePathRequestProperty
+  = AccessScopePathRequestProperty
+      {haddock_workaround_ = (), destination = Prelude.Nothing,
+       source = Prelude.Nothing, throughResources = Prelude.Nothing}
+instance ToResourceProperties AccessScopePathRequestProperty where
+  toResourceProperties AccessScopePathRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAccessScope.AccessScopePathRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Destination" Prelude.<$> destination,
+                            (JSON..=) "Source" Prelude.<$> source,
+                            (JSON..=) "ThroughResources" Prelude.<$> throughResources])}
+instance JSON.ToJSON AccessScopePathRequestProperty where
+  toJSON AccessScopePathRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Destination" Prelude.<$> destination,
+               (JSON..=) "Source" Prelude.<$> source,
+               (JSON..=) "ThroughResources" Prelude.<$> throughResources]))
+instance Property "Destination" AccessScopePathRequestProperty where
+  type PropertyType "Destination" AccessScopePathRequestProperty = PathStatementRequestProperty
+  set newValue AccessScopePathRequestProperty {..}
+    = AccessScopePathRequestProperty
+        {destination = Prelude.pure newValue, ..}
+instance Property "Source" AccessScopePathRequestProperty where
+  type PropertyType "Source" AccessScopePathRequestProperty = PathStatementRequestProperty
+  set newValue AccessScopePathRequestProperty {..}
+    = AccessScopePathRequestProperty
+        {source = Prelude.pure newValue, ..}
+instance Property "ThroughResources" AccessScopePathRequestProperty where
+  type PropertyType "ThroughResources" AccessScopePathRequestProperty = [ThroughResourcesStatementRequestProperty]
+  set newValue AccessScopePathRequestProperty {..}
+    = AccessScopePathRequestProperty
+        {throughResources = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/AccessScopePathRequestProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/AccessScopePathRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/AccessScopePathRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.AccessScopePathRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AccessScopePathRequestProperty :: Prelude.Type
+instance ToResourceProperties AccessScopePathRequestProperty
+instance Prelude.Eq AccessScopePathRequestProperty
+instance Prelude.Show AccessScopePathRequestProperty
+instance JSON.ToJSON AccessScopePathRequestProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PacketHeaderStatementRequestProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PacketHeaderStatementRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PacketHeaderStatementRequestProperty.hs
@@ -0,0 +1,99 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.PacketHeaderStatementRequestProperty (
+        PacketHeaderStatementRequestProperty(..),
+        mkPacketHeaderStatementRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PacketHeaderStatementRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html>
+    PacketHeaderStatementRequestProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-destinationaddresses>
+                                          destinationAddresses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-destinationports>
+                                          destinationPorts :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-destinationprefixlists>
+                                          destinationPrefixLists :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-protocols>
+                                          protocols :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-sourceaddresses>
+                                          sourceAddresses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-sourceports>
+                                          sourcePorts :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-packetheaderstatementrequest.html#cfn-ec2-networkinsightsaccessscope-packetheaderstatementrequest-sourceprefixlists>
+                                          sourcePrefixLists :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPacketHeaderStatementRequestProperty ::
+  PacketHeaderStatementRequestProperty
+mkPacketHeaderStatementRequestProperty
+  = PacketHeaderStatementRequestProperty
+      {haddock_workaround_ = (), destinationAddresses = Prelude.Nothing,
+       destinationPorts = Prelude.Nothing,
+       destinationPrefixLists = Prelude.Nothing,
+       protocols = Prelude.Nothing, sourceAddresses = Prelude.Nothing,
+       sourcePorts = Prelude.Nothing, sourcePrefixLists = Prelude.Nothing}
+instance ToResourceProperties PacketHeaderStatementRequestProperty where
+  toResourceProperties PacketHeaderStatementRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAccessScope.PacketHeaderStatementRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DestinationAddresses" Prelude.<$> destinationAddresses,
+                            (JSON..=) "DestinationPorts" Prelude.<$> destinationPorts,
+                            (JSON..=) "DestinationPrefixLists"
+                              Prelude.<$> destinationPrefixLists,
+                            (JSON..=) "Protocols" Prelude.<$> protocols,
+                            (JSON..=) "SourceAddresses" Prelude.<$> sourceAddresses,
+                            (JSON..=) "SourcePorts" Prelude.<$> sourcePorts,
+                            (JSON..=) "SourcePrefixLists" Prelude.<$> sourcePrefixLists])}
+instance JSON.ToJSON PacketHeaderStatementRequestProperty where
+  toJSON PacketHeaderStatementRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DestinationAddresses" Prelude.<$> destinationAddresses,
+               (JSON..=) "DestinationPorts" Prelude.<$> destinationPorts,
+               (JSON..=) "DestinationPrefixLists"
+                 Prelude.<$> destinationPrefixLists,
+               (JSON..=) "Protocols" Prelude.<$> protocols,
+               (JSON..=) "SourceAddresses" Prelude.<$> sourceAddresses,
+               (JSON..=) "SourcePorts" Prelude.<$> sourcePorts,
+               (JSON..=) "SourcePrefixLists" Prelude.<$> sourcePrefixLists]))
+instance Property "DestinationAddresses" PacketHeaderStatementRequestProperty where
+  type PropertyType "DestinationAddresses" PacketHeaderStatementRequestProperty = ValueList Prelude.Text
+  set newValue PacketHeaderStatementRequestProperty {..}
+    = PacketHeaderStatementRequestProperty
+        {destinationAddresses = Prelude.pure newValue, ..}
+instance Property "DestinationPorts" PacketHeaderStatementRequestProperty where
+  type PropertyType "DestinationPorts" PacketHeaderStatementRequestProperty = ValueList Prelude.Text
+  set newValue PacketHeaderStatementRequestProperty {..}
+    = PacketHeaderStatementRequestProperty
+        {destinationPorts = Prelude.pure newValue, ..}
+instance Property "DestinationPrefixLists" PacketHeaderStatementRequestProperty where
+  type PropertyType "DestinationPrefixLists" PacketHeaderStatementRequestProperty = ValueList Prelude.Text
+  set newValue PacketHeaderStatementRequestProperty {..}
+    = PacketHeaderStatementRequestProperty
+        {destinationPrefixLists = Prelude.pure newValue, ..}
+instance Property "Protocols" PacketHeaderStatementRequestProperty where
+  type PropertyType "Protocols" PacketHeaderStatementRequestProperty = ValueList Prelude.Text
+  set newValue PacketHeaderStatementRequestProperty {..}
+    = PacketHeaderStatementRequestProperty
+        {protocols = Prelude.pure newValue, ..}
+instance Property "SourceAddresses" PacketHeaderStatementRequestProperty where
+  type PropertyType "SourceAddresses" PacketHeaderStatementRequestProperty = ValueList Prelude.Text
+  set newValue PacketHeaderStatementRequestProperty {..}
+    = PacketHeaderStatementRequestProperty
+        {sourceAddresses = Prelude.pure newValue, ..}
+instance Property "SourcePorts" PacketHeaderStatementRequestProperty where
+  type PropertyType "SourcePorts" PacketHeaderStatementRequestProperty = ValueList Prelude.Text
+  set newValue PacketHeaderStatementRequestProperty {..}
+    = PacketHeaderStatementRequestProperty
+        {sourcePorts = Prelude.pure newValue, ..}
+instance Property "SourcePrefixLists" PacketHeaderStatementRequestProperty where
+  type PropertyType "SourcePrefixLists" PacketHeaderStatementRequestProperty = ValueList Prelude.Text
+  set newValue PacketHeaderStatementRequestProperty {..}
+    = PacketHeaderStatementRequestProperty
+        {sourcePrefixLists = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PacketHeaderStatementRequestProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PacketHeaderStatementRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PacketHeaderStatementRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.PacketHeaderStatementRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PacketHeaderStatementRequestProperty :: Prelude.Type
+instance ToResourceProperties PacketHeaderStatementRequestProperty
+instance Prelude.Eq PacketHeaderStatementRequestProperty
+instance Prelude.Show PacketHeaderStatementRequestProperty
+instance JSON.ToJSON PacketHeaderStatementRequestProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PathStatementRequestProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PathStatementRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PathStatementRequestProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.PathStatementRequestProperty (
+        module Exports, PathStatementRequestProperty(..),
+        mkPathStatementRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAccessScope.PacketHeaderStatementRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAccessScope.ResourceStatementRequestProperty as Exports
+import Stratosphere.ResourceProperties
+data PathStatementRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-pathstatementrequest.html>
+    PathStatementRequestProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-pathstatementrequest.html#cfn-ec2-networkinsightsaccessscope-pathstatementrequest-packetheaderstatement>
+                                  packetHeaderStatement :: (Prelude.Maybe PacketHeaderStatementRequestProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-pathstatementrequest.html#cfn-ec2-networkinsightsaccessscope-pathstatementrequest-resourcestatement>
+                                  resourceStatement :: (Prelude.Maybe ResourceStatementRequestProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPathStatementRequestProperty :: PathStatementRequestProperty
+mkPathStatementRequestProperty
+  = PathStatementRequestProperty
+      {haddock_workaround_ = (), packetHeaderStatement = Prelude.Nothing,
+       resourceStatement = Prelude.Nothing}
+instance ToResourceProperties PathStatementRequestProperty where
+  toResourceProperties PathStatementRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAccessScope.PathStatementRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "PacketHeaderStatement"
+                              Prelude.<$> packetHeaderStatement,
+                            (JSON..=) "ResourceStatement" Prelude.<$> resourceStatement])}
+instance JSON.ToJSON PathStatementRequestProperty where
+  toJSON PathStatementRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "PacketHeaderStatement"
+                 Prelude.<$> packetHeaderStatement,
+               (JSON..=) "ResourceStatement" Prelude.<$> resourceStatement]))
+instance Property "PacketHeaderStatement" PathStatementRequestProperty where
+  type PropertyType "PacketHeaderStatement" PathStatementRequestProperty = PacketHeaderStatementRequestProperty
+  set newValue PathStatementRequestProperty {..}
+    = PathStatementRequestProperty
+        {packetHeaderStatement = Prelude.pure newValue, ..}
+instance Property "ResourceStatement" PathStatementRequestProperty where
+  type PropertyType "ResourceStatement" PathStatementRequestProperty = ResourceStatementRequestProperty
+  set newValue PathStatementRequestProperty {..}
+    = PathStatementRequestProperty
+        {resourceStatement = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PathStatementRequestProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PathStatementRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/PathStatementRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.PathStatementRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PathStatementRequestProperty :: Prelude.Type
+instance ToResourceProperties PathStatementRequestProperty
+instance Prelude.Eq PathStatementRequestProperty
+instance Prelude.Show PathStatementRequestProperty
+instance JSON.ToJSON PathStatementRequestProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ResourceStatementRequestProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ResourceStatementRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ResourceStatementRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.ResourceStatementRequestProperty (
+        ResourceStatementRequestProperty(..),
+        mkResourceStatementRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ResourceStatementRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-resourcestatementrequest.html>
+    ResourceStatementRequestProperty {haddock_workaround_ :: (),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-resourcestatementrequest.html#cfn-ec2-networkinsightsaccessscope-resourcestatementrequest-resourcetypes>
+                                      resourceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-resourcestatementrequest.html#cfn-ec2-networkinsightsaccessscope-resourcestatementrequest-resources>
+                                      resources :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkResourceStatementRequestProperty ::
+  ResourceStatementRequestProperty
+mkResourceStatementRequestProperty
+  = ResourceStatementRequestProperty
+      {haddock_workaround_ = (), resourceTypes = Prelude.Nothing,
+       resources = Prelude.Nothing}
+instance ToResourceProperties ResourceStatementRequestProperty where
+  toResourceProperties ResourceStatementRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAccessScope.ResourceStatementRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ResourceTypes" Prelude.<$> resourceTypes,
+                            (JSON..=) "Resources" Prelude.<$> resources])}
+instance JSON.ToJSON ResourceStatementRequestProperty where
+  toJSON ResourceStatementRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ResourceTypes" Prelude.<$> resourceTypes,
+               (JSON..=) "Resources" Prelude.<$> resources]))
+instance Property "ResourceTypes" ResourceStatementRequestProperty where
+  type PropertyType "ResourceTypes" ResourceStatementRequestProperty = ValueList Prelude.Text
+  set newValue ResourceStatementRequestProperty {..}
+    = ResourceStatementRequestProperty
+        {resourceTypes = Prelude.pure newValue, ..}
+instance Property "Resources" ResourceStatementRequestProperty where
+  type PropertyType "Resources" ResourceStatementRequestProperty = ValueList Prelude.Text
+  set newValue ResourceStatementRequestProperty {..}
+    = ResourceStatementRequestProperty
+        {resources = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ResourceStatementRequestProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ResourceStatementRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ResourceStatementRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.ResourceStatementRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ResourceStatementRequestProperty :: Prelude.Type
+instance ToResourceProperties ResourceStatementRequestProperty
+instance Prelude.Eq ResourceStatementRequestProperty
+instance Prelude.Show ResourceStatementRequestProperty
+instance JSON.ToJSON ResourceStatementRequestProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ThroughResourcesStatementRequestProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ThroughResourcesStatementRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ThroughResourcesStatementRequestProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.ThroughResourcesStatementRequestProperty (
+        module Exports, ThroughResourcesStatementRequestProperty(..),
+        mkThroughResourcesStatementRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAccessScope.ResourceStatementRequestProperty as Exports
+import Stratosphere.ResourceProperties
+data ThroughResourcesStatementRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-throughresourcesstatementrequest.html>
+    ThroughResourcesStatementRequestProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsaccessscope-throughresourcesstatementrequest.html#cfn-ec2-networkinsightsaccessscope-throughresourcesstatementrequest-resourcestatement>
+                                              resourceStatement :: (Prelude.Maybe ResourceStatementRequestProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkThroughResourcesStatementRequestProperty ::
+  ThroughResourcesStatementRequestProperty
+mkThroughResourcesStatementRequestProperty
+  = ThroughResourcesStatementRequestProperty
+      {haddock_workaround_ = (), resourceStatement = Prelude.Nothing}
+instance ToResourceProperties ThroughResourcesStatementRequestProperty where
+  toResourceProperties ThroughResourcesStatementRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAccessScope.ThroughResourcesStatementRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ResourceStatement" Prelude.<$> resourceStatement])}
+instance JSON.ToJSON ThroughResourcesStatementRequestProperty where
+  toJSON ThroughResourcesStatementRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ResourceStatement" Prelude.<$> resourceStatement]))
+instance Property "ResourceStatement" ThroughResourcesStatementRequestProperty where
+  type PropertyType "ResourceStatement" ThroughResourcesStatementRequestProperty = ResourceStatementRequestProperty
+  set newValue ThroughResourcesStatementRequestProperty {..}
+    = ThroughResourcesStatementRequestProperty
+        {resourceStatement = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ThroughResourcesStatementRequestProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ThroughResourcesStatementRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScope/ThroughResourcesStatementRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAccessScope.ThroughResourcesStatementRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ThroughResourcesStatementRequestProperty :: Prelude.Type
+instance ToResourceProperties ThroughResourcesStatementRequestProperty
+instance Prelude.Eq ThroughResourcesStatementRequestProperty
+instance Prelude.Show ThroughResourcesStatementRequestProperty
+instance JSON.ToJSON ThroughResourcesStatementRequestProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAccessScopeAnalysis.hs b/gen/Stratosphere/EC2/NetworkInsightsAccessScopeAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAccessScopeAnalysis.hs
@@ -0,0 +1,53 @@
+module Stratosphere.EC2.NetworkInsightsAccessScopeAnalysis (
+        NetworkInsightsAccessScopeAnalysis(..),
+        mkNetworkInsightsAccessScopeAnalysis
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data NetworkInsightsAccessScopeAnalysis
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscopeanalysis.html>
+    NetworkInsightsAccessScopeAnalysis {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscopeanalysis.html#cfn-ec2-networkinsightsaccessscopeanalysis-networkinsightsaccessscopeid>
+                                        networkInsightsAccessScopeId :: (Value Prelude.Text),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsaccessscopeanalysis.html#cfn-ec2-networkinsightsaccessscopeanalysis-tags>
+                                        tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInsightsAccessScopeAnalysis ::
+  Value Prelude.Text -> NetworkInsightsAccessScopeAnalysis
+mkNetworkInsightsAccessScopeAnalysis networkInsightsAccessScopeId
+  = NetworkInsightsAccessScopeAnalysis
+      {haddock_workaround_ = (),
+       networkInsightsAccessScopeId = networkInsightsAccessScopeId,
+       tags = Prelude.Nothing}
+instance ToResourceProperties NetworkInsightsAccessScopeAnalysis where
+  toResourceProperties NetworkInsightsAccessScopeAnalysis {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAccessScopeAnalysis",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["NetworkInsightsAccessScopeId"
+                              JSON..= networkInsightsAccessScopeId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON NetworkInsightsAccessScopeAnalysis where
+  toJSON NetworkInsightsAccessScopeAnalysis {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["NetworkInsightsAccessScopeId"
+                 JSON..= networkInsightsAccessScopeId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "NetworkInsightsAccessScopeId" NetworkInsightsAccessScopeAnalysis where
+  type PropertyType "NetworkInsightsAccessScopeId" NetworkInsightsAccessScopeAnalysis = Value Prelude.Text
+  set newValue NetworkInsightsAccessScopeAnalysis {..}
+    = NetworkInsightsAccessScopeAnalysis
+        {networkInsightsAccessScopeId = newValue, ..}
+instance Property "Tags" NetworkInsightsAccessScopeAnalysis where
+  type PropertyType "Tags" NetworkInsightsAccessScopeAnalysis = [Tag]
+  set newValue NetworkInsightsAccessScopeAnalysis {..}
+    = NetworkInsightsAccessScopeAnalysis
+        {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis.hs
@@ -0,0 +1,79 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis (
+        NetworkInsightsAnalysis(..), mkNetworkInsightsAnalysis
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data NetworkInsightsAnalysis
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html>
+    NetworkInsightsAnalysis {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-additionalaccounts>
+                             additionalAccounts :: (Prelude.Maybe (ValueList Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-filterinarns>
+                             filterInArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-filteroutarns>
+                             filterOutArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-networkinsightspathid>
+                             networkInsightsPathId :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightsanalysis.html#cfn-ec2-networkinsightsanalysis-tags>
+                             tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInsightsAnalysis ::
+  Value Prelude.Text -> NetworkInsightsAnalysis
+mkNetworkInsightsAnalysis networkInsightsPathId
+  = NetworkInsightsAnalysis
+      {haddock_workaround_ = (),
+       networkInsightsPathId = networkInsightsPathId,
+       additionalAccounts = Prelude.Nothing,
+       filterInArns = Prelude.Nothing, filterOutArns = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties NetworkInsightsAnalysis where
+  toResourceProperties NetworkInsightsAnalysis {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["NetworkInsightsPathId" JSON..= networkInsightsPathId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AdditionalAccounts" Prelude.<$> additionalAccounts,
+                               (JSON..=) "FilterInArns" Prelude.<$> filterInArns,
+                               (JSON..=) "FilterOutArns" Prelude.<$> filterOutArns,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON NetworkInsightsAnalysis where
+  toJSON NetworkInsightsAnalysis {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["NetworkInsightsPathId" JSON..= networkInsightsPathId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AdditionalAccounts" Prelude.<$> additionalAccounts,
+                  (JSON..=) "FilterInArns" Prelude.<$> filterInArns,
+                  (JSON..=) "FilterOutArns" Prelude.<$> filterOutArns,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AdditionalAccounts" NetworkInsightsAnalysis where
+  type PropertyType "AdditionalAccounts" NetworkInsightsAnalysis = ValueList Prelude.Text
+  set newValue NetworkInsightsAnalysis {..}
+    = NetworkInsightsAnalysis
+        {additionalAccounts = Prelude.pure newValue, ..}
+instance Property "FilterInArns" NetworkInsightsAnalysis where
+  type PropertyType "FilterInArns" NetworkInsightsAnalysis = ValueList Prelude.Text
+  set newValue NetworkInsightsAnalysis {..}
+    = NetworkInsightsAnalysis
+        {filterInArns = Prelude.pure newValue, ..}
+instance Property "FilterOutArns" NetworkInsightsAnalysis where
+  type PropertyType "FilterOutArns" NetworkInsightsAnalysis = ValueList Prelude.Text
+  set newValue NetworkInsightsAnalysis {..}
+    = NetworkInsightsAnalysis
+        {filterOutArns = Prelude.pure newValue, ..}
+instance Property "NetworkInsightsPathId" NetworkInsightsAnalysis where
+  type PropertyType "NetworkInsightsPathId" NetworkInsightsAnalysis = Value Prelude.Text
+  set newValue NetworkInsightsAnalysis {..}
+    = NetworkInsightsAnalysis {networkInsightsPathId = newValue, ..}
+instance Property "Tags" NetworkInsightsAnalysis where
+  type PropertyType "Tags" NetworkInsightsAnalysis = [Tag]
+  set newValue NetworkInsightsAnalysis {..}
+    = NetworkInsightsAnalysis {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AdditionalDetailProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AdditionalDetailProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AdditionalDetailProperty.hs
@@ -0,0 +1,67 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AdditionalDetailProperty (
+        module Exports, AdditionalDetailProperty(..),
+        mkAdditionalDetailProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisComponentProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AdditionalDetailProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-additionaldetail.html>
+    AdditionalDetailProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-additionaldetail.html#cfn-ec2-networkinsightsanalysis-additionaldetail-additionaldetailtype>
+                              additionalDetailType :: (Prelude.Maybe (Value Prelude.Text)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-additionaldetail.html#cfn-ec2-networkinsightsanalysis-additionaldetail-component>
+                              component :: (Prelude.Maybe AnalysisComponentProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-additionaldetail.html#cfn-ec2-networkinsightsanalysis-additionaldetail-loadbalancers>
+                              loadBalancers :: (Prelude.Maybe [AnalysisComponentProperty]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-additionaldetail.html#cfn-ec2-networkinsightsanalysis-additionaldetail-servicename>
+                              serviceName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAdditionalDetailProperty :: AdditionalDetailProperty
+mkAdditionalDetailProperty
+  = AdditionalDetailProperty
+      {haddock_workaround_ = (), additionalDetailType = Prelude.Nothing,
+       component = Prelude.Nothing, loadBalancers = Prelude.Nothing,
+       serviceName = Prelude.Nothing}
+instance ToResourceProperties AdditionalDetailProperty where
+  toResourceProperties AdditionalDetailProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.AdditionalDetail",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AdditionalDetailType" Prelude.<$> additionalDetailType,
+                            (JSON..=) "Component" Prelude.<$> component,
+                            (JSON..=) "LoadBalancers" Prelude.<$> loadBalancers,
+                            (JSON..=) "ServiceName" Prelude.<$> serviceName])}
+instance JSON.ToJSON AdditionalDetailProperty where
+  toJSON AdditionalDetailProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AdditionalDetailType" Prelude.<$> additionalDetailType,
+               (JSON..=) "Component" Prelude.<$> component,
+               (JSON..=) "LoadBalancers" Prelude.<$> loadBalancers,
+               (JSON..=) "ServiceName" Prelude.<$> serviceName]))
+instance Property "AdditionalDetailType" AdditionalDetailProperty where
+  type PropertyType "AdditionalDetailType" AdditionalDetailProperty = Value Prelude.Text
+  set newValue AdditionalDetailProperty {..}
+    = AdditionalDetailProperty
+        {additionalDetailType = Prelude.pure newValue, ..}
+instance Property "Component" AdditionalDetailProperty where
+  type PropertyType "Component" AdditionalDetailProperty = AnalysisComponentProperty
+  set newValue AdditionalDetailProperty {..}
+    = AdditionalDetailProperty {component = Prelude.pure newValue, ..}
+instance Property "LoadBalancers" AdditionalDetailProperty where
+  type PropertyType "LoadBalancers" AdditionalDetailProperty = [AnalysisComponentProperty]
+  set newValue AdditionalDetailProperty {..}
+    = AdditionalDetailProperty
+        {loadBalancers = Prelude.pure newValue, ..}
+instance Property "ServiceName" AdditionalDetailProperty where
+  type PropertyType "ServiceName" AdditionalDetailProperty = Value Prelude.Text
+  set newValue AdditionalDetailProperty {..}
+    = AdditionalDetailProperty
+        {serviceName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AdditionalDetailProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AdditionalDetailProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AdditionalDetailProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AdditionalDetailProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AdditionalDetailProperty :: Prelude.Type
+instance ToResourceProperties AdditionalDetailProperty
+instance Prelude.Eq AdditionalDetailProperty
+instance Prelude.Show AdditionalDetailProperty
+instance JSON.ToJSON AdditionalDetailProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AlternatePathHintProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AlternatePathHintProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AlternatePathHintProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AlternatePathHintProperty (
+        AlternatePathHintProperty(..), mkAlternatePathHintProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AlternatePathHintProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-alternatepathhint.html>
+    AlternatePathHintProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-alternatepathhint.html#cfn-ec2-networkinsightsanalysis-alternatepathhint-componentarn>
+                               componentArn :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-alternatepathhint.html#cfn-ec2-networkinsightsanalysis-alternatepathhint-componentid>
+                               componentId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAlternatePathHintProperty :: AlternatePathHintProperty
+mkAlternatePathHintProperty
+  = AlternatePathHintProperty
+      {haddock_workaround_ = (), componentArn = Prelude.Nothing,
+       componentId = Prelude.Nothing}
+instance ToResourceProperties AlternatePathHintProperty where
+  toResourceProperties AlternatePathHintProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.AlternatePathHint",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ComponentArn" Prelude.<$> componentArn,
+                            (JSON..=) "ComponentId" Prelude.<$> componentId])}
+instance JSON.ToJSON AlternatePathHintProperty where
+  toJSON AlternatePathHintProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ComponentArn" Prelude.<$> componentArn,
+               (JSON..=) "ComponentId" Prelude.<$> componentId]))
+instance Property "ComponentArn" AlternatePathHintProperty where
+  type PropertyType "ComponentArn" AlternatePathHintProperty = Value Prelude.Text
+  set newValue AlternatePathHintProperty {..}
+    = AlternatePathHintProperty
+        {componentArn = Prelude.pure newValue, ..}
+instance Property "ComponentId" AlternatePathHintProperty where
+  type PropertyType "ComponentId" AlternatePathHintProperty = Value Prelude.Text
+  set newValue AlternatePathHintProperty {..}
+    = AlternatePathHintProperty
+        {componentId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AlternatePathHintProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AlternatePathHintProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AlternatePathHintProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AlternatePathHintProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AlternatePathHintProperty :: Prelude.Type
+instance ToResourceProperties AlternatePathHintProperty
+instance Prelude.Eq AlternatePathHintProperty
+instance Prelude.Show AlternatePathHintProperty
+instance JSON.ToJSON AlternatePathHintProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisAclRuleProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisAclRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisAclRuleProperty.hs
@@ -0,0 +1,81 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisAclRuleProperty (
+        module Exports, AnalysisAclRuleProperty(..),
+        mkAnalysisAclRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.PortRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisAclRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisaclrule.html>
+    AnalysisAclRuleProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisaclrule.html#cfn-ec2-networkinsightsanalysis-analysisaclrule-cidr>
+                             cidr :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisaclrule.html#cfn-ec2-networkinsightsanalysis-analysisaclrule-egress>
+                             egress :: (Prelude.Maybe (Value Prelude.Bool)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisaclrule.html#cfn-ec2-networkinsightsanalysis-analysisaclrule-portrange>
+                             portRange :: (Prelude.Maybe PortRangeProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisaclrule.html#cfn-ec2-networkinsightsanalysis-analysisaclrule-protocol>
+                             protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisaclrule.html#cfn-ec2-networkinsightsanalysis-analysisaclrule-ruleaction>
+                             ruleAction :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisaclrule.html#cfn-ec2-networkinsightsanalysis-analysisaclrule-rulenumber>
+                             ruleNumber :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisAclRuleProperty :: AnalysisAclRuleProperty
+mkAnalysisAclRuleProperty
+  = AnalysisAclRuleProperty
+      {haddock_workaround_ = (), cidr = Prelude.Nothing,
+       egress = Prelude.Nothing, portRange = Prelude.Nothing,
+       protocol = Prelude.Nothing, ruleAction = Prelude.Nothing,
+       ruleNumber = Prelude.Nothing}
+instance ToResourceProperties AnalysisAclRuleProperty where
+  toResourceProperties AnalysisAclRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.AnalysisAclRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Cidr" Prelude.<$> cidr,
+                            (JSON..=) "Egress" Prelude.<$> egress,
+                            (JSON..=) "PortRange" Prelude.<$> portRange,
+                            (JSON..=) "Protocol" Prelude.<$> protocol,
+                            (JSON..=) "RuleAction" Prelude.<$> ruleAction,
+                            (JSON..=) "RuleNumber" Prelude.<$> ruleNumber])}
+instance JSON.ToJSON AnalysisAclRuleProperty where
+  toJSON AnalysisAclRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Cidr" Prelude.<$> cidr,
+               (JSON..=) "Egress" Prelude.<$> egress,
+               (JSON..=) "PortRange" Prelude.<$> portRange,
+               (JSON..=) "Protocol" Prelude.<$> protocol,
+               (JSON..=) "RuleAction" Prelude.<$> ruleAction,
+               (JSON..=) "RuleNumber" Prelude.<$> ruleNumber]))
+instance Property "Cidr" AnalysisAclRuleProperty where
+  type PropertyType "Cidr" AnalysisAclRuleProperty = Value Prelude.Text
+  set newValue AnalysisAclRuleProperty {..}
+    = AnalysisAclRuleProperty {cidr = Prelude.pure newValue, ..}
+instance Property "Egress" AnalysisAclRuleProperty where
+  type PropertyType "Egress" AnalysisAclRuleProperty = Value Prelude.Bool
+  set newValue AnalysisAclRuleProperty {..}
+    = AnalysisAclRuleProperty {egress = Prelude.pure newValue, ..}
+instance Property "PortRange" AnalysisAclRuleProperty where
+  type PropertyType "PortRange" AnalysisAclRuleProperty = PortRangeProperty
+  set newValue AnalysisAclRuleProperty {..}
+    = AnalysisAclRuleProperty {portRange = Prelude.pure newValue, ..}
+instance Property "Protocol" AnalysisAclRuleProperty where
+  type PropertyType "Protocol" AnalysisAclRuleProperty = Value Prelude.Text
+  set newValue AnalysisAclRuleProperty {..}
+    = AnalysisAclRuleProperty {protocol = Prelude.pure newValue, ..}
+instance Property "RuleAction" AnalysisAclRuleProperty where
+  type PropertyType "RuleAction" AnalysisAclRuleProperty = Value Prelude.Text
+  set newValue AnalysisAclRuleProperty {..}
+    = AnalysisAclRuleProperty {ruleAction = Prelude.pure newValue, ..}
+instance Property "RuleNumber" AnalysisAclRuleProperty where
+  type PropertyType "RuleNumber" AnalysisAclRuleProperty = Value Prelude.Integer
+  set newValue AnalysisAclRuleProperty {..}
+    = AnalysisAclRuleProperty {ruleNumber = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisAclRuleProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisAclRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisAclRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisAclRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisAclRuleProperty :: Prelude.Type
+instance ToResourceProperties AnalysisAclRuleProperty
+instance Prelude.Eq AnalysisAclRuleProperty
+instance Prelude.Show AnalysisAclRuleProperty
+instance JSON.ToJSON AnalysisAclRuleProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisComponentProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisComponentProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisComponentProperty.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisComponentProperty (
+        AnalysisComponentProperty(..), mkAnalysisComponentProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisComponentProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysiscomponent.html>
+    AnalysisComponentProperty {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysiscomponent.html#cfn-ec2-networkinsightsanalysis-analysiscomponent-arn>
+                               arn :: (Prelude.Maybe (Value Prelude.Text)),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysiscomponent.html#cfn-ec2-networkinsightsanalysis-analysiscomponent-id>
+                               id :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisComponentProperty :: AnalysisComponentProperty
+mkAnalysisComponentProperty
+  = AnalysisComponentProperty
+      {haddock_workaround_ = (), arn = Prelude.Nothing,
+       id = Prelude.Nothing}
+instance ToResourceProperties AnalysisComponentProperty where
+  toResourceProperties AnalysisComponentProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.AnalysisComponent",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Arn" Prelude.<$> arn, (JSON..=) "Id" Prelude.<$> id])}
+instance JSON.ToJSON AnalysisComponentProperty where
+  toJSON AnalysisComponentProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Arn" Prelude.<$> arn, (JSON..=) "Id" Prelude.<$> id]))
+instance Property "Arn" AnalysisComponentProperty where
+  type PropertyType "Arn" AnalysisComponentProperty = Value Prelude.Text
+  set newValue AnalysisComponentProperty {..}
+    = AnalysisComponentProperty {arn = Prelude.pure newValue, ..}
+instance Property "Id" AnalysisComponentProperty where
+  type PropertyType "Id" AnalysisComponentProperty = Value Prelude.Text
+  set newValue AnalysisComponentProperty {..}
+    = AnalysisComponentProperty {id = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisComponentProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisComponentProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisComponentProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisComponentProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisComponentProperty :: Prelude.Type
+instance ToResourceProperties AnalysisComponentProperty
+instance Prelude.Eq AnalysisComponentProperty
+instance Prelude.Show AnalysisComponentProperty
+instance JSON.ToJSON AnalysisComponentProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerListenerProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerListenerProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerListenerProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisLoadBalancerListenerProperty (
+        AnalysisLoadBalancerListenerProperty(..),
+        mkAnalysisLoadBalancerListenerProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisLoadBalancerListenerProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisloadbalancerlistener.html>
+    AnalysisLoadBalancerListenerProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisloadbalancerlistener.html#cfn-ec2-networkinsightsanalysis-analysisloadbalancerlistener-instanceport>
+                                          instancePort :: (Prelude.Maybe (Value Prelude.Integer)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisloadbalancerlistener.html#cfn-ec2-networkinsightsanalysis-analysisloadbalancerlistener-loadbalancerport>
+                                          loadBalancerPort :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisLoadBalancerListenerProperty ::
+  AnalysisLoadBalancerListenerProperty
+mkAnalysisLoadBalancerListenerProperty
+  = AnalysisLoadBalancerListenerProperty
+      {haddock_workaround_ = (), instancePort = Prelude.Nothing,
+       loadBalancerPort = Prelude.Nothing}
+instance ToResourceProperties AnalysisLoadBalancerListenerProperty where
+  toResourceProperties AnalysisLoadBalancerListenerProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.AnalysisLoadBalancerListener",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "InstancePort" Prelude.<$> instancePort,
+                            (JSON..=) "LoadBalancerPort" Prelude.<$> loadBalancerPort])}
+instance JSON.ToJSON AnalysisLoadBalancerListenerProperty where
+  toJSON AnalysisLoadBalancerListenerProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "InstancePort" Prelude.<$> instancePort,
+               (JSON..=) "LoadBalancerPort" Prelude.<$> loadBalancerPort]))
+instance Property "InstancePort" AnalysisLoadBalancerListenerProperty where
+  type PropertyType "InstancePort" AnalysisLoadBalancerListenerProperty = Value Prelude.Integer
+  set newValue AnalysisLoadBalancerListenerProperty {..}
+    = AnalysisLoadBalancerListenerProperty
+        {instancePort = Prelude.pure newValue, ..}
+instance Property "LoadBalancerPort" AnalysisLoadBalancerListenerProperty where
+  type PropertyType "LoadBalancerPort" AnalysisLoadBalancerListenerProperty = Value Prelude.Integer
+  set newValue AnalysisLoadBalancerListenerProperty {..}
+    = AnalysisLoadBalancerListenerProperty
+        {loadBalancerPort = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerListenerProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerListenerProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerListenerProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisLoadBalancerListenerProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisLoadBalancerListenerProperty :: Prelude.Type
+instance ToResourceProperties AnalysisLoadBalancerListenerProperty
+instance Prelude.Eq AnalysisLoadBalancerListenerProperty
+instance Prelude.Show AnalysisLoadBalancerListenerProperty
+instance JSON.ToJSON AnalysisLoadBalancerListenerProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerTargetProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerTargetProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerTargetProperty.hs
@@ -0,0 +1,69 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisLoadBalancerTargetProperty (
+        module Exports, AnalysisLoadBalancerTargetProperty(..),
+        mkAnalysisLoadBalancerTargetProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisComponentProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisLoadBalancerTargetProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisloadbalancertarget.html>
+    AnalysisLoadBalancerTargetProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisloadbalancertarget.html#cfn-ec2-networkinsightsanalysis-analysisloadbalancertarget-address>
+                                        address :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisloadbalancertarget.html#cfn-ec2-networkinsightsanalysis-analysisloadbalancertarget-availabilityzone>
+                                        availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisloadbalancertarget.html#cfn-ec2-networkinsightsanalysis-analysisloadbalancertarget-instance>
+                                        instance' :: (Prelude.Maybe AnalysisComponentProperty),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisloadbalancertarget.html#cfn-ec2-networkinsightsanalysis-analysisloadbalancertarget-port>
+                                        port :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisLoadBalancerTargetProperty ::
+  AnalysisLoadBalancerTargetProperty
+mkAnalysisLoadBalancerTargetProperty
+  = AnalysisLoadBalancerTargetProperty
+      {haddock_workaround_ = (), address = Prelude.Nothing,
+       availabilityZone = Prelude.Nothing, instance' = Prelude.Nothing,
+       port = Prelude.Nothing}
+instance ToResourceProperties AnalysisLoadBalancerTargetProperty where
+  toResourceProperties AnalysisLoadBalancerTargetProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.AnalysisLoadBalancerTarget",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Address" Prelude.<$> address,
+                            (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                            (JSON..=) "Instance" Prelude.<$> instance',
+                            (JSON..=) "Port" Prelude.<$> port])}
+instance JSON.ToJSON AnalysisLoadBalancerTargetProperty where
+  toJSON AnalysisLoadBalancerTargetProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Address" Prelude.<$> address,
+               (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+               (JSON..=) "Instance" Prelude.<$> instance',
+               (JSON..=) "Port" Prelude.<$> port]))
+instance Property "Address" AnalysisLoadBalancerTargetProperty where
+  type PropertyType "Address" AnalysisLoadBalancerTargetProperty = Value Prelude.Text
+  set newValue AnalysisLoadBalancerTargetProperty {..}
+    = AnalysisLoadBalancerTargetProperty
+        {address = Prelude.pure newValue, ..}
+instance Property "AvailabilityZone" AnalysisLoadBalancerTargetProperty where
+  type PropertyType "AvailabilityZone" AnalysisLoadBalancerTargetProperty = Value Prelude.Text
+  set newValue AnalysisLoadBalancerTargetProperty {..}
+    = AnalysisLoadBalancerTargetProperty
+        {availabilityZone = Prelude.pure newValue, ..}
+instance Property "Instance" AnalysisLoadBalancerTargetProperty where
+  type PropertyType "Instance" AnalysisLoadBalancerTargetProperty = AnalysisComponentProperty
+  set newValue AnalysisLoadBalancerTargetProperty {..}
+    = AnalysisLoadBalancerTargetProperty
+        {instance' = Prelude.pure newValue, ..}
+instance Property "Port" AnalysisLoadBalancerTargetProperty where
+  type PropertyType "Port" AnalysisLoadBalancerTargetProperty = Value Prelude.Integer
+  set newValue AnalysisLoadBalancerTargetProperty {..}
+    = AnalysisLoadBalancerTargetProperty
+        {port = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerTargetProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerTargetProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisLoadBalancerTargetProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisLoadBalancerTargetProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisLoadBalancerTargetProperty :: Prelude.Type
+instance ToResourceProperties AnalysisLoadBalancerTargetProperty
+instance Prelude.Eq AnalysisLoadBalancerTargetProperty
+instance Prelude.Show AnalysisLoadBalancerTargetProperty
+instance JSON.ToJSON AnalysisLoadBalancerTargetProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisPacketHeaderProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisPacketHeaderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisPacketHeaderProperty.hs
@@ -0,0 +1,80 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisPacketHeaderProperty (
+        module Exports, AnalysisPacketHeaderProperty(..),
+        mkAnalysisPacketHeaderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.PortRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisPacketHeaderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html>
+    AnalysisPacketHeaderProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html#cfn-ec2-networkinsightsanalysis-analysispacketheader-destinationaddresses>
+                                  destinationAddresses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html#cfn-ec2-networkinsightsanalysis-analysispacketheader-destinationportranges>
+                                  destinationPortRanges :: (Prelude.Maybe [PortRangeProperty]),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html#cfn-ec2-networkinsightsanalysis-analysispacketheader-protocol>
+                                  protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html#cfn-ec2-networkinsightsanalysis-analysispacketheader-sourceaddresses>
+                                  sourceAddresses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysispacketheader.html#cfn-ec2-networkinsightsanalysis-analysispacketheader-sourceportranges>
+                                  sourcePortRanges :: (Prelude.Maybe [PortRangeProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisPacketHeaderProperty :: AnalysisPacketHeaderProperty
+mkAnalysisPacketHeaderProperty
+  = AnalysisPacketHeaderProperty
+      {haddock_workaround_ = (), destinationAddresses = Prelude.Nothing,
+       destinationPortRanges = Prelude.Nothing,
+       protocol = Prelude.Nothing, sourceAddresses = Prelude.Nothing,
+       sourcePortRanges = Prelude.Nothing}
+instance ToResourceProperties AnalysisPacketHeaderProperty where
+  toResourceProperties AnalysisPacketHeaderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.AnalysisPacketHeader",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DestinationAddresses" Prelude.<$> destinationAddresses,
+                            (JSON..=) "DestinationPortRanges"
+                              Prelude.<$> destinationPortRanges,
+                            (JSON..=) "Protocol" Prelude.<$> protocol,
+                            (JSON..=) "SourceAddresses" Prelude.<$> sourceAddresses,
+                            (JSON..=) "SourcePortRanges" Prelude.<$> sourcePortRanges])}
+instance JSON.ToJSON AnalysisPacketHeaderProperty where
+  toJSON AnalysisPacketHeaderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DestinationAddresses" Prelude.<$> destinationAddresses,
+               (JSON..=) "DestinationPortRanges"
+                 Prelude.<$> destinationPortRanges,
+               (JSON..=) "Protocol" Prelude.<$> protocol,
+               (JSON..=) "SourceAddresses" Prelude.<$> sourceAddresses,
+               (JSON..=) "SourcePortRanges" Prelude.<$> sourcePortRanges]))
+instance Property "DestinationAddresses" AnalysisPacketHeaderProperty where
+  type PropertyType "DestinationAddresses" AnalysisPacketHeaderProperty = ValueList Prelude.Text
+  set newValue AnalysisPacketHeaderProperty {..}
+    = AnalysisPacketHeaderProperty
+        {destinationAddresses = Prelude.pure newValue, ..}
+instance Property "DestinationPortRanges" AnalysisPacketHeaderProperty where
+  type PropertyType "DestinationPortRanges" AnalysisPacketHeaderProperty = [PortRangeProperty]
+  set newValue AnalysisPacketHeaderProperty {..}
+    = AnalysisPacketHeaderProperty
+        {destinationPortRanges = Prelude.pure newValue, ..}
+instance Property "Protocol" AnalysisPacketHeaderProperty where
+  type PropertyType "Protocol" AnalysisPacketHeaderProperty = Value Prelude.Text
+  set newValue AnalysisPacketHeaderProperty {..}
+    = AnalysisPacketHeaderProperty
+        {protocol = Prelude.pure newValue, ..}
+instance Property "SourceAddresses" AnalysisPacketHeaderProperty where
+  type PropertyType "SourceAddresses" AnalysisPacketHeaderProperty = ValueList Prelude.Text
+  set newValue AnalysisPacketHeaderProperty {..}
+    = AnalysisPacketHeaderProperty
+        {sourceAddresses = Prelude.pure newValue, ..}
+instance Property "SourcePortRanges" AnalysisPacketHeaderProperty where
+  type PropertyType "SourcePortRanges" AnalysisPacketHeaderProperty = [PortRangeProperty]
+  set newValue AnalysisPacketHeaderProperty {..}
+    = AnalysisPacketHeaderProperty
+        {sourcePortRanges = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisPacketHeaderProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisPacketHeaderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisPacketHeaderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisPacketHeaderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisPacketHeaderProperty :: Prelude.Type
+instance ToResourceProperties AnalysisPacketHeaderProperty
+instance Prelude.Eq AnalysisPacketHeaderProperty
+instance Prelude.Show AnalysisPacketHeaderProperty
+instance JSON.ToJSON AnalysisPacketHeaderProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisRouteTableRouteProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisRouteTableRouteProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisRouteTableRouteProperty.hs
@@ -0,0 +1,142 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisRouteTableRouteProperty (
+        AnalysisRouteTableRouteProperty(..),
+        mkAnalysisRouteTableRouteProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisRouteTableRouteProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html>
+    AnalysisRouteTableRouteProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-natgatewayid>
+                                     natGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-networkinterfaceid>
+                                     networkInterfaceId :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-origin>
+                                     origin :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-state>
+                                     state :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-transitgatewayid>
+                                     transitGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-vpcpeeringconnectionid>
+                                     vpcPeeringConnectionId :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-destinationcidr>
+                                     destinationCidr :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-destinationprefixlistid>
+                                     destinationPrefixListId :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-egressonlyinternetgatewayid>
+                                     egressOnlyInternetGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-gatewayid>
+                                     gatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysisroutetableroute.html#cfn-ec2-networkinsightsanalysis-analysisroutetableroute-instanceid>
+                                     instanceId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisRouteTableRouteProperty ::
+  AnalysisRouteTableRouteProperty
+mkAnalysisRouteTableRouteProperty
+  = AnalysisRouteTableRouteProperty
+      {haddock_workaround_ = (), natGatewayId = Prelude.Nothing,
+       networkInterfaceId = Prelude.Nothing, origin = Prelude.Nothing,
+       state = Prelude.Nothing, transitGatewayId = Prelude.Nothing,
+       vpcPeeringConnectionId = Prelude.Nothing,
+       destinationCidr = Prelude.Nothing,
+       destinationPrefixListId = Prelude.Nothing,
+       egressOnlyInternetGatewayId = Prelude.Nothing,
+       gatewayId = Prelude.Nothing, instanceId = Prelude.Nothing}
+instance ToResourceProperties AnalysisRouteTableRouteProperty where
+  toResourceProperties AnalysisRouteTableRouteProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.AnalysisRouteTableRoute",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "NatGatewayId" Prelude.<$> natGatewayId,
+                            (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                            (JSON..=) "Origin" Prelude.<$> origin,
+                            (JSON..=) "State" Prelude.<$> state,
+                            (JSON..=) "TransitGatewayId" Prelude.<$> transitGatewayId,
+                            (JSON..=) "VpcPeeringConnectionId"
+                              Prelude.<$> vpcPeeringConnectionId,
+                            (JSON..=) "destinationCidr" Prelude.<$> destinationCidr,
+                            (JSON..=) "destinationPrefixListId"
+                              Prelude.<$> destinationPrefixListId,
+                            (JSON..=) "egressOnlyInternetGatewayId"
+                              Prelude.<$> egressOnlyInternetGatewayId,
+                            (JSON..=) "gatewayId" Prelude.<$> gatewayId,
+                            (JSON..=) "instanceId" Prelude.<$> instanceId])}
+instance JSON.ToJSON AnalysisRouteTableRouteProperty where
+  toJSON AnalysisRouteTableRouteProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "NatGatewayId" Prelude.<$> natGatewayId,
+               (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+               (JSON..=) "Origin" Prelude.<$> origin,
+               (JSON..=) "State" Prelude.<$> state,
+               (JSON..=) "TransitGatewayId" Prelude.<$> transitGatewayId,
+               (JSON..=) "VpcPeeringConnectionId"
+                 Prelude.<$> vpcPeeringConnectionId,
+               (JSON..=) "destinationCidr" Prelude.<$> destinationCidr,
+               (JSON..=) "destinationPrefixListId"
+                 Prelude.<$> destinationPrefixListId,
+               (JSON..=) "egressOnlyInternetGatewayId"
+                 Prelude.<$> egressOnlyInternetGatewayId,
+               (JSON..=) "gatewayId" Prelude.<$> gatewayId,
+               (JSON..=) "instanceId" Prelude.<$> instanceId]))
+instance Property "NatGatewayId" AnalysisRouteTableRouteProperty where
+  type PropertyType "NatGatewayId" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {natGatewayId = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceId" AnalysisRouteTableRouteProperty where
+  type PropertyType "NetworkInterfaceId" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {networkInterfaceId = Prelude.pure newValue, ..}
+instance Property "Origin" AnalysisRouteTableRouteProperty where
+  type PropertyType "Origin" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {origin = Prelude.pure newValue, ..}
+instance Property "State" AnalysisRouteTableRouteProperty where
+  type PropertyType "State" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {state = Prelude.pure newValue, ..}
+instance Property "TransitGatewayId" AnalysisRouteTableRouteProperty where
+  type PropertyType "TransitGatewayId" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {transitGatewayId = Prelude.pure newValue, ..}
+instance Property "VpcPeeringConnectionId" AnalysisRouteTableRouteProperty where
+  type PropertyType "VpcPeeringConnectionId" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {vpcPeeringConnectionId = Prelude.pure newValue, ..}
+instance Property "destinationCidr" AnalysisRouteTableRouteProperty where
+  type PropertyType "destinationCidr" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {destinationCidr = Prelude.pure newValue, ..}
+instance Property "destinationPrefixListId" AnalysisRouteTableRouteProperty where
+  type PropertyType "destinationPrefixListId" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {destinationPrefixListId = Prelude.pure newValue, ..}
+instance Property "egressOnlyInternetGatewayId" AnalysisRouteTableRouteProperty where
+  type PropertyType "egressOnlyInternetGatewayId" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {egressOnlyInternetGatewayId = Prelude.pure newValue, ..}
+instance Property "gatewayId" AnalysisRouteTableRouteProperty where
+  type PropertyType "gatewayId" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {gatewayId = Prelude.pure newValue, ..}
+instance Property "instanceId" AnalysisRouteTableRouteProperty where
+  type PropertyType "instanceId" AnalysisRouteTableRouteProperty = Value Prelude.Text
+  set newValue AnalysisRouteTableRouteProperty {..}
+    = AnalysisRouteTableRouteProperty
+        {instanceId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisRouteTableRouteProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisRouteTableRouteProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisRouteTableRouteProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisRouteTableRouteProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisRouteTableRouteProperty :: Prelude.Type
+instance ToResourceProperties AnalysisRouteTableRouteProperty
+instance Prelude.Eq AnalysisRouteTableRouteProperty
+instance Prelude.Show AnalysisRouteTableRouteProperty
+instance JSON.ToJSON AnalysisRouteTableRouteProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisSecurityGroupRuleProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisSecurityGroupRuleProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisSecurityGroupRuleProperty.hs
@@ -0,0 +1,88 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisSecurityGroupRuleProperty (
+        module Exports, AnalysisSecurityGroupRuleProperty(..),
+        mkAnalysisSecurityGroupRuleProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.PortRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AnalysisSecurityGroupRuleProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysissecuritygrouprule.html>
+    AnalysisSecurityGroupRuleProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysissecuritygrouprule.html#cfn-ec2-networkinsightsanalysis-analysissecuritygrouprule-cidr>
+                                       cidr :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysissecuritygrouprule.html#cfn-ec2-networkinsightsanalysis-analysissecuritygrouprule-direction>
+                                       direction :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysissecuritygrouprule.html#cfn-ec2-networkinsightsanalysis-analysissecuritygrouprule-portrange>
+                                       portRange :: (Prelude.Maybe PortRangeProperty),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysissecuritygrouprule.html#cfn-ec2-networkinsightsanalysis-analysissecuritygrouprule-prefixlistid>
+                                       prefixListId :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysissecuritygrouprule.html#cfn-ec2-networkinsightsanalysis-analysissecuritygrouprule-protocol>
+                                       protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-analysissecuritygrouprule.html#cfn-ec2-networkinsightsanalysis-analysissecuritygrouprule-securitygroupid>
+                                       securityGroupId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAnalysisSecurityGroupRuleProperty ::
+  AnalysisSecurityGroupRuleProperty
+mkAnalysisSecurityGroupRuleProperty
+  = AnalysisSecurityGroupRuleProperty
+      {haddock_workaround_ = (), cidr = Prelude.Nothing,
+       direction = Prelude.Nothing, portRange = Prelude.Nothing,
+       prefixListId = Prelude.Nothing, protocol = Prelude.Nothing,
+       securityGroupId = Prelude.Nothing}
+instance ToResourceProperties AnalysisSecurityGroupRuleProperty where
+  toResourceProperties AnalysisSecurityGroupRuleProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.AnalysisSecurityGroupRule",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Cidr" Prelude.<$> cidr,
+                            (JSON..=) "Direction" Prelude.<$> direction,
+                            (JSON..=) "PortRange" Prelude.<$> portRange,
+                            (JSON..=) "PrefixListId" Prelude.<$> prefixListId,
+                            (JSON..=) "Protocol" Prelude.<$> protocol,
+                            (JSON..=) "SecurityGroupId" Prelude.<$> securityGroupId])}
+instance JSON.ToJSON AnalysisSecurityGroupRuleProperty where
+  toJSON AnalysisSecurityGroupRuleProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Cidr" Prelude.<$> cidr,
+               (JSON..=) "Direction" Prelude.<$> direction,
+               (JSON..=) "PortRange" Prelude.<$> portRange,
+               (JSON..=) "PrefixListId" Prelude.<$> prefixListId,
+               (JSON..=) "Protocol" Prelude.<$> protocol,
+               (JSON..=) "SecurityGroupId" Prelude.<$> securityGroupId]))
+instance Property "Cidr" AnalysisSecurityGroupRuleProperty where
+  type PropertyType "Cidr" AnalysisSecurityGroupRuleProperty = Value Prelude.Text
+  set newValue AnalysisSecurityGroupRuleProperty {..}
+    = AnalysisSecurityGroupRuleProperty
+        {cidr = Prelude.pure newValue, ..}
+instance Property "Direction" AnalysisSecurityGroupRuleProperty where
+  type PropertyType "Direction" AnalysisSecurityGroupRuleProperty = Value Prelude.Text
+  set newValue AnalysisSecurityGroupRuleProperty {..}
+    = AnalysisSecurityGroupRuleProperty
+        {direction = Prelude.pure newValue, ..}
+instance Property "PortRange" AnalysisSecurityGroupRuleProperty where
+  type PropertyType "PortRange" AnalysisSecurityGroupRuleProperty = PortRangeProperty
+  set newValue AnalysisSecurityGroupRuleProperty {..}
+    = AnalysisSecurityGroupRuleProperty
+        {portRange = Prelude.pure newValue, ..}
+instance Property "PrefixListId" AnalysisSecurityGroupRuleProperty where
+  type PropertyType "PrefixListId" AnalysisSecurityGroupRuleProperty = Value Prelude.Text
+  set newValue AnalysisSecurityGroupRuleProperty {..}
+    = AnalysisSecurityGroupRuleProperty
+        {prefixListId = Prelude.pure newValue, ..}
+instance Property "Protocol" AnalysisSecurityGroupRuleProperty where
+  type PropertyType "Protocol" AnalysisSecurityGroupRuleProperty = Value Prelude.Text
+  set newValue AnalysisSecurityGroupRuleProperty {..}
+    = AnalysisSecurityGroupRuleProperty
+        {protocol = Prelude.pure newValue, ..}
+instance Property "SecurityGroupId" AnalysisSecurityGroupRuleProperty where
+  type PropertyType "SecurityGroupId" AnalysisSecurityGroupRuleProperty = Value Prelude.Text
+  set newValue AnalysisSecurityGroupRuleProperty {..}
+    = AnalysisSecurityGroupRuleProperty
+        {securityGroupId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisSecurityGroupRuleProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisSecurityGroupRuleProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/AnalysisSecurityGroupRuleProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisSecurityGroupRuleProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AnalysisSecurityGroupRuleProperty :: Prelude.Type
+instance ToResourceProperties AnalysisSecurityGroupRuleProperty
+instance Prelude.Eq AnalysisSecurityGroupRuleProperty
+instance Prelude.Show AnalysisSecurityGroupRuleProperty
+instance JSON.ToJSON AnalysisSecurityGroupRuleProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/ExplanationProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/ExplanationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/ExplanationProperty.hs
@@ -0,0 +1,515 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.ExplanationProperty (
+        module Exports, ExplanationProperty(..), mkExplanationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisAclRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisComponentProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisLoadBalancerListenerProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisLoadBalancerTargetProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisRouteTableRouteProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisSecurityGroupRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.PortRangeProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.TransitGatewayRouteTableRouteProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ExplanationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html>
+    ExplanationProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-acl>
+                         acl :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-aclrule>
+                         aclRule :: (Prelude.Maybe AnalysisAclRuleProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-address>
+                         address :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-addresses>
+                         addresses :: (Prelude.Maybe (ValueList Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-attachedto>
+                         attachedTo :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-availabilityzones>
+                         availabilityZones :: (Prelude.Maybe (ValueList Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-cidrs>
+                         cidrs :: (Prelude.Maybe (ValueList Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-classicloadbalancerlistener>
+                         classicLoadBalancerListener :: (Prelude.Maybe AnalysisLoadBalancerListenerProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-component>
+                         component :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-componentaccount>
+                         componentAccount :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-componentregion>
+                         componentRegion :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-customergateway>
+                         customerGateway :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-destination>
+                         destination :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-destinationvpc>
+                         destinationVpc :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-direction>
+                         direction :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-elasticloadbalancerlistener>
+                         elasticLoadBalancerListener :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-explanationcode>
+                         explanationCode :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-ingressroutetable>
+                         ingressRouteTable :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-internetgateway>
+                         internetGateway :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-loadbalancerarn>
+                         loadBalancerArn :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-loadbalancerlistenerport>
+                         loadBalancerListenerPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-loadbalancertarget>
+                         loadBalancerTarget :: (Prelude.Maybe AnalysisLoadBalancerTargetProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-loadbalancertargetgroup>
+                         loadBalancerTargetGroup :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-loadbalancertargetgroups>
+                         loadBalancerTargetGroups :: (Prelude.Maybe [AnalysisComponentProperty]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-loadbalancertargetport>
+                         loadBalancerTargetPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-missingcomponent>
+                         missingComponent :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-natgateway>
+                         natGateway :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-networkinterface>
+                         networkInterface :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-packetfield>
+                         packetField :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-port>
+                         port :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-portranges>
+                         portRanges :: (Prelude.Maybe [PortRangeProperty]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-prefixlist>
+                         prefixList :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-protocols>
+                         protocols :: (Prelude.Maybe (ValueList Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-routetable>
+                         routeTable :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-routetableroute>
+                         routeTableRoute :: (Prelude.Maybe AnalysisRouteTableRouteProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-securitygroup>
+                         securityGroup :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-securitygrouprule>
+                         securityGroupRule :: (Prelude.Maybe AnalysisSecurityGroupRuleProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-securitygroups>
+                         securityGroups :: (Prelude.Maybe [AnalysisComponentProperty]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-sourcevpc>
+                         sourceVpc :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-state>
+                         state :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-subnet>
+                         subnet :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-subnetroutetable>
+                         subnetRouteTable :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-transitgateway>
+                         transitGateway :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-transitgatewayattachment>
+                         transitGatewayAttachment :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-transitgatewayroutetable>
+                         transitGatewayRouteTable :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-transitgatewayroutetableroute>
+                         transitGatewayRouteTableRoute :: (Prelude.Maybe TransitGatewayRouteTableRouteProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-vpc>
+                         vpc :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-vpcpeeringconnection>
+                         vpcPeeringConnection :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-vpnconnection>
+                         vpnConnection :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-vpngateway>
+                         vpnGateway :: (Prelude.Maybe AnalysisComponentProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-explanation.html#cfn-ec2-networkinsightsanalysis-explanation-vpcendpoint>
+                         vpcEndpoint :: (Prelude.Maybe AnalysisComponentProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkExplanationProperty :: ExplanationProperty
+mkExplanationProperty
+  = ExplanationProperty
+      {haddock_workaround_ = (), acl = Prelude.Nothing,
+       aclRule = Prelude.Nothing, address = Prelude.Nothing,
+       addresses = Prelude.Nothing, attachedTo = Prelude.Nothing,
+       availabilityZones = Prelude.Nothing, cidrs = Prelude.Nothing,
+       classicLoadBalancerListener = Prelude.Nothing,
+       component = Prelude.Nothing, componentAccount = Prelude.Nothing,
+       componentRegion = Prelude.Nothing,
+       customerGateway = Prelude.Nothing, destination = Prelude.Nothing,
+       destinationVpc = Prelude.Nothing, direction = Prelude.Nothing,
+       elasticLoadBalancerListener = Prelude.Nothing,
+       explanationCode = Prelude.Nothing,
+       ingressRouteTable = Prelude.Nothing,
+       internetGateway = Prelude.Nothing,
+       loadBalancerArn = Prelude.Nothing,
+       loadBalancerListenerPort = Prelude.Nothing,
+       loadBalancerTarget = Prelude.Nothing,
+       loadBalancerTargetGroup = Prelude.Nothing,
+       loadBalancerTargetGroups = Prelude.Nothing,
+       loadBalancerTargetPort = Prelude.Nothing,
+       missingComponent = Prelude.Nothing, natGateway = Prelude.Nothing,
+       networkInterface = Prelude.Nothing, packetField = Prelude.Nothing,
+       port = Prelude.Nothing, portRanges = Prelude.Nothing,
+       prefixList = Prelude.Nothing, protocols = Prelude.Nothing,
+       routeTable = Prelude.Nothing, routeTableRoute = Prelude.Nothing,
+       securityGroup = Prelude.Nothing,
+       securityGroupRule = Prelude.Nothing,
+       securityGroups = Prelude.Nothing, sourceVpc = Prelude.Nothing,
+       state = Prelude.Nothing, subnet = Prelude.Nothing,
+       subnetRouteTable = Prelude.Nothing,
+       transitGateway = Prelude.Nothing,
+       transitGatewayAttachment = Prelude.Nothing,
+       transitGatewayRouteTable = Prelude.Nothing,
+       transitGatewayRouteTableRoute = Prelude.Nothing,
+       vpc = Prelude.Nothing, vpcPeeringConnection = Prelude.Nothing,
+       vpnConnection = Prelude.Nothing, vpnGateway = Prelude.Nothing,
+       vpcEndpoint = Prelude.Nothing}
+instance ToResourceProperties ExplanationProperty where
+  toResourceProperties ExplanationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.Explanation",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Acl" Prelude.<$> acl,
+                            (JSON..=) "AclRule" Prelude.<$> aclRule,
+                            (JSON..=) "Address" Prelude.<$> address,
+                            (JSON..=) "Addresses" Prelude.<$> addresses,
+                            (JSON..=) "AttachedTo" Prelude.<$> attachedTo,
+                            (JSON..=) "AvailabilityZones" Prelude.<$> availabilityZones,
+                            (JSON..=) "Cidrs" Prelude.<$> cidrs,
+                            (JSON..=) "ClassicLoadBalancerListener"
+                              Prelude.<$> classicLoadBalancerListener,
+                            (JSON..=) "Component" Prelude.<$> component,
+                            (JSON..=) "ComponentAccount" Prelude.<$> componentAccount,
+                            (JSON..=) "ComponentRegion" Prelude.<$> componentRegion,
+                            (JSON..=) "CustomerGateway" Prelude.<$> customerGateway,
+                            (JSON..=) "Destination" Prelude.<$> destination,
+                            (JSON..=) "DestinationVpc" Prelude.<$> destinationVpc,
+                            (JSON..=) "Direction" Prelude.<$> direction,
+                            (JSON..=) "ElasticLoadBalancerListener"
+                              Prelude.<$> elasticLoadBalancerListener,
+                            (JSON..=) "ExplanationCode" Prelude.<$> explanationCode,
+                            (JSON..=) "IngressRouteTable" Prelude.<$> ingressRouteTable,
+                            (JSON..=) "InternetGateway" Prelude.<$> internetGateway,
+                            (JSON..=) "LoadBalancerArn" Prelude.<$> loadBalancerArn,
+                            (JSON..=) "LoadBalancerListenerPort"
+                              Prelude.<$> loadBalancerListenerPort,
+                            (JSON..=) "LoadBalancerTarget" Prelude.<$> loadBalancerTarget,
+                            (JSON..=) "LoadBalancerTargetGroup"
+                              Prelude.<$> loadBalancerTargetGroup,
+                            (JSON..=) "LoadBalancerTargetGroups"
+                              Prelude.<$> loadBalancerTargetGroups,
+                            (JSON..=) "LoadBalancerTargetPort"
+                              Prelude.<$> loadBalancerTargetPort,
+                            (JSON..=) "MissingComponent" Prelude.<$> missingComponent,
+                            (JSON..=) "NatGateway" Prelude.<$> natGateway,
+                            (JSON..=) "NetworkInterface" Prelude.<$> networkInterface,
+                            (JSON..=) "PacketField" Prelude.<$> packetField,
+                            (JSON..=) "Port" Prelude.<$> port,
+                            (JSON..=) "PortRanges" Prelude.<$> portRanges,
+                            (JSON..=) "PrefixList" Prelude.<$> prefixList,
+                            (JSON..=) "Protocols" Prelude.<$> protocols,
+                            (JSON..=) "RouteTable" Prelude.<$> routeTable,
+                            (JSON..=) "RouteTableRoute" Prelude.<$> routeTableRoute,
+                            (JSON..=) "SecurityGroup" Prelude.<$> securityGroup,
+                            (JSON..=) "SecurityGroupRule" Prelude.<$> securityGroupRule,
+                            (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+                            (JSON..=) "SourceVpc" Prelude.<$> sourceVpc,
+                            (JSON..=) "State" Prelude.<$> state,
+                            (JSON..=) "Subnet" Prelude.<$> subnet,
+                            (JSON..=) "SubnetRouteTable" Prelude.<$> subnetRouteTable,
+                            (JSON..=) "TransitGateway" Prelude.<$> transitGateway,
+                            (JSON..=) "TransitGatewayAttachment"
+                              Prelude.<$> transitGatewayAttachment,
+                            (JSON..=) "TransitGatewayRouteTable"
+                              Prelude.<$> transitGatewayRouteTable,
+                            (JSON..=) "TransitGatewayRouteTableRoute"
+                              Prelude.<$> transitGatewayRouteTableRoute,
+                            (JSON..=) "Vpc" Prelude.<$> vpc,
+                            (JSON..=) "VpcPeeringConnection" Prelude.<$> vpcPeeringConnection,
+                            (JSON..=) "VpnConnection" Prelude.<$> vpnConnection,
+                            (JSON..=) "VpnGateway" Prelude.<$> vpnGateway,
+                            (JSON..=) "vpcEndpoint" Prelude.<$> vpcEndpoint])}
+instance JSON.ToJSON ExplanationProperty where
+  toJSON ExplanationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Acl" Prelude.<$> acl,
+               (JSON..=) "AclRule" Prelude.<$> aclRule,
+               (JSON..=) "Address" Prelude.<$> address,
+               (JSON..=) "Addresses" Prelude.<$> addresses,
+               (JSON..=) "AttachedTo" Prelude.<$> attachedTo,
+               (JSON..=) "AvailabilityZones" Prelude.<$> availabilityZones,
+               (JSON..=) "Cidrs" Prelude.<$> cidrs,
+               (JSON..=) "ClassicLoadBalancerListener"
+                 Prelude.<$> classicLoadBalancerListener,
+               (JSON..=) "Component" Prelude.<$> component,
+               (JSON..=) "ComponentAccount" Prelude.<$> componentAccount,
+               (JSON..=) "ComponentRegion" Prelude.<$> componentRegion,
+               (JSON..=) "CustomerGateway" Prelude.<$> customerGateway,
+               (JSON..=) "Destination" Prelude.<$> destination,
+               (JSON..=) "DestinationVpc" Prelude.<$> destinationVpc,
+               (JSON..=) "Direction" Prelude.<$> direction,
+               (JSON..=) "ElasticLoadBalancerListener"
+                 Prelude.<$> elasticLoadBalancerListener,
+               (JSON..=) "ExplanationCode" Prelude.<$> explanationCode,
+               (JSON..=) "IngressRouteTable" Prelude.<$> ingressRouteTable,
+               (JSON..=) "InternetGateway" Prelude.<$> internetGateway,
+               (JSON..=) "LoadBalancerArn" Prelude.<$> loadBalancerArn,
+               (JSON..=) "LoadBalancerListenerPort"
+                 Prelude.<$> loadBalancerListenerPort,
+               (JSON..=) "LoadBalancerTarget" Prelude.<$> loadBalancerTarget,
+               (JSON..=) "LoadBalancerTargetGroup"
+                 Prelude.<$> loadBalancerTargetGroup,
+               (JSON..=) "LoadBalancerTargetGroups"
+                 Prelude.<$> loadBalancerTargetGroups,
+               (JSON..=) "LoadBalancerTargetPort"
+                 Prelude.<$> loadBalancerTargetPort,
+               (JSON..=) "MissingComponent" Prelude.<$> missingComponent,
+               (JSON..=) "NatGateway" Prelude.<$> natGateway,
+               (JSON..=) "NetworkInterface" Prelude.<$> networkInterface,
+               (JSON..=) "PacketField" Prelude.<$> packetField,
+               (JSON..=) "Port" Prelude.<$> port,
+               (JSON..=) "PortRanges" Prelude.<$> portRanges,
+               (JSON..=) "PrefixList" Prelude.<$> prefixList,
+               (JSON..=) "Protocols" Prelude.<$> protocols,
+               (JSON..=) "RouteTable" Prelude.<$> routeTable,
+               (JSON..=) "RouteTableRoute" Prelude.<$> routeTableRoute,
+               (JSON..=) "SecurityGroup" Prelude.<$> securityGroup,
+               (JSON..=) "SecurityGroupRule" Prelude.<$> securityGroupRule,
+               (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+               (JSON..=) "SourceVpc" Prelude.<$> sourceVpc,
+               (JSON..=) "State" Prelude.<$> state,
+               (JSON..=) "Subnet" Prelude.<$> subnet,
+               (JSON..=) "SubnetRouteTable" Prelude.<$> subnetRouteTable,
+               (JSON..=) "TransitGateway" Prelude.<$> transitGateway,
+               (JSON..=) "TransitGatewayAttachment"
+                 Prelude.<$> transitGatewayAttachment,
+               (JSON..=) "TransitGatewayRouteTable"
+                 Prelude.<$> transitGatewayRouteTable,
+               (JSON..=) "TransitGatewayRouteTableRoute"
+                 Prelude.<$> transitGatewayRouteTableRoute,
+               (JSON..=) "Vpc" Prelude.<$> vpc,
+               (JSON..=) "VpcPeeringConnection" Prelude.<$> vpcPeeringConnection,
+               (JSON..=) "VpnConnection" Prelude.<$> vpnConnection,
+               (JSON..=) "VpnGateway" Prelude.<$> vpnGateway,
+               (JSON..=) "vpcEndpoint" Prelude.<$> vpcEndpoint]))
+instance Property "Acl" ExplanationProperty where
+  type PropertyType "Acl" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {acl = Prelude.pure newValue, ..}
+instance Property "AclRule" ExplanationProperty where
+  type PropertyType "AclRule" ExplanationProperty = AnalysisAclRuleProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {aclRule = Prelude.pure newValue, ..}
+instance Property "Address" ExplanationProperty where
+  type PropertyType "Address" ExplanationProperty = Value Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {address = Prelude.pure newValue, ..}
+instance Property "Addresses" ExplanationProperty where
+  type PropertyType "Addresses" ExplanationProperty = ValueList Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {addresses = Prelude.pure newValue, ..}
+instance Property "AttachedTo" ExplanationProperty where
+  type PropertyType "AttachedTo" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {attachedTo = Prelude.pure newValue, ..}
+instance Property "AvailabilityZones" ExplanationProperty where
+  type PropertyType "AvailabilityZones" ExplanationProperty = ValueList Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {availabilityZones = Prelude.pure newValue, ..}
+instance Property "Cidrs" ExplanationProperty where
+  type PropertyType "Cidrs" ExplanationProperty = ValueList Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {cidrs = Prelude.pure newValue, ..}
+instance Property "ClassicLoadBalancerListener" ExplanationProperty where
+  type PropertyType "ClassicLoadBalancerListener" ExplanationProperty = AnalysisLoadBalancerListenerProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {classicLoadBalancerListener = Prelude.pure newValue, ..}
+instance Property "Component" ExplanationProperty where
+  type PropertyType "Component" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {component = Prelude.pure newValue, ..}
+instance Property "ComponentAccount" ExplanationProperty where
+  type PropertyType "ComponentAccount" ExplanationProperty = Value Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {componentAccount = Prelude.pure newValue, ..}
+instance Property "ComponentRegion" ExplanationProperty where
+  type PropertyType "ComponentRegion" ExplanationProperty = Value Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {componentRegion = Prelude.pure newValue, ..}
+instance Property "CustomerGateway" ExplanationProperty where
+  type PropertyType "CustomerGateway" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {customerGateway = Prelude.pure newValue, ..}
+instance Property "Destination" ExplanationProperty where
+  type PropertyType "Destination" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {destination = Prelude.pure newValue, ..}
+instance Property "DestinationVpc" ExplanationProperty where
+  type PropertyType "DestinationVpc" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {destinationVpc = Prelude.pure newValue, ..}
+instance Property "Direction" ExplanationProperty where
+  type PropertyType "Direction" ExplanationProperty = Value Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {direction = Prelude.pure newValue, ..}
+instance Property "ElasticLoadBalancerListener" ExplanationProperty where
+  type PropertyType "ElasticLoadBalancerListener" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {elasticLoadBalancerListener = Prelude.pure newValue, ..}
+instance Property "ExplanationCode" ExplanationProperty where
+  type PropertyType "ExplanationCode" ExplanationProperty = Value Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {explanationCode = Prelude.pure newValue, ..}
+instance Property "IngressRouteTable" ExplanationProperty where
+  type PropertyType "IngressRouteTable" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {ingressRouteTable = Prelude.pure newValue, ..}
+instance Property "InternetGateway" ExplanationProperty where
+  type PropertyType "InternetGateway" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {internetGateway = Prelude.pure newValue, ..}
+instance Property "LoadBalancerArn" ExplanationProperty where
+  type PropertyType "LoadBalancerArn" ExplanationProperty = Value Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {loadBalancerArn = Prelude.pure newValue, ..}
+instance Property "LoadBalancerListenerPort" ExplanationProperty where
+  type PropertyType "LoadBalancerListenerPort" ExplanationProperty = Value Prelude.Integer
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {loadBalancerListenerPort = Prelude.pure newValue, ..}
+instance Property "LoadBalancerTarget" ExplanationProperty where
+  type PropertyType "LoadBalancerTarget" ExplanationProperty = AnalysisLoadBalancerTargetProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {loadBalancerTarget = Prelude.pure newValue, ..}
+instance Property "LoadBalancerTargetGroup" ExplanationProperty where
+  type PropertyType "LoadBalancerTargetGroup" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {loadBalancerTargetGroup = Prelude.pure newValue, ..}
+instance Property "LoadBalancerTargetGroups" ExplanationProperty where
+  type PropertyType "LoadBalancerTargetGroups" ExplanationProperty = [AnalysisComponentProperty]
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {loadBalancerTargetGroups = Prelude.pure newValue, ..}
+instance Property "LoadBalancerTargetPort" ExplanationProperty where
+  type PropertyType "LoadBalancerTargetPort" ExplanationProperty = Value Prelude.Integer
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {loadBalancerTargetPort = Prelude.pure newValue, ..}
+instance Property "MissingComponent" ExplanationProperty where
+  type PropertyType "MissingComponent" ExplanationProperty = Value Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {missingComponent = Prelude.pure newValue, ..}
+instance Property "NatGateway" ExplanationProperty where
+  type PropertyType "NatGateway" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {natGateway = Prelude.pure newValue, ..}
+instance Property "NetworkInterface" ExplanationProperty where
+  type PropertyType "NetworkInterface" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {networkInterface = Prelude.pure newValue, ..}
+instance Property "PacketField" ExplanationProperty where
+  type PropertyType "PacketField" ExplanationProperty = Value Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {packetField = Prelude.pure newValue, ..}
+instance Property "Port" ExplanationProperty where
+  type PropertyType "Port" ExplanationProperty = Value Prelude.Integer
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {port = Prelude.pure newValue, ..}
+instance Property "PortRanges" ExplanationProperty where
+  type PropertyType "PortRanges" ExplanationProperty = [PortRangeProperty]
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {portRanges = Prelude.pure newValue, ..}
+instance Property "PrefixList" ExplanationProperty where
+  type PropertyType "PrefixList" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {prefixList = Prelude.pure newValue, ..}
+instance Property "Protocols" ExplanationProperty where
+  type PropertyType "Protocols" ExplanationProperty = ValueList Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {protocols = Prelude.pure newValue, ..}
+instance Property "RouteTable" ExplanationProperty where
+  type PropertyType "RouteTable" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {routeTable = Prelude.pure newValue, ..}
+instance Property "RouteTableRoute" ExplanationProperty where
+  type PropertyType "RouteTableRoute" ExplanationProperty = AnalysisRouteTableRouteProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {routeTableRoute = Prelude.pure newValue, ..}
+instance Property "SecurityGroup" ExplanationProperty where
+  type PropertyType "SecurityGroup" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {securityGroup = Prelude.pure newValue, ..}
+instance Property "SecurityGroupRule" ExplanationProperty where
+  type PropertyType "SecurityGroupRule" ExplanationProperty = AnalysisSecurityGroupRuleProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {securityGroupRule = Prelude.pure newValue, ..}
+instance Property "SecurityGroups" ExplanationProperty where
+  type PropertyType "SecurityGroups" ExplanationProperty = [AnalysisComponentProperty]
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {securityGroups = Prelude.pure newValue, ..}
+instance Property "SourceVpc" ExplanationProperty where
+  type PropertyType "SourceVpc" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {sourceVpc = Prelude.pure newValue, ..}
+instance Property "State" ExplanationProperty where
+  type PropertyType "State" ExplanationProperty = Value Prelude.Text
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {state = Prelude.pure newValue, ..}
+instance Property "Subnet" ExplanationProperty where
+  type PropertyType "Subnet" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {subnet = Prelude.pure newValue, ..}
+instance Property "SubnetRouteTable" ExplanationProperty where
+  type PropertyType "SubnetRouteTable" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {subnetRouteTable = Prelude.pure newValue, ..}
+instance Property "TransitGateway" ExplanationProperty where
+  type PropertyType "TransitGateway" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {transitGateway = Prelude.pure newValue, ..}
+instance Property "TransitGatewayAttachment" ExplanationProperty where
+  type PropertyType "TransitGatewayAttachment" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {transitGatewayAttachment = Prelude.pure newValue, ..}
+instance Property "TransitGatewayRouteTable" ExplanationProperty where
+  type PropertyType "TransitGatewayRouteTable" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {transitGatewayRouteTable = Prelude.pure newValue, ..}
+instance Property "TransitGatewayRouteTableRoute" ExplanationProperty where
+  type PropertyType "TransitGatewayRouteTableRoute" ExplanationProperty = TransitGatewayRouteTableRouteProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {transitGatewayRouteTableRoute = Prelude.pure newValue, ..}
+instance Property "Vpc" ExplanationProperty where
+  type PropertyType "Vpc" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {vpc = Prelude.pure newValue, ..}
+instance Property "VpcPeeringConnection" ExplanationProperty where
+  type PropertyType "VpcPeeringConnection" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty
+        {vpcPeeringConnection = Prelude.pure newValue, ..}
+instance Property "VpnConnection" ExplanationProperty where
+  type PropertyType "VpnConnection" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {vpnConnection = Prelude.pure newValue, ..}
+instance Property "VpnGateway" ExplanationProperty where
+  type PropertyType "VpnGateway" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {vpnGateway = Prelude.pure newValue, ..}
+instance Property "vpcEndpoint" ExplanationProperty where
+  type PropertyType "vpcEndpoint" ExplanationProperty = AnalysisComponentProperty
+  set newValue ExplanationProperty {..}
+    = ExplanationProperty {vpcEndpoint = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/ExplanationProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/ExplanationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/ExplanationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.ExplanationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ExplanationProperty :: Prelude.Type
+instance ToResourceProperties ExplanationProperty
+instance Prelude.Eq ExplanationProperty
+instance Prelude.Show ExplanationProperty
+instance JSON.ToJSON ExplanationProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PathComponentProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PathComponentProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PathComponentProperty.hs
@@ -0,0 +1,197 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.PathComponentProperty (
+        module Exports, PathComponentProperty(..), mkPathComponentProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AdditionalDetailProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisAclRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisComponentProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisPacketHeaderProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisRouteTableRouteProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisSecurityGroupRuleProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.ExplanationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsAnalysis.TransitGatewayRouteTableRouteProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PathComponentProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html>
+    PathComponentProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-aclrule>
+                           aclRule :: (Prelude.Maybe AnalysisAclRuleProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-additionaldetails>
+                           additionalDetails :: (Prelude.Maybe [AdditionalDetailProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-component>
+                           component :: (Prelude.Maybe AnalysisComponentProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-destinationvpc>
+                           destinationVpc :: (Prelude.Maybe AnalysisComponentProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-elasticloadbalancerlistener>
+                           elasticLoadBalancerListener :: (Prelude.Maybe AnalysisComponentProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-explanations>
+                           explanations :: (Prelude.Maybe [ExplanationProperty]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-inboundheader>
+                           inboundHeader :: (Prelude.Maybe AnalysisPacketHeaderProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-outboundheader>
+                           outboundHeader :: (Prelude.Maybe AnalysisPacketHeaderProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-routetableroute>
+                           routeTableRoute :: (Prelude.Maybe AnalysisRouteTableRouteProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-securitygrouprule>
+                           securityGroupRule :: (Prelude.Maybe AnalysisSecurityGroupRuleProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-sequencenumber>
+                           sequenceNumber :: (Prelude.Maybe (Value Prelude.Integer)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-servicename>
+                           serviceName :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-sourcevpc>
+                           sourceVpc :: (Prelude.Maybe AnalysisComponentProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-subnet>
+                           subnet :: (Prelude.Maybe AnalysisComponentProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-transitgateway>
+                           transitGateway :: (Prelude.Maybe AnalysisComponentProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-transitgatewayroutetableroute>
+                           transitGatewayRouteTableRoute :: (Prelude.Maybe TransitGatewayRouteTableRouteProperty),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-pathcomponent.html#cfn-ec2-networkinsightsanalysis-pathcomponent-vpc>
+                           vpc :: (Prelude.Maybe AnalysisComponentProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPathComponentProperty :: PathComponentProperty
+mkPathComponentProperty
+  = PathComponentProperty
+      {haddock_workaround_ = (), aclRule = Prelude.Nothing,
+       additionalDetails = Prelude.Nothing, component = Prelude.Nothing,
+       destinationVpc = Prelude.Nothing,
+       elasticLoadBalancerListener = Prelude.Nothing,
+       explanations = Prelude.Nothing, inboundHeader = Prelude.Nothing,
+       outboundHeader = Prelude.Nothing,
+       routeTableRoute = Prelude.Nothing,
+       securityGroupRule = Prelude.Nothing,
+       sequenceNumber = Prelude.Nothing, serviceName = Prelude.Nothing,
+       sourceVpc = Prelude.Nothing, subnet = Prelude.Nothing,
+       transitGateway = Prelude.Nothing,
+       transitGatewayRouteTableRoute = Prelude.Nothing,
+       vpc = Prelude.Nothing}
+instance ToResourceProperties PathComponentProperty where
+  toResourceProperties PathComponentProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.PathComponent",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AclRule" Prelude.<$> aclRule,
+                            (JSON..=) "AdditionalDetails" Prelude.<$> additionalDetails,
+                            (JSON..=) "Component" Prelude.<$> component,
+                            (JSON..=) "DestinationVpc" Prelude.<$> destinationVpc,
+                            (JSON..=) "ElasticLoadBalancerListener"
+                              Prelude.<$> elasticLoadBalancerListener,
+                            (JSON..=) "Explanations" Prelude.<$> explanations,
+                            (JSON..=) "InboundHeader" Prelude.<$> inboundHeader,
+                            (JSON..=) "OutboundHeader" Prelude.<$> outboundHeader,
+                            (JSON..=) "RouteTableRoute" Prelude.<$> routeTableRoute,
+                            (JSON..=) "SecurityGroupRule" Prelude.<$> securityGroupRule,
+                            (JSON..=) "SequenceNumber" Prelude.<$> sequenceNumber,
+                            (JSON..=) "ServiceName" Prelude.<$> serviceName,
+                            (JSON..=) "SourceVpc" Prelude.<$> sourceVpc,
+                            (JSON..=) "Subnet" Prelude.<$> subnet,
+                            (JSON..=) "TransitGateway" Prelude.<$> transitGateway,
+                            (JSON..=) "TransitGatewayRouteTableRoute"
+                              Prelude.<$> transitGatewayRouteTableRoute,
+                            (JSON..=) "Vpc" Prelude.<$> vpc])}
+instance JSON.ToJSON PathComponentProperty where
+  toJSON PathComponentProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AclRule" Prelude.<$> aclRule,
+               (JSON..=) "AdditionalDetails" Prelude.<$> additionalDetails,
+               (JSON..=) "Component" Prelude.<$> component,
+               (JSON..=) "DestinationVpc" Prelude.<$> destinationVpc,
+               (JSON..=) "ElasticLoadBalancerListener"
+                 Prelude.<$> elasticLoadBalancerListener,
+               (JSON..=) "Explanations" Prelude.<$> explanations,
+               (JSON..=) "InboundHeader" Prelude.<$> inboundHeader,
+               (JSON..=) "OutboundHeader" Prelude.<$> outboundHeader,
+               (JSON..=) "RouteTableRoute" Prelude.<$> routeTableRoute,
+               (JSON..=) "SecurityGroupRule" Prelude.<$> securityGroupRule,
+               (JSON..=) "SequenceNumber" Prelude.<$> sequenceNumber,
+               (JSON..=) "ServiceName" Prelude.<$> serviceName,
+               (JSON..=) "SourceVpc" Prelude.<$> sourceVpc,
+               (JSON..=) "Subnet" Prelude.<$> subnet,
+               (JSON..=) "TransitGateway" Prelude.<$> transitGateway,
+               (JSON..=) "TransitGatewayRouteTableRoute"
+                 Prelude.<$> transitGatewayRouteTableRoute,
+               (JSON..=) "Vpc" Prelude.<$> vpc]))
+instance Property "AclRule" PathComponentProperty where
+  type PropertyType "AclRule" PathComponentProperty = AnalysisAclRuleProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty {aclRule = Prelude.pure newValue, ..}
+instance Property "AdditionalDetails" PathComponentProperty where
+  type PropertyType "AdditionalDetails" PathComponentProperty = [AdditionalDetailProperty]
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty
+        {additionalDetails = Prelude.pure newValue, ..}
+instance Property "Component" PathComponentProperty where
+  type PropertyType "Component" PathComponentProperty = AnalysisComponentProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty {component = Prelude.pure newValue, ..}
+instance Property "DestinationVpc" PathComponentProperty where
+  type PropertyType "DestinationVpc" PathComponentProperty = AnalysisComponentProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty
+        {destinationVpc = Prelude.pure newValue, ..}
+instance Property "ElasticLoadBalancerListener" PathComponentProperty where
+  type PropertyType "ElasticLoadBalancerListener" PathComponentProperty = AnalysisComponentProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty
+        {elasticLoadBalancerListener = Prelude.pure newValue, ..}
+instance Property "Explanations" PathComponentProperty where
+  type PropertyType "Explanations" PathComponentProperty = [ExplanationProperty]
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty {explanations = Prelude.pure newValue, ..}
+instance Property "InboundHeader" PathComponentProperty where
+  type PropertyType "InboundHeader" PathComponentProperty = AnalysisPacketHeaderProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty {inboundHeader = Prelude.pure newValue, ..}
+instance Property "OutboundHeader" PathComponentProperty where
+  type PropertyType "OutboundHeader" PathComponentProperty = AnalysisPacketHeaderProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty
+        {outboundHeader = Prelude.pure newValue, ..}
+instance Property "RouteTableRoute" PathComponentProperty where
+  type PropertyType "RouteTableRoute" PathComponentProperty = AnalysisRouteTableRouteProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty
+        {routeTableRoute = Prelude.pure newValue, ..}
+instance Property "SecurityGroupRule" PathComponentProperty where
+  type PropertyType "SecurityGroupRule" PathComponentProperty = AnalysisSecurityGroupRuleProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty
+        {securityGroupRule = Prelude.pure newValue, ..}
+instance Property "SequenceNumber" PathComponentProperty where
+  type PropertyType "SequenceNumber" PathComponentProperty = Value Prelude.Integer
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty
+        {sequenceNumber = Prelude.pure newValue, ..}
+instance Property "ServiceName" PathComponentProperty where
+  type PropertyType "ServiceName" PathComponentProperty = Value Prelude.Text
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty {serviceName = Prelude.pure newValue, ..}
+instance Property "SourceVpc" PathComponentProperty where
+  type PropertyType "SourceVpc" PathComponentProperty = AnalysisComponentProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty {sourceVpc = Prelude.pure newValue, ..}
+instance Property "Subnet" PathComponentProperty where
+  type PropertyType "Subnet" PathComponentProperty = AnalysisComponentProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty {subnet = Prelude.pure newValue, ..}
+instance Property "TransitGateway" PathComponentProperty where
+  type PropertyType "TransitGateway" PathComponentProperty = AnalysisComponentProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty
+        {transitGateway = Prelude.pure newValue, ..}
+instance Property "TransitGatewayRouteTableRoute" PathComponentProperty where
+  type PropertyType "TransitGatewayRouteTableRoute" PathComponentProperty = TransitGatewayRouteTableRouteProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty
+        {transitGatewayRouteTableRoute = Prelude.pure newValue, ..}
+instance Property "Vpc" PathComponentProperty where
+  type PropertyType "Vpc" PathComponentProperty = AnalysisComponentProperty
+  set newValue PathComponentProperty {..}
+    = PathComponentProperty {vpc = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PathComponentProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PathComponentProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PathComponentProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.PathComponentProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PathComponentProperty :: Prelude.Type
+instance ToResourceProperties PathComponentProperty
+instance Prelude.Eq PathComponentProperty
+instance Prelude.Show PathComponentProperty
+instance JSON.ToJSON PathComponentProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PortRangeProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PortRangeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PortRangeProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.PortRangeProperty (
+        PortRangeProperty(..), mkPortRangeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PortRangeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-portrange.html>
+    PortRangeProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-portrange.html#cfn-ec2-networkinsightsanalysis-portrange-from>
+                       from :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-portrange.html#cfn-ec2-networkinsightsanalysis-portrange-to>
+                       to :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPortRangeProperty :: PortRangeProperty
+mkPortRangeProperty
+  = PortRangeProperty
+      {haddock_workaround_ = (), from = Prelude.Nothing,
+       to = Prelude.Nothing}
+instance ToResourceProperties PortRangeProperty where
+  toResourceProperties PortRangeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.PortRange",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "From" Prelude.<$> from,
+                            (JSON..=) "To" Prelude.<$> to])}
+instance JSON.ToJSON PortRangeProperty where
+  toJSON PortRangeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "From" Prelude.<$> from,
+               (JSON..=) "To" Prelude.<$> to]))
+instance Property "From" PortRangeProperty where
+  type PropertyType "From" PortRangeProperty = Value Prelude.Integer
+  set newValue PortRangeProperty {..}
+    = PortRangeProperty {from = Prelude.pure newValue, ..}
+instance Property "To" PortRangeProperty where
+  type PropertyType "To" PortRangeProperty = Value Prelude.Integer
+  set newValue PortRangeProperty {..}
+    = PortRangeProperty {to = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PortRangeProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PortRangeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/PortRangeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.PortRangeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PortRangeProperty :: Prelude.Type
+instance ToResourceProperties PortRangeProperty
+instance Prelude.Eq PortRangeProperty
+instance Prelude.Show PortRangeProperty
+instance JSON.ToJSON PortRangeProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/TransitGatewayRouteTableRouteProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/TransitGatewayRouteTableRouteProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/TransitGatewayRouteTableRouteProperty.hs
@@ -0,0 +1,96 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.TransitGatewayRouteTableRouteProperty (
+        TransitGatewayRouteTableRouteProperty(..),
+        mkTransitGatewayRouteTableRouteProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayRouteTableRouteProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-transitgatewayroutetableroute.html>
+    TransitGatewayRouteTableRouteProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-transitgatewayroutetableroute.html#cfn-ec2-networkinsightsanalysis-transitgatewayroutetableroute-attachmentid>
+                                           attachmentId :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-transitgatewayroutetableroute.html#cfn-ec2-networkinsightsanalysis-transitgatewayroutetableroute-destinationcidr>
+                                           destinationCidr :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-transitgatewayroutetableroute.html#cfn-ec2-networkinsightsanalysis-transitgatewayroutetableroute-prefixlistid>
+                                           prefixListId :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-transitgatewayroutetableroute.html#cfn-ec2-networkinsightsanalysis-transitgatewayroutetableroute-resourceid>
+                                           resourceId :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-transitgatewayroutetableroute.html#cfn-ec2-networkinsightsanalysis-transitgatewayroutetableroute-resourcetype>
+                                           resourceType :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-transitgatewayroutetableroute.html#cfn-ec2-networkinsightsanalysis-transitgatewayroutetableroute-routeorigin>
+                                           routeOrigin :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightsanalysis-transitgatewayroutetableroute.html#cfn-ec2-networkinsightsanalysis-transitgatewayroutetableroute-state>
+                                           state :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayRouteTableRouteProperty ::
+  TransitGatewayRouteTableRouteProperty
+mkTransitGatewayRouteTableRouteProperty
+  = TransitGatewayRouteTableRouteProperty
+      {haddock_workaround_ = (), attachmentId = Prelude.Nothing,
+       destinationCidr = Prelude.Nothing, prefixListId = Prelude.Nothing,
+       resourceId = Prelude.Nothing, resourceType = Prelude.Nothing,
+       routeOrigin = Prelude.Nothing, state = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayRouteTableRouteProperty where
+  toResourceProperties TransitGatewayRouteTableRouteProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsAnalysis.TransitGatewayRouteTableRoute",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AttachmentId" Prelude.<$> attachmentId,
+                            (JSON..=) "DestinationCidr" Prelude.<$> destinationCidr,
+                            (JSON..=) "PrefixListId" Prelude.<$> prefixListId,
+                            (JSON..=) "ResourceId" Prelude.<$> resourceId,
+                            (JSON..=) "ResourceType" Prelude.<$> resourceType,
+                            (JSON..=) "RouteOrigin" Prelude.<$> routeOrigin,
+                            (JSON..=) "State" Prelude.<$> state])}
+instance JSON.ToJSON TransitGatewayRouteTableRouteProperty where
+  toJSON TransitGatewayRouteTableRouteProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AttachmentId" Prelude.<$> attachmentId,
+               (JSON..=) "DestinationCidr" Prelude.<$> destinationCidr,
+               (JSON..=) "PrefixListId" Prelude.<$> prefixListId,
+               (JSON..=) "ResourceId" Prelude.<$> resourceId,
+               (JSON..=) "ResourceType" Prelude.<$> resourceType,
+               (JSON..=) "RouteOrigin" Prelude.<$> routeOrigin,
+               (JSON..=) "State" Prelude.<$> state]))
+instance Property "AttachmentId" TransitGatewayRouteTableRouteProperty where
+  type PropertyType "AttachmentId" TransitGatewayRouteTableRouteProperty = Value Prelude.Text
+  set newValue TransitGatewayRouteTableRouteProperty {..}
+    = TransitGatewayRouteTableRouteProperty
+        {attachmentId = Prelude.pure newValue, ..}
+instance Property "DestinationCidr" TransitGatewayRouteTableRouteProperty where
+  type PropertyType "DestinationCidr" TransitGatewayRouteTableRouteProperty = Value Prelude.Text
+  set newValue TransitGatewayRouteTableRouteProperty {..}
+    = TransitGatewayRouteTableRouteProperty
+        {destinationCidr = Prelude.pure newValue, ..}
+instance Property "PrefixListId" TransitGatewayRouteTableRouteProperty where
+  type PropertyType "PrefixListId" TransitGatewayRouteTableRouteProperty = Value Prelude.Text
+  set newValue TransitGatewayRouteTableRouteProperty {..}
+    = TransitGatewayRouteTableRouteProperty
+        {prefixListId = Prelude.pure newValue, ..}
+instance Property "ResourceId" TransitGatewayRouteTableRouteProperty where
+  type PropertyType "ResourceId" TransitGatewayRouteTableRouteProperty = Value Prelude.Text
+  set newValue TransitGatewayRouteTableRouteProperty {..}
+    = TransitGatewayRouteTableRouteProperty
+        {resourceId = Prelude.pure newValue, ..}
+instance Property "ResourceType" TransitGatewayRouteTableRouteProperty where
+  type PropertyType "ResourceType" TransitGatewayRouteTableRouteProperty = Value Prelude.Text
+  set newValue TransitGatewayRouteTableRouteProperty {..}
+    = TransitGatewayRouteTableRouteProperty
+        {resourceType = Prelude.pure newValue, ..}
+instance Property "RouteOrigin" TransitGatewayRouteTableRouteProperty where
+  type PropertyType "RouteOrigin" TransitGatewayRouteTableRouteProperty = Value Prelude.Text
+  set newValue TransitGatewayRouteTableRouteProperty {..}
+    = TransitGatewayRouteTableRouteProperty
+        {routeOrigin = Prelude.pure newValue, ..}
+instance Property "State" TransitGatewayRouteTableRouteProperty where
+  type PropertyType "State" TransitGatewayRouteTableRouteProperty = Value Prelude.Text
+  set newValue TransitGatewayRouteTableRouteProperty {..}
+    = TransitGatewayRouteTableRouteProperty
+        {state = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsAnalysis/TransitGatewayRouteTableRouteProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/TransitGatewayRouteTableRouteProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsAnalysis/TransitGatewayRouteTableRouteProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsAnalysis.TransitGatewayRouteTableRouteProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TransitGatewayRouteTableRouteProperty :: Prelude.Type
+instance ToResourceProperties TransitGatewayRouteTableRouteProperty
+instance Prelude.Eq TransitGatewayRouteTableRouteProperty
+instance Prelude.Show TransitGatewayRouteTableRouteProperty
+instance JSON.ToJSON TransitGatewayRouteTableRouteProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsPath.hs b/gen/Stratosphere/EC2/NetworkInsightsPath.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsPath.hs
@@ -0,0 +1,109 @@
+module Stratosphere.EC2.NetworkInsightsPath (
+        module Exports, NetworkInsightsPath(..), mkNetworkInsightsPath
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsPath.PathFilterProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data NetworkInsightsPath
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html>
+    NetworkInsightsPath {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-destination>
+                         destination :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-destinationip>
+                         destinationIp :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-destinationport>
+                         destinationPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-filteratdestination>
+                         filterAtDestination :: (Prelude.Maybe PathFilterProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-filteratsource>
+                         filterAtSource :: (Prelude.Maybe PathFilterProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-protocol>
+                         protocol :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-source>
+                         source :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-sourceip>
+                         sourceIp :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinsightspath.html#cfn-ec2-networkinsightspath-tags>
+                         tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInsightsPath ::
+  Value Prelude.Text -> Value Prelude.Text -> NetworkInsightsPath
+mkNetworkInsightsPath protocol source
+  = NetworkInsightsPath
+      {haddock_workaround_ = (), protocol = protocol, source = source,
+       destination = Prelude.Nothing, destinationIp = Prelude.Nothing,
+       destinationPort = Prelude.Nothing,
+       filterAtDestination = Prelude.Nothing,
+       filterAtSource = Prelude.Nothing, sourceIp = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties NetworkInsightsPath where
+  toResourceProperties NetworkInsightsPath {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsPath",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Protocol" JSON..= protocol, "Source" JSON..= source]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Destination" Prelude.<$> destination,
+                               (JSON..=) "DestinationIp" Prelude.<$> destinationIp,
+                               (JSON..=) "DestinationPort" Prelude.<$> destinationPort,
+                               (JSON..=) "FilterAtDestination" Prelude.<$> filterAtDestination,
+                               (JSON..=) "FilterAtSource" Prelude.<$> filterAtSource,
+                               (JSON..=) "SourceIp" Prelude.<$> sourceIp,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON NetworkInsightsPath where
+  toJSON NetworkInsightsPath {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Protocol" JSON..= protocol, "Source" JSON..= source]
+              (Prelude.catMaybes
+                 [(JSON..=) "Destination" Prelude.<$> destination,
+                  (JSON..=) "DestinationIp" Prelude.<$> destinationIp,
+                  (JSON..=) "DestinationPort" Prelude.<$> destinationPort,
+                  (JSON..=) "FilterAtDestination" Prelude.<$> filterAtDestination,
+                  (JSON..=) "FilterAtSource" Prelude.<$> filterAtSource,
+                  (JSON..=) "SourceIp" Prelude.<$> sourceIp,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Destination" NetworkInsightsPath where
+  type PropertyType "Destination" NetworkInsightsPath = Value Prelude.Text
+  set newValue NetworkInsightsPath {..}
+    = NetworkInsightsPath {destination = Prelude.pure newValue, ..}
+instance Property "DestinationIp" NetworkInsightsPath where
+  type PropertyType "DestinationIp" NetworkInsightsPath = Value Prelude.Text
+  set newValue NetworkInsightsPath {..}
+    = NetworkInsightsPath {destinationIp = Prelude.pure newValue, ..}
+instance Property "DestinationPort" NetworkInsightsPath where
+  type PropertyType "DestinationPort" NetworkInsightsPath = Value Prelude.Integer
+  set newValue NetworkInsightsPath {..}
+    = NetworkInsightsPath {destinationPort = Prelude.pure newValue, ..}
+instance Property "FilterAtDestination" NetworkInsightsPath where
+  type PropertyType "FilterAtDestination" NetworkInsightsPath = PathFilterProperty
+  set newValue NetworkInsightsPath {..}
+    = NetworkInsightsPath
+        {filterAtDestination = Prelude.pure newValue, ..}
+instance Property "FilterAtSource" NetworkInsightsPath where
+  type PropertyType "FilterAtSource" NetworkInsightsPath = PathFilterProperty
+  set newValue NetworkInsightsPath {..}
+    = NetworkInsightsPath {filterAtSource = Prelude.pure newValue, ..}
+instance Property "Protocol" NetworkInsightsPath where
+  type PropertyType "Protocol" NetworkInsightsPath = Value Prelude.Text
+  set newValue NetworkInsightsPath {..}
+    = NetworkInsightsPath {protocol = newValue, ..}
+instance Property "Source" NetworkInsightsPath where
+  type PropertyType "Source" NetworkInsightsPath = Value Prelude.Text
+  set newValue NetworkInsightsPath {..}
+    = NetworkInsightsPath {source = newValue, ..}
+instance Property "SourceIp" NetworkInsightsPath where
+  type PropertyType "SourceIp" NetworkInsightsPath = Value Prelude.Text
+  set newValue NetworkInsightsPath {..}
+    = NetworkInsightsPath {sourceIp = Prelude.pure newValue, ..}
+instance Property "Tags" NetworkInsightsPath where
+  type PropertyType "Tags" NetworkInsightsPath = [Tag]
+  set newValue NetworkInsightsPath {..}
+    = NetworkInsightsPath {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsPath/FilterPortRangeProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsPath/FilterPortRangeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsPath/FilterPortRangeProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.NetworkInsightsPath.FilterPortRangeProperty (
+        FilterPortRangeProperty(..), mkFilterPortRangeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FilterPortRangeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightspath-filterportrange.html>
+    FilterPortRangeProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightspath-filterportrange.html#cfn-ec2-networkinsightspath-filterportrange-fromport>
+                             fromPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightspath-filterportrange.html#cfn-ec2-networkinsightspath-filterportrange-toport>
+                             toPort :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFilterPortRangeProperty :: FilterPortRangeProperty
+mkFilterPortRangeProperty
+  = FilterPortRangeProperty
+      {haddock_workaround_ = (), fromPort = Prelude.Nothing,
+       toPort = Prelude.Nothing}
+instance ToResourceProperties FilterPortRangeProperty where
+  toResourceProperties FilterPortRangeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsPath.FilterPortRange",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "FromPort" Prelude.<$> fromPort,
+                            (JSON..=) "ToPort" Prelude.<$> toPort])}
+instance JSON.ToJSON FilterPortRangeProperty where
+  toJSON FilterPortRangeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "FromPort" Prelude.<$> fromPort,
+               (JSON..=) "ToPort" Prelude.<$> toPort]))
+instance Property "FromPort" FilterPortRangeProperty where
+  type PropertyType "FromPort" FilterPortRangeProperty = Value Prelude.Integer
+  set newValue FilterPortRangeProperty {..}
+    = FilterPortRangeProperty {fromPort = Prelude.pure newValue, ..}
+instance Property "ToPort" FilterPortRangeProperty where
+  type PropertyType "ToPort" FilterPortRangeProperty = Value Prelude.Integer
+  set newValue FilterPortRangeProperty {..}
+    = FilterPortRangeProperty {toPort = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsPath/FilterPortRangeProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsPath/FilterPortRangeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsPath/FilterPortRangeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsPath.FilterPortRangeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FilterPortRangeProperty :: Prelude.Type
+instance ToResourceProperties FilterPortRangeProperty
+instance Prelude.Eq FilterPortRangeProperty
+instance Prelude.Show FilterPortRangeProperty
+instance JSON.ToJSON FilterPortRangeProperty
diff --git a/gen/Stratosphere/EC2/NetworkInsightsPath/PathFilterProperty.hs b/gen/Stratosphere/EC2/NetworkInsightsPath/PathFilterProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsPath/PathFilterProperty.hs
@@ -0,0 +1,65 @@
+module Stratosphere.EC2.NetworkInsightsPath.PathFilterProperty (
+        module Exports, PathFilterProperty(..), mkPathFilterProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInsightsPath.FilterPortRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PathFilterProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightspath-pathfilter.html>
+    PathFilterProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightspath-pathfilter.html#cfn-ec2-networkinsightspath-pathfilter-destinationaddress>
+                        destinationAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightspath-pathfilter.html#cfn-ec2-networkinsightspath-pathfilter-destinationportrange>
+                        destinationPortRange :: (Prelude.Maybe FilterPortRangeProperty),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightspath-pathfilter.html#cfn-ec2-networkinsightspath-pathfilter-sourceaddress>
+                        sourceAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinsightspath-pathfilter.html#cfn-ec2-networkinsightspath-pathfilter-sourceportrange>
+                        sourcePortRange :: (Prelude.Maybe FilterPortRangeProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPathFilterProperty :: PathFilterProperty
+mkPathFilterProperty
+  = PathFilterProperty
+      {haddock_workaround_ = (), destinationAddress = Prelude.Nothing,
+       destinationPortRange = Prelude.Nothing,
+       sourceAddress = Prelude.Nothing, sourcePortRange = Prelude.Nothing}
+instance ToResourceProperties PathFilterProperty where
+  toResourceProperties PathFilterProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInsightsPath.PathFilter",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DestinationAddress" Prelude.<$> destinationAddress,
+                            (JSON..=) "DestinationPortRange" Prelude.<$> destinationPortRange,
+                            (JSON..=) "SourceAddress" Prelude.<$> sourceAddress,
+                            (JSON..=) "SourcePortRange" Prelude.<$> sourcePortRange])}
+instance JSON.ToJSON PathFilterProperty where
+  toJSON PathFilterProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DestinationAddress" Prelude.<$> destinationAddress,
+               (JSON..=) "DestinationPortRange" Prelude.<$> destinationPortRange,
+               (JSON..=) "SourceAddress" Prelude.<$> sourceAddress,
+               (JSON..=) "SourcePortRange" Prelude.<$> sourcePortRange]))
+instance Property "DestinationAddress" PathFilterProperty where
+  type PropertyType "DestinationAddress" PathFilterProperty = Value Prelude.Text
+  set newValue PathFilterProperty {..}
+    = PathFilterProperty
+        {destinationAddress = Prelude.pure newValue, ..}
+instance Property "DestinationPortRange" PathFilterProperty where
+  type PropertyType "DestinationPortRange" PathFilterProperty = FilterPortRangeProperty
+  set newValue PathFilterProperty {..}
+    = PathFilterProperty
+        {destinationPortRange = Prelude.pure newValue, ..}
+instance Property "SourceAddress" PathFilterProperty where
+  type PropertyType "SourceAddress" PathFilterProperty = Value Prelude.Text
+  set newValue PathFilterProperty {..}
+    = PathFilterProperty {sourceAddress = Prelude.pure newValue, ..}
+instance Property "SourcePortRange" PathFilterProperty where
+  type PropertyType "SourcePortRange" PathFilterProperty = FilterPortRangeProperty
+  set newValue PathFilterProperty {..}
+    = PathFilterProperty {sourcePortRange = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInsightsPath/PathFilterProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInsightsPath/PathFilterProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInsightsPath/PathFilterProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInsightsPath.PathFilterProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PathFilterProperty :: Prelude.Type
+instance ToResourceProperties PathFilterProperty
+instance Prelude.Eq PathFilterProperty
+instance Prelude.Show PathFilterProperty
+instance JSON.ToJSON PathFilterProperty
diff --git a/gen/Stratosphere/EC2/NetworkInterface.hs b/gen/Stratosphere/EC2/NetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface.hs
@@ -0,0 +1,179 @@
+module Stratosphere.EC2.NetworkInterface (
+        module Exports, NetworkInterface(..), mkNetworkInterface
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInterface.ConnectionTrackingSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInterface.InstanceIpv6AddressProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInterface.Ipv4PrefixSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInterface.Ipv6PrefixSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInterface.PrivateIpAddressSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data NetworkInterface
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html>
+    NetworkInterface {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-connectiontrackingspecification>
+                      connectionTrackingSpecification :: (Prelude.Maybe ConnectionTrackingSpecificationProperty),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-description>
+                      description :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-groupset>
+                      groupSet :: (Prelude.Maybe (ValueList Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-interfacetype>
+                      interfaceType :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-ipv4prefixcount>
+                      ipv4PrefixCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-ipv4prefixes>
+                      ipv4Prefixes :: (Prelude.Maybe [Ipv4PrefixSpecificationProperty]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-ipv6addresscount>
+                      ipv6AddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-ipv6addresses>
+                      ipv6Addresses :: (Prelude.Maybe [InstanceIpv6AddressProperty]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-ipv6prefixcount>
+                      ipv6PrefixCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-ipv6prefixes>
+                      ipv6Prefixes :: (Prelude.Maybe [Ipv6PrefixSpecificationProperty]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-privateipaddress>
+                      privateIpAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-privateipaddresses>
+                      privateIpAddresses :: (Prelude.Maybe [PrivateIpAddressSpecificationProperty]),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-secondaryprivateipaddresscount>
+                      secondaryPrivateIpAddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-sourcedestcheck>
+                      sourceDestCheck :: (Prelude.Maybe (Value Prelude.Bool)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-subnetid>
+                      subnetId :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterface.html#cfn-ec2-networkinterface-tags>
+                      tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterface :: Value Prelude.Text -> NetworkInterface
+mkNetworkInterface subnetId
+  = NetworkInterface
+      {haddock_workaround_ = (), subnetId = subnetId,
+       connectionTrackingSpecification = Prelude.Nothing,
+       description = Prelude.Nothing, groupSet = Prelude.Nothing,
+       interfaceType = Prelude.Nothing, ipv4PrefixCount = Prelude.Nothing,
+       ipv4Prefixes = Prelude.Nothing, ipv6AddressCount = Prelude.Nothing,
+       ipv6Addresses = Prelude.Nothing, ipv6PrefixCount = Prelude.Nothing,
+       ipv6Prefixes = Prelude.Nothing, privateIpAddress = Prelude.Nothing,
+       privateIpAddresses = Prelude.Nothing,
+       secondaryPrivateIpAddressCount = Prelude.Nothing,
+       sourceDestCheck = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties NetworkInterface where
+  toResourceProperties NetworkInterface {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterface",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SubnetId" JSON..= subnetId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ConnectionTrackingSpecification"
+                                 Prelude.<$> connectionTrackingSpecification,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "GroupSet" Prelude.<$> groupSet,
+                               (JSON..=) "InterfaceType" Prelude.<$> interfaceType,
+                               (JSON..=) "Ipv4PrefixCount" Prelude.<$> ipv4PrefixCount,
+                               (JSON..=) "Ipv4Prefixes" Prelude.<$> ipv4Prefixes,
+                               (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+                               (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+                               (JSON..=) "Ipv6PrefixCount" Prelude.<$> ipv6PrefixCount,
+                               (JSON..=) "Ipv6Prefixes" Prelude.<$> ipv6Prefixes,
+                               (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+                               (JSON..=) "PrivateIpAddresses" Prelude.<$> privateIpAddresses,
+                               (JSON..=) "SecondaryPrivateIpAddressCount"
+                                 Prelude.<$> secondaryPrivateIpAddressCount,
+                               (JSON..=) "SourceDestCheck" Prelude.<$> sourceDestCheck,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON NetworkInterface where
+  toJSON NetworkInterface {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SubnetId" JSON..= subnetId]
+              (Prelude.catMaybes
+                 [(JSON..=) "ConnectionTrackingSpecification"
+                    Prelude.<$> connectionTrackingSpecification,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "GroupSet" Prelude.<$> groupSet,
+                  (JSON..=) "InterfaceType" Prelude.<$> interfaceType,
+                  (JSON..=) "Ipv4PrefixCount" Prelude.<$> ipv4PrefixCount,
+                  (JSON..=) "Ipv4Prefixes" Prelude.<$> ipv4Prefixes,
+                  (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+                  (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+                  (JSON..=) "Ipv6PrefixCount" Prelude.<$> ipv6PrefixCount,
+                  (JSON..=) "Ipv6Prefixes" Prelude.<$> ipv6Prefixes,
+                  (JSON..=) "PrivateIpAddress" Prelude.<$> privateIpAddress,
+                  (JSON..=) "PrivateIpAddresses" Prelude.<$> privateIpAddresses,
+                  (JSON..=) "SecondaryPrivateIpAddressCount"
+                    Prelude.<$> secondaryPrivateIpAddressCount,
+                  (JSON..=) "SourceDestCheck" Prelude.<$> sourceDestCheck,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ConnectionTrackingSpecification" NetworkInterface where
+  type PropertyType "ConnectionTrackingSpecification" NetworkInterface = ConnectionTrackingSpecificationProperty
+  set newValue NetworkInterface {..}
+    = NetworkInterface
+        {connectionTrackingSpecification = Prelude.pure newValue, ..}
+instance Property "Description" NetworkInterface where
+  type PropertyType "Description" NetworkInterface = Value Prelude.Text
+  set newValue NetworkInterface {..}
+    = NetworkInterface {description = Prelude.pure newValue, ..}
+instance Property "GroupSet" NetworkInterface where
+  type PropertyType "GroupSet" NetworkInterface = ValueList Prelude.Text
+  set newValue NetworkInterface {..}
+    = NetworkInterface {groupSet = Prelude.pure newValue, ..}
+instance Property "InterfaceType" NetworkInterface where
+  type PropertyType "InterfaceType" NetworkInterface = Value Prelude.Text
+  set newValue NetworkInterface {..}
+    = NetworkInterface {interfaceType = Prelude.pure newValue, ..}
+instance Property "Ipv4PrefixCount" NetworkInterface where
+  type PropertyType "Ipv4PrefixCount" NetworkInterface = Value Prelude.Integer
+  set newValue NetworkInterface {..}
+    = NetworkInterface {ipv4PrefixCount = Prelude.pure newValue, ..}
+instance Property "Ipv4Prefixes" NetworkInterface where
+  type PropertyType "Ipv4Prefixes" NetworkInterface = [Ipv4PrefixSpecificationProperty]
+  set newValue NetworkInterface {..}
+    = NetworkInterface {ipv4Prefixes = Prelude.pure newValue, ..}
+instance Property "Ipv6AddressCount" NetworkInterface where
+  type PropertyType "Ipv6AddressCount" NetworkInterface = Value Prelude.Integer
+  set newValue NetworkInterface {..}
+    = NetworkInterface {ipv6AddressCount = Prelude.pure newValue, ..}
+instance Property "Ipv6Addresses" NetworkInterface where
+  type PropertyType "Ipv6Addresses" NetworkInterface = [InstanceIpv6AddressProperty]
+  set newValue NetworkInterface {..}
+    = NetworkInterface {ipv6Addresses = Prelude.pure newValue, ..}
+instance Property "Ipv6PrefixCount" NetworkInterface where
+  type PropertyType "Ipv6PrefixCount" NetworkInterface = Value Prelude.Integer
+  set newValue NetworkInterface {..}
+    = NetworkInterface {ipv6PrefixCount = Prelude.pure newValue, ..}
+instance Property "Ipv6Prefixes" NetworkInterface where
+  type PropertyType "Ipv6Prefixes" NetworkInterface = [Ipv6PrefixSpecificationProperty]
+  set newValue NetworkInterface {..}
+    = NetworkInterface {ipv6Prefixes = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddress" NetworkInterface where
+  type PropertyType "PrivateIpAddress" NetworkInterface = Value Prelude.Text
+  set newValue NetworkInterface {..}
+    = NetworkInterface {privateIpAddress = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddresses" NetworkInterface where
+  type PropertyType "PrivateIpAddresses" NetworkInterface = [PrivateIpAddressSpecificationProperty]
+  set newValue NetworkInterface {..}
+    = NetworkInterface {privateIpAddresses = Prelude.pure newValue, ..}
+instance Property "SecondaryPrivateIpAddressCount" NetworkInterface where
+  type PropertyType "SecondaryPrivateIpAddressCount" NetworkInterface = Value Prelude.Integer
+  set newValue NetworkInterface {..}
+    = NetworkInterface
+        {secondaryPrivateIpAddressCount = Prelude.pure newValue, ..}
+instance Property "SourceDestCheck" NetworkInterface where
+  type PropertyType "SourceDestCheck" NetworkInterface = Value Prelude.Bool
+  set newValue NetworkInterface {..}
+    = NetworkInterface {sourceDestCheck = Prelude.pure newValue, ..}
+instance Property "SubnetId" NetworkInterface where
+  type PropertyType "SubnetId" NetworkInterface = Value Prelude.Text
+  set newValue NetworkInterface {..}
+    = NetworkInterface {subnetId = newValue, ..}
+instance Property "Tags" NetworkInterface where
+  type PropertyType "Tags" NetworkInterface = [Tag]
+  set newValue NetworkInterface {..}
+    = NetworkInterface {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInterface/ConnectionTrackingSpecificationProperty.hs b/gen/Stratosphere/EC2/NetworkInterface/ConnectionTrackingSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/ConnectionTrackingSpecificationProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.EC2.NetworkInterface.ConnectionTrackingSpecificationProperty (
+        ConnectionTrackingSpecificationProperty(..),
+        mkConnectionTrackingSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ConnectionTrackingSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-connectiontrackingspecification.html>
+    ConnectionTrackingSpecificationProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-connectiontrackingspecification.html#cfn-ec2-networkinterface-connectiontrackingspecification-tcpestablishedtimeout>
+                                             tcpEstablishedTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-connectiontrackingspecification.html#cfn-ec2-networkinterface-connectiontrackingspecification-udpstreamtimeout>
+                                             udpStreamTimeout :: (Prelude.Maybe (Value Prelude.Integer)),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-connectiontrackingspecification.html#cfn-ec2-networkinterface-connectiontrackingspecification-udptimeout>
+                                             udpTimeout :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkConnectionTrackingSpecificationProperty ::
+  ConnectionTrackingSpecificationProperty
+mkConnectionTrackingSpecificationProperty
+  = ConnectionTrackingSpecificationProperty
+      {haddock_workaround_ = (), tcpEstablishedTimeout = Prelude.Nothing,
+       udpStreamTimeout = Prelude.Nothing, udpTimeout = Prelude.Nothing}
+instance ToResourceProperties ConnectionTrackingSpecificationProperty where
+  toResourceProperties ConnectionTrackingSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterface.ConnectionTrackingSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "TcpEstablishedTimeout"
+                              Prelude.<$> tcpEstablishedTimeout,
+                            (JSON..=) "UdpStreamTimeout" Prelude.<$> udpStreamTimeout,
+                            (JSON..=) "UdpTimeout" Prelude.<$> udpTimeout])}
+instance JSON.ToJSON ConnectionTrackingSpecificationProperty where
+  toJSON ConnectionTrackingSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "TcpEstablishedTimeout"
+                 Prelude.<$> tcpEstablishedTimeout,
+               (JSON..=) "UdpStreamTimeout" Prelude.<$> udpStreamTimeout,
+               (JSON..=) "UdpTimeout" Prelude.<$> udpTimeout]))
+instance Property "TcpEstablishedTimeout" ConnectionTrackingSpecificationProperty where
+  type PropertyType "TcpEstablishedTimeout" ConnectionTrackingSpecificationProperty = Value Prelude.Integer
+  set newValue ConnectionTrackingSpecificationProperty {..}
+    = ConnectionTrackingSpecificationProperty
+        {tcpEstablishedTimeout = Prelude.pure newValue, ..}
+instance Property "UdpStreamTimeout" ConnectionTrackingSpecificationProperty where
+  type PropertyType "UdpStreamTimeout" ConnectionTrackingSpecificationProperty = Value Prelude.Integer
+  set newValue ConnectionTrackingSpecificationProperty {..}
+    = ConnectionTrackingSpecificationProperty
+        {udpStreamTimeout = Prelude.pure newValue, ..}
+instance Property "UdpTimeout" ConnectionTrackingSpecificationProperty where
+  type PropertyType "UdpTimeout" ConnectionTrackingSpecificationProperty = Value Prelude.Integer
+  set newValue ConnectionTrackingSpecificationProperty {..}
+    = ConnectionTrackingSpecificationProperty
+        {udpTimeout = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInterface/ConnectionTrackingSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInterface/ConnectionTrackingSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/ConnectionTrackingSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInterface.ConnectionTrackingSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ConnectionTrackingSpecificationProperty :: Prelude.Type
+instance ToResourceProperties ConnectionTrackingSpecificationProperty
+instance Prelude.Eq ConnectionTrackingSpecificationProperty
+instance Prelude.Show ConnectionTrackingSpecificationProperty
+instance JSON.ToJSON ConnectionTrackingSpecificationProperty
diff --git a/gen/Stratosphere/EC2/NetworkInterface/InstanceIpv6AddressProperty.hs b/gen/Stratosphere/EC2/NetworkInterface/InstanceIpv6AddressProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/InstanceIpv6AddressProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.EC2.NetworkInterface.InstanceIpv6AddressProperty (
+        InstanceIpv6AddressProperty(..), mkInstanceIpv6AddressProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceIpv6AddressProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-instanceipv6address.html>
+    InstanceIpv6AddressProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-instanceipv6address.html#cfn-ec2-networkinterface-instanceipv6address-ipv6address>
+                                 ipv6Address :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceIpv6AddressProperty ::
+  Value Prelude.Text -> InstanceIpv6AddressProperty
+mkInstanceIpv6AddressProperty ipv6Address
+  = InstanceIpv6AddressProperty
+      {haddock_workaround_ = (), ipv6Address = ipv6Address}
+instance ToResourceProperties InstanceIpv6AddressProperty where
+  toResourceProperties InstanceIpv6AddressProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterface.InstanceIpv6Address",
+         supportsTags = Prelude.False,
+         properties = ["Ipv6Address" JSON..= ipv6Address]}
+instance JSON.ToJSON InstanceIpv6AddressProperty where
+  toJSON InstanceIpv6AddressProperty {..}
+    = JSON.object ["Ipv6Address" JSON..= ipv6Address]
+instance Property "Ipv6Address" InstanceIpv6AddressProperty where
+  type PropertyType "Ipv6Address" InstanceIpv6AddressProperty = Value Prelude.Text
+  set newValue InstanceIpv6AddressProperty {..}
+    = InstanceIpv6AddressProperty {ipv6Address = newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInterface/InstanceIpv6AddressProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInterface/InstanceIpv6AddressProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/InstanceIpv6AddressProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInterface.InstanceIpv6AddressProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceIpv6AddressProperty :: Prelude.Type
+instance ToResourceProperties InstanceIpv6AddressProperty
+instance Prelude.Eq InstanceIpv6AddressProperty
+instance Prelude.Show InstanceIpv6AddressProperty
+instance JSON.ToJSON InstanceIpv6AddressProperty
diff --git a/gen/Stratosphere/EC2/NetworkInterface/Ipv4PrefixSpecificationProperty.hs b/gen/Stratosphere/EC2/NetworkInterface/Ipv4PrefixSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/Ipv4PrefixSpecificationProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.EC2.NetworkInterface.Ipv4PrefixSpecificationProperty (
+        Ipv4PrefixSpecificationProperty(..),
+        mkIpv4PrefixSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Ipv4PrefixSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-ipv4prefixspecification.html>
+    Ipv4PrefixSpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-ipv4prefixspecification.html#cfn-ec2-networkinterface-ipv4prefixspecification-ipv4prefix>
+                                     ipv4Prefix :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpv4PrefixSpecificationProperty ::
+  Value Prelude.Text -> Ipv4PrefixSpecificationProperty
+mkIpv4PrefixSpecificationProperty ipv4Prefix
+  = Ipv4PrefixSpecificationProperty
+      {haddock_workaround_ = (), ipv4Prefix = ipv4Prefix}
+instance ToResourceProperties Ipv4PrefixSpecificationProperty where
+  toResourceProperties Ipv4PrefixSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterface.Ipv4PrefixSpecification",
+         supportsTags = Prelude.False,
+         properties = ["Ipv4Prefix" JSON..= ipv4Prefix]}
+instance JSON.ToJSON Ipv4PrefixSpecificationProperty where
+  toJSON Ipv4PrefixSpecificationProperty {..}
+    = JSON.object ["Ipv4Prefix" JSON..= ipv4Prefix]
+instance Property "Ipv4Prefix" Ipv4PrefixSpecificationProperty where
+  type PropertyType "Ipv4Prefix" Ipv4PrefixSpecificationProperty = Value Prelude.Text
+  set newValue Ipv4PrefixSpecificationProperty {..}
+    = Ipv4PrefixSpecificationProperty {ipv4Prefix = newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInterface/Ipv4PrefixSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInterface/Ipv4PrefixSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/Ipv4PrefixSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInterface.Ipv4PrefixSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Ipv4PrefixSpecificationProperty :: Prelude.Type
+instance ToResourceProperties Ipv4PrefixSpecificationProperty
+instance Prelude.Eq Ipv4PrefixSpecificationProperty
+instance Prelude.Show Ipv4PrefixSpecificationProperty
+instance JSON.ToJSON Ipv4PrefixSpecificationProperty
diff --git a/gen/Stratosphere/EC2/NetworkInterface/Ipv6PrefixSpecificationProperty.hs b/gen/Stratosphere/EC2/NetworkInterface/Ipv6PrefixSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/Ipv6PrefixSpecificationProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.EC2.NetworkInterface.Ipv6PrefixSpecificationProperty (
+        Ipv6PrefixSpecificationProperty(..),
+        mkIpv6PrefixSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Ipv6PrefixSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-ipv6prefixspecification.html>
+    Ipv6PrefixSpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-ipv6prefixspecification.html#cfn-ec2-networkinterface-ipv6prefixspecification-ipv6prefix>
+                                     ipv6Prefix :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIpv6PrefixSpecificationProperty ::
+  Value Prelude.Text -> Ipv6PrefixSpecificationProperty
+mkIpv6PrefixSpecificationProperty ipv6Prefix
+  = Ipv6PrefixSpecificationProperty
+      {haddock_workaround_ = (), ipv6Prefix = ipv6Prefix}
+instance ToResourceProperties Ipv6PrefixSpecificationProperty where
+  toResourceProperties Ipv6PrefixSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterface.Ipv6PrefixSpecification",
+         supportsTags = Prelude.False,
+         properties = ["Ipv6Prefix" JSON..= ipv6Prefix]}
+instance JSON.ToJSON Ipv6PrefixSpecificationProperty where
+  toJSON Ipv6PrefixSpecificationProperty {..}
+    = JSON.object ["Ipv6Prefix" JSON..= ipv6Prefix]
+instance Property "Ipv6Prefix" Ipv6PrefixSpecificationProperty where
+  type PropertyType "Ipv6Prefix" Ipv6PrefixSpecificationProperty = Value Prelude.Text
+  set newValue Ipv6PrefixSpecificationProperty {..}
+    = Ipv6PrefixSpecificationProperty {ipv6Prefix = newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInterface/Ipv6PrefixSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInterface/Ipv6PrefixSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/Ipv6PrefixSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInterface.Ipv6PrefixSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Ipv6PrefixSpecificationProperty :: Prelude.Type
+instance ToResourceProperties Ipv6PrefixSpecificationProperty
+instance Prelude.Eq Ipv6PrefixSpecificationProperty
+instance Prelude.Show Ipv6PrefixSpecificationProperty
+instance JSON.ToJSON Ipv6PrefixSpecificationProperty
diff --git a/gen/Stratosphere/EC2/NetworkInterface/PrivateIpAddressSpecificationProperty.hs b/gen/Stratosphere/EC2/NetworkInterface/PrivateIpAddressSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/PrivateIpAddressSpecificationProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.NetworkInterface.PrivateIpAddressSpecificationProperty (
+        PrivateIpAddressSpecificationProperty(..),
+        mkPrivateIpAddressSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PrivateIpAddressSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-privateipaddressspecification.html>
+    PrivateIpAddressSpecificationProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-privateipaddressspecification.html#cfn-ec2-networkinterface-privateipaddressspecification-primary>
+                                           primary :: (Value Prelude.Bool),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterface-privateipaddressspecification.html#cfn-ec2-networkinterface-privateipaddressspecification-privateipaddress>
+                                           privateIpAddress :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrivateIpAddressSpecificationProperty ::
+  Value Prelude.Bool
+  -> Value Prelude.Text -> PrivateIpAddressSpecificationProperty
+mkPrivateIpAddressSpecificationProperty primary privateIpAddress
+  = PrivateIpAddressSpecificationProperty
+      {haddock_workaround_ = (), primary = primary,
+       privateIpAddress = privateIpAddress}
+instance ToResourceProperties PrivateIpAddressSpecificationProperty where
+  toResourceProperties PrivateIpAddressSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterface.PrivateIpAddressSpecification",
+         supportsTags = Prelude.False,
+         properties = ["Primary" JSON..= primary,
+                       "PrivateIpAddress" JSON..= privateIpAddress]}
+instance JSON.ToJSON PrivateIpAddressSpecificationProperty where
+  toJSON PrivateIpAddressSpecificationProperty {..}
+    = JSON.object
+        ["Primary" JSON..= primary,
+         "PrivateIpAddress" JSON..= privateIpAddress]
+instance Property "Primary" PrivateIpAddressSpecificationProperty where
+  type PropertyType "Primary" PrivateIpAddressSpecificationProperty = Value Prelude.Bool
+  set newValue PrivateIpAddressSpecificationProperty {..}
+    = PrivateIpAddressSpecificationProperty {primary = newValue, ..}
+instance Property "PrivateIpAddress" PrivateIpAddressSpecificationProperty where
+  type PropertyType "PrivateIpAddress" PrivateIpAddressSpecificationProperty = Value Prelude.Text
+  set newValue PrivateIpAddressSpecificationProperty {..}
+    = PrivateIpAddressSpecificationProperty
+        {privateIpAddress = newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInterface/PrivateIpAddressSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInterface/PrivateIpAddressSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterface/PrivateIpAddressSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInterface.PrivateIpAddressSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PrivateIpAddressSpecificationProperty :: Prelude.Type
+instance ToResourceProperties PrivateIpAddressSpecificationProperty
+instance Prelude.Eq PrivateIpAddressSpecificationProperty
+instance Prelude.Show PrivateIpAddressSpecificationProperty
+instance JSON.ToJSON PrivateIpAddressSpecificationProperty
diff --git a/gen/Stratosphere/EC2/NetworkInterfaceAttachment.hs b/gen/Stratosphere/EC2/NetworkInterfaceAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterfaceAttachment.hs
@@ -0,0 +1,93 @@
+module Stratosphere.EC2.NetworkInterfaceAttachment (
+        module Exports, NetworkInterfaceAttachment(..),
+        mkNetworkInterfaceAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInterfaceAttachment.EnaSrdSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkInterfaceAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfaceattachment.html>
+    NetworkInterfaceAttachment {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfaceattachment.html#cfn-ec2-networkinterfaceattachment-deleteontermination>
+                                deleteOnTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfaceattachment.html#cfn-ec2-networkinterfaceattachment-deviceindex>
+                                deviceIndex :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfaceattachment.html#cfn-ec2-networkinterfaceattachment-enaqueuecount>
+                                enaQueueCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfaceattachment.html#cfn-ec2-networkinterfaceattachment-enasrdspecification>
+                                enaSrdSpecification :: (Prelude.Maybe EnaSrdSpecificationProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfaceattachment.html#cfn-ec2-networkinterfaceattachment-instanceid>
+                                instanceId :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfaceattachment.html#cfn-ec2-networkinterfaceattachment-networkinterfaceid>
+                                networkInterfaceId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterfaceAttachment ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> NetworkInterfaceAttachment
+mkNetworkInterfaceAttachment
+  deviceIndex
+  instanceId
+  networkInterfaceId
+  = NetworkInterfaceAttachment
+      {haddock_workaround_ = (), deviceIndex = deviceIndex,
+       instanceId = instanceId, networkInterfaceId = networkInterfaceId,
+       deleteOnTermination = Prelude.Nothing,
+       enaQueueCount = Prelude.Nothing,
+       enaSrdSpecification = Prelude.Nothing}
+instance ToResourceProperties NetworkInterfaceAttachment where
+  toResourceProperties NetworkInterfaceAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterfaceAttachment",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DeviceIndex" JSON..= deviceIndex,
+                            "InstanceId" JSON..= instanceId,
+                            "NetworkInterfaceId" JSON..= networkInterfaceId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                               (JSON..=) "EnaQueueCount" Prelude.<$> enaQueueCount,
+                               (JSON..=) "EnaSrdSpecification" Prelude.<$> enaSrdSpecification]))}
+instance JSON.ToJSON NetworkInterfaceAttachment where
+  toJSON NetworkInterfaceAttachment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DeviceIndex" JSON..= deviceIndex,
+               "InstanceId" JSON..= instanceId,
+               "NetworkInterfaceId" JSON..= networkInterfaceId]
+              (Prelude.catMaybes
+                 [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                  (JSON..=) "EnaQueueCount" Prelude.<$> enaQueueCount,
+                  (JSON..=) "EnaSrdSpecification" Prelude.<$> enaSrdSpecification])))
+instance Property "DeleteOnTermination" NetworkInterfaceAttachment where
+  type PropertyType "DeleteOnTermination" NetworkInterfaceAttachment = Value Prelude.Bool
+  set newValue NetworkInterfaceAttachment {..}
+    = NetworkInterfaceAttachment
+        {deleteOnTermination = Prelude.pure newValue, ..}
+instance Property "DeviceIndex" NetworkInterfaceAttachment where
+  type PropertyType "DeviceIndex" NetworkInterfaceAttachment = Value Prelude.Text
+  set newValue NetworkInterfaceAttachment {..}
+    = NetworkInterfaceAttachment {deviceIndex = newValue, ..}
+instance Property "EnaQueueCount" NetworkInterfaceAttachment where
+  type PropertyType "EnaQueueCount" NetworkInterfaceAttachment = Value Prelude.Integer
+  set newValue NetworkInterfaceAttachment {..}
+    = NetworkInterfaceAttachment
+        {enaQueueCount = Prelude.pure newValue, ..}
+instance Property "EnaSrdSpecification" NetworkInterfaceAttachment where
+  type PropertyType "EnaSrdSpecification" NetworkInterfaceAttachment = EnaSrdSpecificationProperty
+  set newValue NetworkInterfaceAttachment {..}
+    = NetworkInterfaceAttachment
+        {enaSrdSpecification = Prelude.pure newValue, ..}
+instance Property "InstanceId" NetworkInterfaceAttachment where
+  type PropertyType "InstanceId" NetworkInterfaceAttachment = Value Prelude.Text
+  set newValue NetworkInterfaceAttachment {..}
+    = NetworkInterfaceAttachment {instanceId = newValue, ..}
+instance Property "NetworkInterfaceId" NetworkInterfaceAttachment where
+  type PropertyType "NetworkInterfaceId" NetworkInterfaceAttachment = Value Prelude.Text
+  set newValue NetworkInterfaceAttachment {..}
+    = NetworkInterfaceAttachment {networkInterfaceId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdSpecificationProperty.hs b/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdSpecificationProperty.hs
@@ -0,0 +1,51 @@
+module Stratosphere.EC2.NetworkInterfaceAttachment.EnaSrdSpecificationProperty (
+        module Exports, EnaSrdSpecificationProperty(..),
+        mkEnaSrdSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.NetworkInterfaceAttachment.EnaSrdUdpSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnaSrdSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterfaceattachment-enasrdspecification.html>
+    EnaSrdSpecificationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterfaceattachment-enasrdspecification.html#cfn-ec2-networkinterfaceattachment-enasrdspecification-enasrdenabled>
+                                 enaSrdEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterfaceattachment-enasrdspecification.html#cfn-ec2-networkinterfaceattachment-enasrdspecification-enasrdudpspecification>
+                                 enaSrdUdpSpecification :: (Prelude.Maybe EnaSrdUdpSpecificationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnaSrdSpecificationProperty :: EnaSrdSpecificationProperty
+mkEnaSrdSpecificationProperty
+  = EnaSrdSpecificationProperty
+      {haddock_workaround_ = (), enaSrdEnabled = Prelude.Nothing,
+       enaSrdUdpSpecification = Prelude.Nothing}
+instance ToResourceProperties EnaSrdSpecificationProperty where
+  toResourceProperties EnaSrdSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterfaceAttachment.EnaSrdSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnaSrdEnabled" Prelude.<$> enaSrdEnabled,
+                            (JSON..=) "EnaSrdUdpSpecification"
+                              Prelude.<$> enaSrdUdpSpecification])}
+instance JSON.ToJSON EnaSrdSpecificationProperty where
+  toJSON EnaSrdSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnaSrdEnabled" Prelude.<$> enaSrdEnabled,
+               (JSON..=) "EnaSrdUdpSpecification"
+                 Prelude.<$> enaSrdUdpSpecification]))
+instance Property "EnaSrdEnabled" EnaSrdSpecificationProperty where
+  type PropertyType "EnaSrdEnabled" EnaSrdSpecificationProperty = Value Prelude.Bool
+  set newValue EnaSrdSpecificationProperty {..}
+    = EnaSrdSpecificationProperty
+        {enaSrdEnabled = Prelude.pure newValue, ..}
+instance Property "EnaSrdUdpSpecification" EnaSrdSpecificationProperty where
+  type PropertyType "EnaSrdUdpSpecification" EnaSrdSpecificationProperty = EnaSrdUdpSpecificationProperty
+  set newValue EnaSrdSpecificationProperty {..}
+    = EnaSrdSpecificationProperty
+        {enaSrdUdpSpecification = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInterfaceAttachment.EnaSrdSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnaSrdSpecificationProperty :: Prelude.Type
+instance ToResourceProperties EnaSrdSpecificationProperty
+instance Prelude.Eq EnaSrdSpecificationProperty
+instance Prelude.Show EnaSrdSpecificationProperty
+instance JSON.ToJSON EnaSrdSpecificationProperty
diff --git a/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdUdpSpecificationProperty.hs b/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdUdpSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdUdpSpecificationProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EC2.NetworkInterfaceAttachment.EnaSrdUdpSpecificationProperty (
+        EnaSrdUdpSpecificationProperty(..),
+        mkEnaSrdUdpSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EnaSrdUdpSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterfaceattachment-enasrdudpspecification.html>
+    EnaSrdUdpSpecificationProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-networkinterfaceattachment-enasrdudpspecification.html#cfn-ec2-networkinterfaceattachment-enasrdudpspecification-enasrdudpenabled>
+                                    enaSrdUdpEnabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEnaSrdUdpSpecificationProperty :: EnaSrdUdpSpecificationProperty
+mkEnaSrdUdpSpecificationProperty
+  = EnaSrdUdpSpecificationProperty
+      {haddock_workaround_ = (), enaSrdUdpEnabled = Prelude.Nothing}
+instance ToResourceProperties EnaSrdUdpSpecificationProperty where
+  toResourceProperties EnaSrdUdpSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterfaceAttachment.EnaSrdUdpSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnaSrdUdpEnabled" Prelude.<$> enaSrdUdpEnabled])}
+instance JSON.ToJSON EnaSrdUdpSpecificationProperty where
+  toJSON EnaSrdUdpSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnaSrdUdpEnabled" Prelude.<$> enaSrdUdpEnabled]))
+instance Property "EnaSrdUdpEnabled" EnaSrdUdpSpecificationProperty where
+  type PropertyType "EnaSrdUdpEnabled" EnaSrdUdpSpecificationProperty = Value Prelude.Bool
+  set newValue EnaSrdUdpSpecificationProperty {..}
+    = EnaSrdUdpSpecificationProperty
+        {enaSrdUdpEnabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdUdpSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdUdpSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterfaceAttachment/EnaSrdUdpSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.NetworkInterfaceAttachment.EnaSrdUdpSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EnaSrdUdpSpecificationProperty :: Prelude.Type
+instance ToResourceProperties EnaSrdUdpSpecificationProperty
+instance Prelude.Eq EnaSrdUdpSpecificationProperty
+instance Prelude.Show EnaSrdUdpSpecificationProperty
+instance JSON.ToJSON EnaSrdUdpSpecificationProperty
diff --git a/gen/Stratosphere/EC2/NetworkInterfacePermission.hs b/gen/Stratosphere/EC2/NetworkInterfacePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkInterfacePermission.hs
@@ -0,0 +1,55 @@
+module Stratosphere.EC2.NetworkInterfacePermission (
+        NetworkInterfacePermission(..), mkNetworkInterfacePermission
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkInterfacePermission
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfacepermission.html>
+    NetworkInterfacePermission {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfacepermission.html#cfn-ec2-networkinterfacepermission-awsaccountid>
+                                awsAccountId :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfacepermission.html#cfn-ec2-networkinterfacepermission-networkinterfaceid>
+                                networkInterfaceId :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkinterfacepermission.html#cfn-ec2-networkinterfacepermission-permission>
+                                permission :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterfacePermission ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> NetworkInterfacePermission
+mkNetworkInterfacePermission
+  awsAccountId
+  networkInterfaceId
+  permission
+  = NetworkInterfacePermission
+      {haddock_workaround_ = (), awsAccountId = awsAccountId,
+       networkInterfaceId = networkInterfaceId, permission = permission}
+instance ToResourceProperties NetworkInterfacePermission where
+  toResourceProperties NetworkInterfacePermission {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkInterfacePermission",
+         supportsTags = Prelude.False,
+         properties = ["AwsAccountId" JSON..= awsAccountId,
+                       "NetworkInterfaceId" JSON..= networkInterfaceId,
+                       "Permission" JSON..= permission]}
+instance JSON.ToJSON NetworkInterfacePermission where
+  toJSON NetworkInterfacePermission {..}
+    = JSON.object
+        ["AwsAccountId" JSON..= awsAccountId,
+         "NetworkInterfaceId" JSON..= networkInterfaceId,
+         "Permission" JSON..= permission]
+instance Property "AwsAccountId" NetworkInterfacePermission where
+  type PropertyType "AwsAccountId" NetworkInterfacePermission = Value Prelude.Text
+  set newValue NetworkInterfacePermission {..}
+    = NetworkInterfacePermission {awsAccountId = newValue, ..}
+instance Property "NetworkInterfaceId" NetworkInterfacePermission where
+  type PropertyType "NetworkInterfaceId" NetworkInterfacePermission = Value Prelude.Text
+  set newValue NetworkInterfacePermission {..}
+    = NetworkInterfacePermission {networkInterfaceId = newValue, ..}
+instance Property "Permission" NetworkInterfacePermission where
+  type PropertyType "Permission" NetworkInterfacePermission = Value Prelude.Text
+  set newValue NetworkInterfacePermission {..}
+    = NetworkInterfacePermission {permission = newValue, ..}
diff --git a/gen/Stratosphere/EC2/NetworkPerformanceMetricSubscription.hs b/gen/Stratosphere/EC2/NetworkPerformanceMetricSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/NetworkPerformanceMetricSubscription.hs
@@ -0,0 +1,63 @@
+module Stratosphere.EC2.NetworkPerformanceMetricSubscription (
+        NetworkPerformanceMetricSubscription(..),
+        mkNetworkPerformanceMetricSubscription
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkPerformanceMetricSubscription
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html>
+    NetworkPerformanceMetricSubscription {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html#cfn-ec2-networkperformancemetricsubscription-destination>
+                                          destination :: (Value Prelude.Text),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html#cfn-ec2-networkperformancemetricsubscription-metric>
+                                          metric :: (Value Prelude.Text),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html#cfn-ec2-networkperformancemetricsubscription-source>
+                                          source :: (Value Prelude.Text),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-networkperformancemetricsubscription.html#cfn-ec2-networkperformancemetricsubscription-statistic>
+                                          statistic :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkPerformanceMetricSubscription ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text -> NetworkPerformanceMetricSubscription
+mkNetworkPerformanceMetricSubscription
+  destination
+  metric
+  source
+  statistic
+  = NetworkPerformanceMetricSubscription
+      {haddock_workaround_ = (), destination = destination,
+       metric = metric, source = source, statistic = statistic}
+instance ToResourceProperties NetworkPerformanceMetricSubscription where
+  toResourceProperties NetworkPerformanceMetricSubscription {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::NetworkPerformanceMetricSubscription",
+         supportsTags = Prelude.False,
+         properties = ["Destination" JSON..= destination,
+                       "Metric" JSON..= metric, "Source" JSON..= source,
+                       "Statistic" JSON..= statistic]}
+instance JSON.ToJSON NetworkPerformanceMetricSubscription where
+  toJSON NetworkPerformanceMetricSubscription {..}
+    = JSON.object
+        ["Destination" JSON..= destination, "Metric" JSON..= metric,
+         "Source" JSON..= source, "Statistic" JSON..= statistic]
+instance Property "Destination" NetworkPerformanceMetricSubscription where
+  type PropertyType "Destination" NetworkPerformanceMetricSubscription = Value Prelude.Text
+  set newValue NetworkPerformanceMetricSubscription {..}
+    = NetworkPerformanceMetricSubscription {destination = newValue, ..}
+instance Property "Metric" NetworkPerformanceMetricSubscription where
+  type PropertyType "Metric" NetworkPerformanceMetricSubscription = Value Prelude.Text
+  set newValue NetworkPerformanceMetricSubscription {..}
+    = NetworkPerformanceMetricSubscription {metric = newValue, ..}
+instance Property "Source" NetworkPerformanceMetricSubscription where
+  type PropertyType "Source" NetworkPerformanceMetricSubscription = Value Prelude.Text
+  set newValue NetworkPerformanceMetricSubscription {..}
+    = NetworkPerformanceMetricSubscription {source = newValue, ..}
+instance Property "Statistic" NetworkPerformanceMetricSubscription where
+  type PropertyType "Statistic" NetworkPerformanceMetricSubscription = Value Prelude.Text
+  set newValue NetworkPerformanceMetricSubscription {..}
+    = NetworkPerformanceMetricSubscription {statistic = newValue, ..}
diff --git a/gen/Stratosphere/EC2/PlacementGroup.hs b/gen/Stratosphere/EC2/PlacementGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/PlacementGroup.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EC2.PlacementGroup (
+        PlacementGroup(..), mkPlacementGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data PlacementGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html>
+    PlacementGroup {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html#cfn-ec2-placementgroup-partitioncount>
+                    partitionCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html#cfn-ec2-placementgroup-spreadlevel>
+                    spreadLevel :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html#cfn-ec2-placementgroup-strategy>
+                    strategy :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html#cfn-ec2-placementgroup-tags>
+                    tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPlacementGroup :: PlacementGroup
+mkPlacementGroup
+  = PlacementGroup
+      {haddock_workaround_ = (), partitionCount = Prelude.Nothing,
+       spreadLevel = Prelude.Nothing, strategy = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties PlacementGroup where
+  toResourceProperties PlacementGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::PlacementGroup", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "PartitionCount" Prelude.<$> partitionCount,
+                            (JSON..=) "SpreadLevel" Prelude.<$> spreadLevel,
+                            (JSON..=) "Strategy" Prelude.<$> strategy,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON PlacementGroup where
+  toJSON PlacementGroup {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "PartitionCount" Prelude.<$> partitionCount,
+               (JSON..=) "SpreadLevel" Prelude.<$> spreadLevel,
+               (JSON..=) "Strategy" Prelude.<$> strategy,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "PartitionCount" PlacementGroup where
+  type PropertyType "PartitionCount" PlacementGroup = Value Prelude.Integer
+  set newValue PlacementGroup {..}
+    = PlacementGroup {partitionCount = Prelude.pure newValue, ..}
+instance Property "SpreadLevel" PlacementGroup where
+  type PropertyType "SpreadLevel" PlacementGroup = Value Prelude.Text
+  set newValue PlacementGroup {..}
+    = PlacementGroup {spreadLevel = Prelude.pure newValue, ..}
+instance Property "Strategy" PlacementGroup where
+  type PropertyType "Strategy" PlacementGroup = Value Prelude.Text
+  set newValue PlacementGroup {..}
+    = PlacementGroup {strategy = Prelude.pure newValue, ..}
+instance Property "Tags" PlacementGroup where
+  type PropertyType "Tags" PlacementGroup = [Tag]
+  set newValue PlacementGroup {..}
+    = PlacementGroup {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/PrefixList.hs b/gen/Stratosphere/EC2/PrefixList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/PrefixList.hs
@@ -0,0 +1,74 @@
+module Stratosphere.EC2.PrefixList (
+        module Exports, PrefixList(..), mkPrefixList
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.PrefixList.EntryProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data PrefixList
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-prefixlist.html>
+    PrefixList {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-prefixlist.html#cfn-ec2-prefixlist-addressfamily>
+                addressFamily :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-prefixlist.html#cfn-ec2-prefixlist-entries>
+                entries :: (Prelude.Maybe [EntryProperty]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-prefixlist.html#cfn-ec2-prefixlist-maxentries>
+                maxEntries :: (Prelude.Maybe (Value Prelude.Integer)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-prefixlist.html#cfn-ec2-prefixlist-prefixlistname>
+                prefixListName :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-prefixlist.html#cfn-ec2-prefixlist-tags>
+                tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrefixList ::
+  Value Prelude.Text -> Value Prelude.Text -> PrefixList
+mkPrefixList addressFamily prefixListName
+  = PrefixList
+      {haddock_workaround_ = (), addressFamily = addressFamily,
+       prefixListName = prefixListName, entries = Prelude.Nothing,
+       maxEntries = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties PrefixList where
+  toResourceProperties PrefixList {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::PrefixList", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AddressFamily" JSON..= addressFamily,
+                            "PrefixListName" JSON..= prefixListName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Entries" Prelude.<$> entries,
+                               (JSON..=) "MaxEntries" Prelude.<$> maxEntries,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON PrefixList where
+  toJSON PrefixList {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AddressFamily" JSON..= addressFamily,
+               "PrefixListName" JSON..= prefixListName]
+              (Prelude.catMaybes
+                 [(JSON..=) "Entries" Prelude.<$> entries,
+                  (JSON..=) "MaxEntries" Prelude.<$> maxEntries,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AddressFamily" PrefixList where
+  type PropertyType "AddressFamily" PrefixList = Value Prelude.Text
+  set newValue PrefixList {..}
+    = PrefixList {addressFamily = newValue, ..}
+instance Property "Entries" PrefixList where
+  type PropertyType "Entries" PrefixList = [EntryProperty]
+  set newValue PrefixList {..}
+    = PrefixList {entries = Prelude.pure newValue, ..}
+instance Property "MaxEntries" PrefixList where
+  type PropertyType "MaxEntries" PrefixList = Value Prelude.Integer
+  set newValue PrefixList {..}
+    = PrefixList {maxEntries = Prelude.pure newValue, ..}
+instance Property "PrefixListName" PrefixList where
+  type PropertyType "PrefixListName" PrefixList = Value Prelude.Text
+  set newValue PrefixList {..}
+    = PrefixList {prefixListName = newValue, ..}
+instance Property "Tags" PrefixList where
+  type PropertyType "Tags" PrefixList = [Tag]
+  set newValue PrefixList {..}
+    = PrefixList {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/PrefixList/EntryProperty.hs b/gen/Stratosphere/EC2/PrefixList/EntryProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/PrefixList/EntryProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.PrefixList.EntryProperty (
+        EntryProperty(..), mkEntryProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EntryProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-prefixlist-entry.html>
+    EntryProperty {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-prefixlist-entry.html#cfn-ec2-prefixlist-entry-cidr>
+                   cidr :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-prefixlist-entry.html#cfn-ec2-prefixlist-entry-description>
+                   description :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEntryProperty :: Value Prelude.Text -> EntryProperty
+mkEntryProperty cidr
+  = EntryProperty
+      {haddock_workaround_ = (), cidr = cidr,
+       description = Prelude.Nothing}
+instance ToResourceProperties EntryProperty where
+  toResourceProperties EntryProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::PrefixList.Entry",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Cidr" JSON..= cidr]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description]))}
+instance JSON.ToJSON EntryProperty where
+  toJSON EntryProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Cidr" JSON..= cidr]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description])))
+instance Property "Cidr" EntryProperty where
+  type PropertyType "Cidr" EntryProperty = Value Prelude.Text
+  set newValue EntryProperty {..}
+    = EntryProperty {cidr = newValue, ..}
+instance Property "Description" EntryProperty where
+  type PropertyType "Description" EntryProperty = Value Prelude.Text
+  set newValue EntryProperty {..}
+    = EntryProperty {description = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/PrefixList/EntryProperty.hs-boot b/gen/Stratosphere/EC2/PrefixList/EntryProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/PrefixList/EntryProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.PrefixList.EntryProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EntryProperty :: Prelude.Type
+instance ToResourceProperties EntryProperty
+instance Prelude.Eq EntryProperty
+instance Prelude.Show EntryProperty
+instance JSON.ToJSON EntryProperty
diff --git a/gen/Stratosphere/EC2/Route.hs b/gen/Stratosphere/EC2/Route.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Route.hs
@@ -0,0 +1,168 @@
+module Stratosphere.EC2.Route (
+        Route(..), mkRoute
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Route
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html>
+    Route {haddock_workaround_ :: (),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-carriergatewayid>
+           carrierGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-corenetworkarn>
+           coreNetworkArn :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-destinationcidrblock>
+           destinationCidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-destinationipv6cidrblock>
+           destinationIpv6CidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-destinationprefixlistid>
+           destinationPrefixListId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-egressonlyinternetgatewayid>
+           egressOnlyInternetGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-gatewayid>
+           gatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-instanceid>
+           instanceId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-localgatewayid>
+           localGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-natgatewayid>
+           natGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-networkinterfaceid>
+           networkInterfaceId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-routetableid>
+           routeTableId :: (Value Prelude.Text),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-transitgatewayid>
+           transitGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-vpcendpointid>
+           vpcEndpointId :: (Prelude.Maybe (Value Prelude.Text)),
+           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-route.html#cfn-ec2-route-vpcpeeringconnectionid>
+           vpcPeeringConnectionId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRoute :: Value Prelude.Text -> Route
+mkRoute routeTableId
+  = Route
+      {haddock_workaround_ = (), routeTableId = routeTableId,
+       carrierGatewayId = Prelude.Nothing,
+       coreNetworkArn = Prelude.Nothing,
+       destinationCidrBlock = Prelude.Nothing,
+       destinationIpv6CidrBlock = Prelude.Nothing,
+       destinationPrefixListId = Prelude.Nothing,
+       egressOnlyInternetGatewayId = Prelude.Nothing,
+       gatewayId = Prelude.Nothing, instanceId = Prelude.Nothing,
+       localGatewayId = Prelude.Nothing, natGatewayId = Prelude.Nothing,
+       networkInterfaceId = Prelude.Nothing,
+       transitGatewayId = Prelude.Nothing,
+       vpcEndpointId = Prelude.Nothing,
+       vpcPeeringConnectionId = Prelude.Nothing}
+instance ToResourceProperties Route where
+  toResourceProperties Route {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Route", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RouteTableId" JSON..= routeTableId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CarrierGatewayId" Prelude.<$> carrierGatewayId,
+                               (JSON..=) "CoreNetworkArn" Prelude.<$> coreNetworkArn,
+                               (JSON..=) "DestinationCidrBlock" Prelude.<$> destinationCidrBlock,
+                               (JSON..=) "DestinationIpv6CidrBlock"
+                                 Prelude.<$> destinationIpv6CidrBlock,
+                               (JSON..=) "DestinationPrefixListId"
+                                 Prelude.<$> destinationPrefixListId,
+                               (JSON..=) "EgressOnlyInternetGatewayId"
+                                 Prelude.<$> egressOnlyInternetGatewayId,
+                               (JSON..=) "GatewayId" Prelude.<$> gatewayId,
+                               (JSON..=) "InstanceId" Prelude.<$> instanceId,
+                               (JSON..=) "LocalGatewayId" Prelude.<$> localGatewayId,
+                               (JSON..=) "NatGatewayId" Prelude.<$> natGatewayId,
+                               (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                               (JSON..=) "TransitGatewayId" Prelude.<$> transitGatewayId,
+                               (JSON..=) "VpcEndpointId" Prelude.<$> vpcEndpointId,
+                               (JSON..=) "VpcPeeringConnectionId"
+                                 Prelude.<$> vpcPeeringConnectionId]))}
+instance JSON.ToJSON Route where
+  toJSON Route {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RouteTableId" JSON..= routeTableId]
+              (Prelude.catMaybes
+                 [(JSON..=) "CarrierGatewayId" Prelude.<$> carrierGatewayId,
+                  (JSON..=) "CoreNetworkArn" Prelude.<$> coreNetworkArn,
+                  (JSON..=) "DestinationCidrBlock" Prelude.<$> destinationCidrBlock,
+                  (JSON..=) "DestinationIpv6CidrBlock"
+                    Prelude.<$> destinationIpv6CidrBlock,
+                  (JSON..=) "DestinationPrefixListId"
+                    Prelude.<$> destinationPrefixListId,
+                  (JSON..=) "EgressOnlyInternetGatewayId"
+                    Prelude.<$> egressOnlyInternetGatewayId,
+                  (JSON..=) "GatewayId" Prelude.<$> gatewayId,
+                  (JSON..=) "InstanceId" Prelude.<$> instanceId,
+                  (JSON..=) "LocalGatewayId" Prelude.<$> localGatewayId,
+                  (JSON..=) "NatGatewayId" Prelude.<$> natGatewayId,
+                  (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                  (JSON..=) "TransitGatewayId" Prelude.<$> transitGatewayId,
+                  (JSON..=) "VpcEndpointId" Prelude.<$> vpcEndpointId,
+                  (JSON..=) "VpcPeeringConnectionId"
+                    Prelude.<$> vpcPeeringConnectionId])))
+instance Property "CarrierGatewayId" Route where
+  type PropertyType "CarrierGatewayId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {carrierGatewayId = Prelude.pure newValue, ..}
+instance Property "CoreNetworkArn" Route where
+  type PropertyType "CoreNetworkArn" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {coreNetworkArn = Prelude.pure newValue, ..}
+instance Property "DestinationCidrBlock" Route where
+  type PropertyType "DestinationCidrBlock" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {destinationCidrBlock = Prelude.pure newValue, ..}
+instance Property "DestinationIpv6CidrBlock" Route where
+  type PropertyType "DestinationIpv6CidrBlock" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {destinationIpv6CidrBlock = Prelude.pure newValue, ..}
+instance Property "DestinationPrefixListId" Route where
+  type PropertyType "DestinationPrefixListId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {destinationPrefixListId = Prelude.pure newValue, ..}
+instance Property "EgressOnlyInternetGatewayId" Route where
+  type PropertyType "EgressOnlyInternetGatewayId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {egressOnlyInternetGatewayId = Prelude.pure newValue, ..}
+instance Property "GatewayId" Route where
+  type PropertyType "GatewayId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {gatewayId = Prelude.pure newValue, ..}
+instance Property "InstanceId" Route where
+  type PropertyType "InstanceId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {instanceId = Prelude.pure newValue, ..}
+instance Property "LocalGatewayId" Route where
+  type PropertyType "LocalGatewayId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {localGatewayId = Prelude.pure newValue, ..}
+instance Property "NatGatewayId" Route where
+  type PropertyType "NatGatewayId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {natGatewayId = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceId" Route where
+  type PropertyType "NetworkInterfaceId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {networkInterfaceId = Prelude.pure newValue, ..}
+instance Property "RouteTableId" Route where
+  type PropertyType "RouteTableId" Route = Value Prelude.Text
+  set newValue Route {..} = Route {routeTableId = newValue, ..}
+instance Property "TransitGatewayId" Route where
+  type PropertyType "TransitGatewayId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {transitGatewayId = Prelude.pure newValue, ..}
+instance Property "VpcEndpointId" Route where
+  type PropertyType "VpcEndpointId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {vpcEndpointId = Prelude.pure newValue, ..}
+instance Property "VpcPeeringConnectionId" Route where
+  type PropertyType "VpcPeeringConnectionId" Route = Value Prelude.Text
+  set newValue Route {..}
+    = Route {vpcPeeringConnectionId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/RouteServer.hs b/gen/Stratosphere/EC2/RouteServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/RouteServer.hs
@@ -0,0 +1,77 @@
+module Stratosphere.EC2.RouteServer (
+        RouteServer(..), mkRouteServer
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data RouteServer
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserver.html>
+    RouteServer {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserver.html#cfn-ec2-routeserver-amazonsideasn>
+                 amazonSideAsn :: (Value Prelude.Integer),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserver.html#cfn-ec2-routeserver-persistroutes>
+                 persistRoutes :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserver.html#cfn-ec2-routeserver-persistroutesduration>
+                 persistRoutesDuration :: (Prelude.Maybe (Value Prelude.Integer)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserver.html#cfn-ec2-routeserver-snsnotificationsenabled>
+                 snsNotificationsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserver.html#cfn-ec2-routeserver-tags>
+                 tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRouteServer :: Value Prelude.Integer -> RouteServer
+mkRouteServer amazonSideAsn
+  = RouteServer
+      {haddock_workaround_ = (), amazonSideAsn = amazonSideAsn,
+       persistRoutes = Prelude.Nothing,
+       persistRoutesDuration = Prelude.Nothing,
+       snsNotificationsEnabled = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties RouteServer where
+  toResourceProperties RouteServer {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::RouteServer", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AmazonSideAsn" JSON..= amazonSideAsn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "PersistRoutes" Prelude.<$> persistRoutes,
+                               (JSON..=) "PersistRoutesDuration"
+                                 Prelude.<$> persistRoutesDuration,
+                               (JSON..=) "SnsNotificationsEnabled"
+                                 Prelude.<$> snsNotificationsEnabled,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON RouteServer where
+  toJSON RouteServer {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AmazonSideAsn" JSON..= amazonSideAsn]
+              (Prelude.catMaybes
+                 [(JSON..=) "PersistRoutes" Prelude.<$> persistRoutes,
+                  (JSON..=) "PersistRoutesDuration"
+                    Prelude.<$> persistRoutesDuration,
+                  (JSON..=) "SnsNotificationsEnabled"
+                    Prelude.<$> snsNotificationsEnabled,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AmazonSideAsn" RouteServer where
+  type PropertyType "AmazonSideAsn" RouteServer = Value Prelude.Integer
+  set newValue RouteServer {..}
+    = RouteServer {amazonSideAsn = newValue, ..}
+instance Property "PersistRoutes" RouteServer where
+  type PropertyType "PersistRoutes" RouteServer = Value Prelude.Text
+  set newValue RouteServer {..}
+    = RouteServer {persistRoutes = Prelude.pure newValue, ..}
+instance Property "PersistRoutesDuration" RouteServer where
+  type PropertyType "PersistRoutesDuration" RouteServer = Value Prelude.Integer
+  set newValue RouteServer {..}
+    = RouteServer {persistRoutesDuration = Prelude.pure newValue, ..}
+instance Property "SnsNotificationsEnabled" RouteServer where
+  type PropertyType "SnsNotificationsEnabled" RouteServer = Value Prelude.Bool
+  set newValue RouteServer {..}
+    = RouteServer {snsNotificationsEnabled = Prelude.pure newValue, ..}
+instance Property "Tags" RouteServer where
+  type PropertyType "Tags" RouteServer = [Tag]
+  set newValue RouteServer {..}
+    = RouteServer {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/RouteServerAssociation.hs b/gen/Stratosphere/EC2/RouteServerAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/RouteServerAssociation.hs
@@ -0,0 +1,41 @@
+module Stratosphere.EC2.RouteServerAssociation (
+        RouteServerAssociation(..), mkRouteServerAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RouteServerAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverassociation.html>
+    RouteServerAssociation {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverassociation.html#cfn-ec2-routeserverassociation-routeserverid>
+                            routeServerId :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverassociation.html#cfn-ec2-routeserverassociation-vpcid>
+                            vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRouteServerAssociation ::
+  Value Prelude.Text -> Value Prelude.Text -> RouteServerAssociation
+mkRouteServerAssociation routeServerId vpcId
+  = RouteServerAssociation
+      {haddock_workaround_ = (), routeServerId = routeServerId,
+       vpcId = vpcId}
+instance ToResourceProperties RouteServerAssociation where
+  toResourceProperties RouteServerAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::RouteServerAssociation",
+         supportsTags = Prelude.False,
+         properties = ["RouteServerId" JSON..= routeServerId,
+                       "VpcId" JSON..= vpcId]}
+instance JSON.ToJSON RouteServerAssociation where
+  toJSON RouteServerAssociation {..}
+    = JSON.object
+        ["RouteServerId" JSON..= routeServerId, "VpcId" JSON..= vpcId]
+instance Property "RouteServerId" RouteServerAssociation where
+  type PropertyType "RouteServerId" RouteServerAssociation = Value Prelude.Text
+  set newValue RouteServerAssociation {..}
+    = RouteServerAssociation {routeServerId = newValue, ..}
+instance Property "VpcId" RouteServerAssociation where
+  type PropertyType "VpcId" RouteServerAssociation = Value Prelude.Text
+  set newValue RouteServerAssociation {..}
+    = RouteServerAssociation {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/RouteServerEndpoint.hs b/gen/Stratosphere/EC2/RouteServerEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/RouteServerEndpoint.hs
@@ -0,0 +1,55 @@
+module Stratosphere.EC2.RouteServerEndpoint (
+        RouteServerEndpoint(..), mkRouteServerEndpoint
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data RouteServerEndpoint
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverendpoint.html>
+    RouteServerEndpoint {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverendpoint.html#cfn-ec2-routeserverendpoint-routeserverid>
+                         routeServerId :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverendpoint.html#cfn-ec2-routeserverendpoint-subnetid>
+                         subnetId :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverendpoint.html#cfn-ec2-routeserverendpoint-tags>
+                         tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRouteServerEndpoint ::
+  Value Prelude.Text -> Value Prelude.Text -> RouteServerEndpoint
+mkRouteServerEndpoint routeServerId subnetId
+  = RouteServerEndpoint
+      {haddock_workaround_ = (), routeServerId = routeServerId,
+       subnetId = subnetId, tags = Prelude.Nothing}
+instance ToResourceProperties RouteServerEndpoint where
+  toResourceProperties RouteServerEndpoint {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::RouteServerEndpoint",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RouteServerId" JSON..= routeServerId,
+                            "SubnetId" JSON..= subnetId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON RouteServerEndpoint where
+  toJSON RouteServerEndpoint {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RouteServerId" JSON..= routeServerId,
+               "SubnetId" JSON..= subnetId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "RouteServerId" RouteServerEndpoint where
+  type PropertyType "RouteServerId" RouteServerEndpoint = Value Prelude.Text
+  set newValue RouteServerEndpoint {..}
+    = RouteServerEndpoint {routeServerId = newValue, ..}
+instance Property "SubnetId" RouteServerEndpoint where
+  type PropertyType "SubnetId" RouteServerEndpoint = Value Prelude.Text
+  set newValue RouteServerEndpoint {..}
+    = RouteServerEndpoint {subnetId = newValue, ..}
+instance Property "Tags" RouteServerEndpoint where
+  type PropertyType "Tags" RouteServerEndpoint = [Tag]
+  set newValue RouteServerEndpoint {..}
+    = RouteServerEndpoint {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/RouteServerPeer.hs b/gen/Stratosphere/EC2/RouteServerPeer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/RouteServerPeer.hs
@@ -0,0 +1,67 @@
+module Stratosphere.EC2.RouteServerPeer (
+        module Exports, RouteServerPeer(..), mkRouteServerPeer
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.RouteServerPeer.BgpOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data RouteServerPeer
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverpeer.html>
+    RouteServerPeer {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverpeer.html#cfn-ec2-routeserverpeer-bgpoptions>
+                     bgpOptions :: BgpOptionsProperty,
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverpeer.html#cfn-ec2-routeserverpeer-peeraddress>
+                     peerAddress :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverpeer.html#cfn-ec2-routeserverpeer-routeserverendpointid>
+                     routeServerEndpointId :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverpeer.html#cfn-ec2-routeserverpeer-tags>
+                     tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRouteServerPeer ::
+  BgpOptionsProperty
+  -> Value Prelude.Text -> Value Prelude.Text -> RouteServerPeer
+mkRouteServerPeer bgpOptions peerAddress routeServerEndpointId
+  = RouteServerPeer
+      {haddock_workaround_ = (), bgpOptions = bgpOptions,
+       peerAddress = peerAddress,
+       routeServerEndpointId = routeServerEndpointId,
+       tags = Prelude.Nothing}
+instance ToResourceProperties RouteServerPeer where
+  toResourceProperties RouteServerPeer {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::RouteServerPeer",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["BgpOptions" JSON..= bgpOptions,
+                            "PeerAddress" JSON..= peerAddress,
+                            "RouteServerEndpointId" JSON..= routeServerEndpointId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON RouteServerPeer where
+  toJSON RouteServerPeer {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["BgpOptions" JSON..= bgpOptions,
+               "PeerAddress" JSON..= peerAddress,
+               "RouteServerEndpointId" JSON..= routeServerEndpointId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "BgpOptions" RouteServerPeer where
+  type PropertyType "BgpOptions" RouteServerPeer = BgpOptionsProperty
+  set newValue RouteServerPeer {..}
+    = RouteServerPeer {bgpOptions = newValue, ..}
+instance Property "PeerAddress" RouteServerPeer where
+  type PropertyType "PeerAddress" RouteServerPeer = Value Prelude.Text
+  set newValue RouteServerPeer {..}
+    = RouteServerPeer {peerAddress = newValue, ..}
+instance Property "RouteServerEndpointId" RouteServerPeer where
+  type PropertyType "RouteServerEndpointId" RouteServerPeer = Value Prelude.Text
+  set newValue RouteServerPeer {..}
+    = RouteServerPeer {routeServerEndpointId = newValue, ..}
+instance Property "Tags" RouteServerPeer where
+  type PropertyType "Tags" RouteServerPeer = [Tag]
+  set newValue RouteServerPeer {..}
+    = RouteServerPeer {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/RouteServerPeer/BgpOptionsProperty.hs b/gen/Stratosphere/EC2/RouteServerPeer/BgpOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/RouteServerPeer/BgpOptionsProperty.hs
@@ -0,0 +1,48 @@
+module Stratosphere.EC2.RouteServerPeer.BgpOptionsProperty (
+        BgpOptionsProperty(..), mkBgpOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BgpOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-routeserverpeer-bgpoptions.html>
+    BgpOptionsProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-routeserverpeer-bgpoptions.html#cfn-ec2-routeserverpeer-bgpoptions-peerasn>
+                        peerAsn :: (Prelude.Maybe (Value Prelude.Integer)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-routeserverpeer-bgpoptions.html#cfn-ec2-routeserverpeer-bgpoptions-peerlivenessdetection>
+                        peerLivenessDetection :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBgpOptionsProperty :: BgpOptionsProperty
+mkBgpOptionsProperty
+  = BgpOptionsProperty
+      {haddock_workaround_ = (), peerAsn = Prelude.Nothing,
+       peerLivenessDetection = Prelude.Nothing}
+instance ToResourceProperties BgpOptionsProperty where
+  toResourceProperties BgpOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::RouteServerPeer.BgpOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "PeerAsn" Prelude.<$> peerAsn,
+                            (JSON..=) "PeerLivenessDetection"
+                              Prelude.<$> peerLivenessDetection])}
+instance JSON.ToJSON BgpOptionsProperty where
+  toJSON BgpOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "PeerAsn" Prelude.<$> peerAsn,
+               (JSON..=) "PeerLivenessDetection"
+                 Prelude.<$> peerLivenessDetection]))
+instance Property "PeerAsn" BgpOptionsProperty where
+  type PropertyType "PeerAsn" BgpOptionsProperty = Value Prelude.Integer
+  set newValue BgpOptionsProperty {..}
+    = BgpOptionsProperty {peerAsn = Prelude.pure newValue, ..}
+instance Property "PeerLivenessDetection" BgpOptionsProperty where
+  type PropertyType "PeerLivenessDetection" BgpOptionsProperty = Value Prelude.Text
+  set newValue BgpOptionsProperty {..}
+    = BgpOptionsProperty
+        {peerLivenessDetection = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/RouteServerPeer/BgpOptionsProperty.hs-boot b/gen/Stratosphere/EC2/RouteServerPeer/BgpOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/RouteServerPeer/BgpOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.RouteServerPeer.BgpOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BgpOptionsProperty :: Prelude.Type
+instance ToResourceProperties BgpOptionsProperty
+instance Prelude.Eq BgpOptionsProperty
+instance Prelude.Show BgpOptionsProperty
+instance JSON.ToJSON BgpOptionsProperty
diff --git a/gen/Stratosphere/EC2/RouteServerPropagation.hs b/gen/Stratosphere/EC2/RouteServerPropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/RouteServerPropagation.hs
@@ -0,0 +1,42 @@
+module Stratosphere.EC2.RouteServerPropagation (
+        RouteServerPropagation(..), mkRouteServerPropagation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RouteServerPropagation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverpropagation.html>
+    RouteServerPropagation {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverpropagation.html#cfn-ec2-routeserverpropagation-routeserverid>
+                            routeServerId :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routeserverpropagation.html#cfn-ec2-routeserverpropagation-routetableid>
+                            routeTableId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRouteServerPropagation ::
+  Value Prelude.Text -> Value Prelude.Text -> RouteServerPropagation
+mkRouteServerPropagation routeServerId routeTableId
+  = RouteServerPropagation
+      {haddock_workaround_ = (), routeServerId = routeServerId,
+       routeTableId = routeTableId}
+instance ToResourceProperties RouteServerPropagation where
+  toResourceProperties RouteServerPropagation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::RouteServerPropagation",
+         supportsTags = Prelude.False,
+         properties = ["RouteServerId" JSON..= routeServerId,
+                       "RouteTableId" JSON..= routeTableId]}
+instance JSON.ToJSON RouteServerPropagation where
+  toJSON RouteServerPropagation {..}
+    = JSON.object
+        ["RouteServerId" JSON..= routeServerId,
+         "RouteTableId" JSON..= routeTableId]
+instance Property "RouteServerId" RouteServerPropagation where
+  type PropertyType "RouteServerId" RouteServerPropagation = Value Prelude.Text
+  set newValue RouteServerPropagation {..}
+    = RouteServerPropagation {routeServerId = newValue, ..}
+instance Property "RouteTableId" RouteServerPropagation where
+  type PropertyType "RouteTableId" RouteServerPropagation = Value Prelude.Text
+  set newValue RouteServerPropagation {..}
+    = RouteServerPropagation {routeTableId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/RouteTable.hs b/gen/Stratosphere/EC2/RouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/RouteTable.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EC2.RouteTable (
+        RouteTable(..), mkRouteTable
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data RouteTable
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routetable.html>
+    RouteTable {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routetable.html#cfn-ec2-routetable-tags>
+                tags :: (Prelude.Maybe [Tag]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-routetable.html#cfn-ec2-routetable-vpcid>
+                vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRouteTable :: Value Prelude.Text -> RouteTable
+mkRouteTable vpcId
+  = RouteTable
+      {haddock_workaround_ = (), vpcId = vpcId, tags = Prelude.Nothing}
+instance ToResourceProperties RouteTable where
+  toResourceProperties RouteTable {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::RouteTable", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON RouteTable where
+  toJSON RouteTable {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcId" JSON..= vpcId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Tags" RouteTable where
+  type PropertyType "Tags" RouteTable = [Tag]
+  set newValue RouteTable {..}
+    = RouteTable {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" RouteTable where
+  type PropertyType "VpcId" RouteTable = Value Prelude.Text
+  set newValue RouteTable {..} = RouteTable {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SecurityGroup.hs b/gen/Stratosphere/EC2/SecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SecurityGroup.hs
@@ -0,0 +1,83 @@
+module Stratosphere.EC2.SecurityGroup (
+        module Exports, SecurityGroup(..), mkSecurityGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SecurityGroup.EgressProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SecurityGroup.IngressProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data SecurityGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroup.html>
+    SecurityGroup {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroup.html#cfn-ec2-securitygroup-groupdescription>
+                   groupDescription :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroup.html#cfn-ec2-securitygroup-groupname>
+                   groupName :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroup.html#cfn-ec2-securitygroup-securitygroupegress>
+                   securityGroupEgress :: (Prelude.Maybe [EgressProperty]),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroup.html#cfn-ec2-securitygroup-securitygroupingress>
+                   securityGroupIngress :: (Prelude.Maybe [IngressProperty]),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroup.html#cfn-ec2-securitygroup-tags>
+                   tags :: (Prelude.Maybe [Tag]),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroup.html#cfn-ec2-securitygroup-vpcid>
+                   vpcId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSecurityGroup :: Value Prelude.Text -> SecurityGroup
+mkSecurityGroup groupDescription
+  = SecurityGroup
+      {haddock_workaround_ = (), groupDescription = groupDescription,
+       groupName = Prelude.Nothing, securityGroupEgress = Prelude.Nothing,
+       securityGroupIngress = Prelude.Nothing, tags = Prelude.Nothing,
+       vpcId = Prelude.Nothing}
+instance ToResourceProperties SecurityGroup where
+  toResourceProperties SecurityGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SecurityGroup", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["GroupDescription" JSON..= groupDescription]
+                           (Prelude.catMaybes
+                              [(JSON..=) "GroupName" Prelude.<$> groupName,
+                               (JSON..=) "SecurityGroupEgress" Prelude.<$> securityGroupEgress,
+                               (JSON..=) "SecurityGroupIngress" Prelude.<$> securityGroupIngress,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "VpcId" Prelude.<$> vpcId]))}
+instance JSON.ToJSON SecurityGroup where
+  toJSON SecurityGroup {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["GroupDescription" JSON..= groupDescription]
+              (Prelude.catMaybes
+                 [(JSON..=) "GroupName" Prelude.<$> groupName,
+                  (JSON..=) "SecurityGroupEgress" Prelude.<$> securityGroupEgress,
+                  (JSON..=) "SecurityGroupIngress" Prelude.<$> securityGroupIngress,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "VpcId" Prelude.<$> vpcId])))
+instance Property "GroupDescription" SecurityGroup where
+  type PropertyType "GroupDescription" SecurityGroup = Value Prelude.Text
+  set newValue SecurityGroup {..}
+    = SecurityGroup {groupDescription = newValue, ..}
+instance Property "GroupName" SecurityGroup where
+  type PropertyType "GroupName" SecurityGroup = Value Prelude.Text
+  set newValue SecurityGroup {..}
+    = SecurityGroup {groupName = Prelude.pure newValue, ..}
+instance Property "SecurityGroupEgress" SecurityGroup where
+  type PropertyType "SecurityGroupEgress" SecurityGroup = [EgressProperty]
+  set newValue SecurityGroup {..}
+    = SecurityGroup {securityGroupEgress = Prelude.pure newValue, ..}
+instance Property "SecurityGroupIngress" SecurityGroup where
+  type PropertyType "SecurityGroupIngress" SecurityGroup = [IngressProperty]
+  set newValue SecurityGroup {..}
+    = SecurityGroup {securityGroupIngress = Prelude.pure newValue, ..}
+instance Property "Tags" SecurityGroup where
+  type PropertyType "Tags" SecurityGroup = [Tag]
+  set newValue SecurityGroup {..}
+    = SecurityGroup {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" SecurityGroup where
+  type PropertyType "VpcId" SecurityGroup = Value Prelude.Text
+  set newValue SecurityGroup {..}
+    = SecurityGroup {vpcId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SecurityGroup/EgressProperty.hs b/gen/Stratosphere/EC2/SecurityGroup/EgressProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SecurityGroup/EgressProperty.hs
@@ -0,0 +1,105 @@
+module Stratosphere.EC2.SecurityGroup.EgressProperty (
+        EgressProperty(..), mkEgressProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EgressProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-egress.html>
+    EgressProperty {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-egress.html#cfn-ec2-securitygroup-egress-cidrip>
+                    cidrIp :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-egress.html#cfn-ec2-securitygroup-egress-cidripv6>
+                    cidrIpv6 :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-egress.html#cfn-ec2-securitygroup-egress-description>
+                    description :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-egress.html#cfn-ec2-securitygroup-egress-destinationprefixlistid>
+                    destinationPrefixListId :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-egress.html#cfn-ec2-securitygroup-egress-destinationsecuritygroupid>
+                    destinationSecurityGroupId :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-egress.html#cfn-ec2-securitygroup-egress-fromport>
+                    fromPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-egress.html#cfn-ec2-securitygroup-egress-ipprotocol>
+                    ipProtocol :: (Value Prelude.Text),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-egress.html#cfn-ec2-securitygroup-egress-toport>
+                    toPort :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEgressProperty :: Value Prelude.Text -> EgressProperty
+mkEgressProperty ipProtocol
+  = EgressProperty
+      {haddock_workaround_ = (), ipProtocol = ipProtocol,
+       cidrIp = Prelude.Nothing, cidrIpv6 = Prelude.Nothing,
+       description = Prelude.Nothing,
+       destinationPrefixListId = Prelude.Nothing,
+       destinationSecurityGroupId = Prelude.Nothing,
+       fromPort = Prelude.Nothing, toPort = Prelude.Nothing}
+instance ToResourceProperties EgressProperty where
+  toResourceProperties EgressProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SecurityGroup.Egress",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IpProtocol" JSON..= ipProtocol]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CidrIp" Prelude.<$> cidrIp,
+                               (JSON..=) "CidrIpv6" Prelude.<$> cidrIpv6,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DestinationPrefixListId"
+                                 Prelude.<$> destinationPrefixListId,
+                               (JSON..=) "DestinationSecurityGroupId"
+                                 Prelude.<$> destinationSecurityGroupId,
+                               (JSON..=) "FromPort" Prelude.<$> fromPort,
+                               (JSON..=) "ToPort" Prelude.<$> toPort]))}
+instance JSON.ToJSON EgressProperty where
+  toJSON EgressProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IpProtocol" JSON..= ipProtocol]
+              (Prelude.catMaybes
+                 [(JSON..=) "CidrIp" Prelude.<$> cidrIp,
+                  (JSON..=) "CidrIpv6" Prelude.<$> cidrIpv6,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DestinationPrefixListId"
+                    Prelude.<$> destinationPrefixListId,
+                  (JSON..=) "DestinationSecurityGroupId"
+                    Prelude.<$> destinationSecurityGroupId,
+                  (JSON..=) "FromPort" Prelude.<$> fromPort,
+                  (JSON..=) "ToPort" Prelude.<$> toPort])))
+instance Property "CidrIp" EgressProperty where
+  type PropertyType "CidrIp" EgressProperty = Value Prelude.Text
+  set newValue EgressProperty {..}
+    = EgressProperty {cidrIp = Prelude.pure newValue, ..}
+instance Property "CidrIpv6" EgressProperty where
+  type PropertyType "CidrIpv6" EgressProperty = Value Prelude.Text
+  set newValue EgressProperty {..}
+    = EgressProperty {cidrIpv6 = Prelude.pure newValue, ..}
+instance Property "Description" EgressProperty where
+  type PropertyType "Description" EgressProperty = Value Prelude.Text
+  set newValue EgressProperty {..}
+    = EgressProperty {description = Prelude.pure newValue, ..}
+instance Property "DestinationPrefixListId" EgressProperty where
+  type PropertyType "DestinationPrefixListId" EgressProperty = Value Prelude.Text
+  set newValue EgressProperty {..}
+    = EgressProperty
+        {destinationPrefixListId = Prelude.pure newValue, ..}
+instance Property "DestinationSecurityGroupId" EgressProperty where
+  type PropertyType "DestinationSecurityGroupId" EgressProperty = Value Prelude.Text
+  set newValue EgressProperty {..}
+    = EgressProperty
+        {destinationSecurityGroupId = Prelude.pure newValue, ..}
+instance Property "FromPort" EgressProperty where
+  type PropertyType "FromPort" EgressProperty = Value Prelude.Integer
+  set newValue EgressProperty {..}
+    = EgressProperty {fromPort = Prelude.pure newValue, ..}
+instance Property "IpProtocol" EgressProperty where
+  type PropertyType "IpProtocol" EgressProperty = Value Prelude.Text
+  set newValue EgressProperty {..}
+    = EgressProperty {ipProtocol = newValue, ..}
+instance Property "ToPort" EgressProperty where
+  type PropertyType "ToPort" EgressProperty = Value Prelude.Integer
+  set newValue EgressProperty {..}
+    = EgressProperty {toPort = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SecurityGroup/EgressProperty.hs-boot b/gen/Stratosphere/EC2/SecurityGroup/EgressProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SecurityGroup/EgressProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SecurityGroup.EgressProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EgressProperty :: Prelude.Type
+instance ToResourceProperties EgressProperty
+instance Prelude.Eq EgressProperty
+instance Prelude.Show EgressProperty
+instance JSON.ToJSON EgressProperty
diff --git a/gen/Stratosphere/EC2/SecurityGroup/IngressProperty.hs b/gen/Stratosphere/EC2/SecurityGroup/IngressProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SecurityGroup/IngressProperty.hs
@@ -0,0 +1,126 @@
+module Stratosphere.EC2.SecurityGroup.IngressProperty (
+        IngressProperty(..), mkIngressProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IngressProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html>
+    IngressProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-cidrip>
+                     cidrIp :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-cidripv6>
+                     cidrIpv6 :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-description>
+                     description :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-fromport>
+                     fromPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-ipprotocol>
+                     ipProtocol :: (Value Prelude.Text),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-sourceprefixlistid>
+                     sourcePrefixListId :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-sourcesecuritygroupid>
+                     sourceSecurityGroupId :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-sourcesecuritygroupname>
+                     sourceSecurityGroupName :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-sourcesecuritygroupownerid>
+                     sourceSecurityGroupOwnerId :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-securitygroup-ingress.html#cfn-ec2-securitygroup-ingress-toport>
+                     toPort :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIngressProperty :: Value Prelude.Text -> IngressProperty
+mkIngressProperty ipProtocol
+  = IngressProperty
+      {haddock_workaround_ = (), ipProtocol = ipProtocol,
+       cidrIp = Prelude.Nothing, cidrIpv6 = Prelude.Nothing,
+       description = Prelude.Nothing, fromPort = Prelude.Nothing,
+       sourcePrefixListId = Prelude.Nothing,
+       sourceSecurityGroupId = Prelude.Nothing,
+       sourceSecurityGroupName = Prelude.Nothing,
+       sourceSecurityGroupOwnerId = Prelude.Nothing,
+       toPort = Prelude.Nothing}
+instance ToResourceProperties IngressProperty where
+  toResourceProperties IngressProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SecurityGroup.Ingress",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IpProtocol" JSON..= ipProtocol]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CidrIp" Prelude.<$> cidrIp,
+                               (JSON..=) "CidrIpv6" Prelude.<$> cidrIpv6,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "FromPort" Prelude.<$> fromPort,
+                               (JSON..=) "SourcePrefixListId" Prelude.<$> sourcePrefixListId,
+                               (JSON..=) "SourceSecurityGroupId"
+                                 Prelude.<$> sourceSecurityGroupId,
+                               (JSON..=) "SourceSecurityGroupName"
+                                 Prelude.<$> sourceSecurityGroupName,
+                               (JSON..=) "SourceSecurityGroupOwnerId"
+                                 Prelude.<$> sourceSecurityGroupOwnerId,
+                               (JSON..=) "ToPort" Prelude.<$> toPort]))}
+instance JSON.ToJSON IngressProperty where
+  toJSON IngressProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IpProtocol" JSON..= ipProtocol]
+              (Prelude.catMaybes
+                 [(JSON..=) "CidrIp" Prelude.<$> cidrIp,
+                  (JSON..=) "CidrIpv6" Prelude.<$> cidrIpv6,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "FromPort" Prelude.<$> fromPort,
+                  (JSON..=) "SourcePrefixListId" Prelude.<$> sourcePrefixListId,
+                  (JSON..=) "SourceSecurityGroupId"
+                    Prelude.<$> sourceSecurityGroupId,
+                  (JSON..=) "SourceSecurityGroupName"
+                    Prelude.<$> sourceSecurityGroupName,
+                  (JSON..=) "SourceSecurityGroupOwnerId"
+                    Prelude.<$> sourceSecurityGroupOwnerId,
+                  (JSON..=) "ToPort" Prelude.<$> toPort])))
+instance Property "CidrIp" IngressProperty where
+  type PropertyType "CidrIp" IngressProperty = Value Prelude.Text
+  set newValue IngressProperty {..}
+    = IngressProperty {cidrIp = Prelude.pure newValue, ..}
+instance Property "CidrIpv6" IngressProperty where
+  type PropertyType "CidrIpv6" IngressProperty = Value Prelude.Text
+  set newValue IngressProperty {..}
+    = IngressProperty {cidrIpv6 = Prelude.pure newValue, ..}
+instance Property "Description" IngressProperty where
+  type PropertyType "Description" IngressProperty = Value Prelude.Text
+  set newValue IngressProperty {..}
+    = IngressProperty {description = Prelude.pure newValue, ..}
+instance Property "FromPort" IngressProperty where
+  type PropertyType "FromPort" IngressProperty = Value Prelude.Integer
+  set newValue IngressProperty {..}
+    = IngressProperty {fromPort = Prelude.pure newValue, ..}
+instance Property "IpProtocol" IngressProperty where
+  type PropertyType "IpProtocol" IngressProperty = Value Prelude.Text
+  set newValue IngressProperty {..}
+    = IngressProperty {ipProtocol = newValue, ..}
+instance Property "SourcePrefixListId" IngressProperty where
+  type PropertyType "SourcePrefixListId" IngressProperty = Value Prelude.Text
+  set newValue IngressProperty {..}
+    = IngressProperty {sourcePrefixListId = Prelude.pure newValue, ..}
+instance Property "SourceSecurityGroupId" IngressProperty where
+  type PropertyType "SourceSecurityGroupId" IngressProperty = Value Prelude.Text
+  set newValue IngressProperty {..}
+    = IngressProperty
+        {sourceSecurityGroupId = Prelude.pure newValue, ..}
+instance Property "SourceSecurityGroupName" IngressProperty where
+  type PropertyType "SourceSecurityGroupName" IngressProperty = Value Prelude.Text
+  set newValue IngressProperty {..}
+    = IngressProperty
+        {sourceSecurityGroupName = Prelude.pure newValue, ..}
+instance Property "SourceSecurityGroupOwnerId" IngressProperty where
+  type PropertyType "SourceSecurityGroupOwnerId" IngressProperty = Value Prelude.Text
+  set newValue IngressProperty {..}
+    = IngressProperty
+        {sourceSecurityGroupOwnerId = Prelude.pure newValue, ..}
+instance Property "ToPort" IngressProperty where
+  type PropertyType "ToPort" IngressProperty = Value Prelude.Integer
+  set newValue IngressProperty {..}
+    = IngressProperty {toPort = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SecurityGroup/IngressProperty.hs-boot b/gen/Stratosphere/EC2/SecurityGroup/IngressProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SecurityGroup/IngressProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SecurityGroup.IngressProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IngressProperty :: Prelude.Type
+instance ToResourceProperties IngressProperty
+instance Prelude.Eq IngressProperty
+instance Prelude.Show IngressProperty
+instance JSON.ToJSON IngressProperty
diff --git a/gen/Stratosphere/EC2/SecurityGroupEgress.hs b/gen/Stratosphere/EC2/SecurityGroupEgress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SecurityGroupEgress.hs
@@ -0,0 +1,112 @@
+module Stratosphere.EC2.SecurityGroupEgress (
+        SecurityGroupEgress(..), mkSecurityGroupEgress
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SecurityGroupEgress
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html>
+    SecurityGroupEgress {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html#cfn-ec2-securitygroupegress-cidrip>
+                         cidrIp :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html#cfn-ec2-securitygroupegress-cidripv6>
+                         cidrIpv6 :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html#cfn-ec2-securitygroupegress-description>
+                         description :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html#cfn-ec2-securitygroupegress-destinationprefixlistid>
+                         destinationPrefixListId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html#cfn-ec2-securitygroupegress-destinationsecuritygroupid>
+                         destinationSecurityGroupId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html#cfn-ec2-securitygroupegress-fromport>
+                         fromPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html#cfn-ec2-securitygroupegress-groupid>
+                         groupId :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html#cfn-ec2-securitygroupegress-ipprotocol>
+                         ipProtocol :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupegress.html#cfn-ec2-securitygroupegress-toport>
+                         toPort :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSecurityGroupEgress ::
+  Value Prelude.Text -> Value Prelude.Text -> SecurityGroupEgress
+mkSecurityGroupEgress groupId ipProtocol
+  = SecurityGroupEgress
+      {haddock_workaround_ = (), groupId = groupId,
+       ipProtocol = ipProtocol, cidrIp = Prelude.Nothing,
+       cidrIpv6 = Prelude.Nothing, description = Prelude.Nothing,
+       destinationPrefixListId = Prelude.Nothing,
+       destinationSecurityGroupId = Prelude.Nothing,
+       fromPort = Prelude.Nothing, toPort = Prelude.Nothing}
+instance ToResourceProperties SecurityGroupEgress where
+  toResourceProperties SecurityGroupEgress {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SecurityGroupEgress",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["GroupId" JSON..= groupId, "IpProtocol" JSON..= ipProtocol]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CidrIp" Prelude.<$> cidrIp,
+                               (JSON..=) "CidrIpv6" Prelude.<$> cidrIpv6,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DestinationPrefixListId"
+                                 Prelude.<$> destinationPrefixListId,
+                               (JSON..=) "DestinationSecurityGroupId"
+                                 Prelude.<$> destinationSecurityGroupId,
+                               (JSON..=) "FromPort" Prelude.<$> fromPort,
+                               (JSON..=) "ToPort" Prelude.<$> toPort]))}
+instance JSON.ToJSON SecurityGroupEgress where
+  toJSON SecurityGroupEgress {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["GroupId" JSON..= groupId, "IpProtocol" JSON..= ipProtocol]
+              (Prelude.catMaybes
+                 [(JSON..=) "CidrIp" Prelude.<$> cidrIp,
+                  (JSON..=) "CidrIpv6" Prelude.<$> cidrIpv6,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DestinationPrefixListId"
+                    Prelude.<$> destinationPrefixListId,
+                  (JSON..=) "DestinationSecurityGroupId"
+                    Prelude.<$> destinationSecurityGroupId,
+                  (JSON..=) "FromPort" Prelude.<$> fromPort,
+                  (JSON..=) "ToPort" Prelude.<$> toPort])))
+instance Property "CidrIp" SecurityGroupEgress where
+  type PropertyType "CidrIp" SecurityGroupEgress = Value Prelude.Text
+  set newValue SecurityGroupEgress {..}
+    = SecurityGroupEgress {cidrIp = Prelude.pure newValue, ..}
+instance Property "CidrIpv6" SecurityGroupEgress where
+  type PropertyType "CidrIpv6" SecurityGroupEgress = Value Prelude.Text
+  set newValue SecurityGroupEgress {..}
+    = SecurityGroupEgress {cidrIpv6 = Prelude.pure newValue, ..}
+instance Property "Description" SecurityGroupEgress where
+  type PropertyType "Description" SecurityGroupEgress = Value Prelude.Text
+  set newValue SecurityGroupEgress {..}
+    = SecurityGroupEgress {description = Prelude.pure newValue, ..}
+instance Property "DestinationPrefixListId" SecurityGroupEgress where
+  type PropertyType "DestinationPrefixListId" SecurityGroupEgress = Value Prelude.Text
+  set newValue SecurityGroupEgress {..}
+    = SecurityGroupEgress
+        {destinationPrefixListId = Prelude.pure newValue, ..}
+instance Property "DestinationSecurityGroupId" SecurityGroupEgress where
+  type PropertyType "DestinationSecurityGroupId" SecurityGroupEgress = Value Prelude.Text
+  set newValue SecurityGroupEgress {..}
+    = SecurityGroupEgress
+        {destinationSecurityGroupId = Prelude.pure newValue, ..}
+instance Property "FromPort" SecurityGroupEgress where
+  type PropertyType "FromPort" SecurityGroupEgress = Value Prelude.Integer
+  set newValue SecurityGroupEgress {..}
+    = SecurityGroupEgress {fromPort = Prelude.pure newValue, ..}
+instance Property "GroupId" SecurityGroupEgress where
+  type PropertyType "GroupId" SecurityGroupEgress = Value Prelude.Text
+  set newValue SecurityGroupEgress {..}
+    = SecurityGroupEgress {groupId = newValue, ..}
+instance Property "IpProtocol" SecurityGroupEgress where
+  type PropertyType "IpProtocol" SecurityGroupEgress = Value Prelude.Text
+  set newValue SecurityGroupEgress {..}
+    = SecurityGroupEgress {ipProtocol = newValue, ..}
+instance Property "ToPort" SecurityGroupEgress where
+  type PropertyType "ToPort" SecurityGroupEgress = Value Prelude.Integer
+  set newValue SecurityGroupEgress {..}
+    = SecurityGroupEgress {toPort = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SecurityGroupIngress.hs b/gen/Stratosphere/EC2/SecurityGroupIngress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SecurityGroupIngress.hs
@@ -0,0 +1,145 @@
+module Stratosphere.EC2.SecurityGroupIngress (
+        SecurityGroupIngress(..), mkSecurityGroupIngress
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SecurityGroupIngress
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html>
+    SecurityGroupIngress {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-cidrip>
+                          cidrIp :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-cidripv6>
+                          cidrIpv6 :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-description>
+                          description :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-fromport>
+                          fromPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-groupid>
+                          groupId :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-groupname>
+                          groupName :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-ipprotocol>
+                          ipProtocol :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-sourceprefixlistid>
+                          sourcePrefixListId :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-sourcesecuritygroupid>
+                          sourceSecurityGroupId :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-sourcesecuritygroupname>
+                          sourceSecurityGroupName :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-sourcesecuritygroupownerid>
+                          sourceSecurityGroupOwnerId :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupingress.html#cfn-ec2-securitygroupingress-toport>
+                          toPort :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSecurityGroupIngress ::
+  Value Prelude.Text -> SecurityGroupIngress
+mkSecurityGroupIngress ipProtocol
+  = SecurityGroupIngress
+      {haddock_workaround_ = (), ipProtocol = ipProtocol,
+       cidrIp = Prelude.Nothing, cidrIpv6 = Prelude.Nothing,
+       description = Prelude.Nothing, fromPort = Prelude.Nothing,
+       groupId = Prelude.Nothing, groupName = Prelude.Nothing,
+       sourcePrefixListId = Prelude.Nothing,
+       sourceSecurityGroupId = Prelude.Nothing,
+       sourceSecurityGroupName = Prelude.Nothing,
+       sourceSecurityGroupOwnerId = Prelude.Nothing,
+       toPort = Prelude.Nothing}
+instance ToResourceProperties SecurityGroupIngress where
+  toResourceProperties SecurityGroupIngress {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SecurityGroupIngress",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IpProtocol" JSON..= ipProtocol]
+                           (Prelude.catMaybes
+                              [(JSON..=) "CidrIp" Prelude.<$> cidrIp,
+                               (JSON..=) "CidrIpv6" Prelude.<$> cidrIpv6,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "FromPort" Prelude.<$> fromPort,
+                               (JSON..=) "GroupId" Prelude.<$> groupId,
+                               (JSON..=) "GroupName" Prelude.<$> groupName,
+                               (JSON..=) "SourcePrefixListId" Prelude.<$> sourcePrefixListId,
+                               (JSON..=) "SourceSecurityGroupId"
+                                 Prelude.<$> sourceSecurityGroupId,
+                               (JSON..=) "SourceSecurityGroupName"
+                                 Prelude.<$> sourceSecurityGroupName,
+                               (JSON..=) "SourceSecurityGroupOwnerId"
+                                 Prelude.<$> sourceSecurityGroupOwnerId,
+                               (JSON..=) "ToPort" Prelude.<$> toPort]))}
+instance JSON.ToJSON SecurityGroupIngress where
+  toJSON SecurityGroupIngress {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IpProtocol" JSON..= ipProtocol]
+              (Prelude.catMaybes
+                 [(JSON..=) "CidrIp" Prelude.<$> cidrIp,
+                  (JSON..=) "CidrIpv6" Prelude.<$> cidrIpv6,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "FromPort" Prelude.<$> fromPort,
+                  (JSON..=) "GroupId" Prelude.<$> groupId,
+                  (JSON..=) "GroupName" Prelude.<$> groupName,
+                  (JSON..=) "SourcePrefixListId" Prelude.<$> sourcePrefixListId,
+                  (JSON..=) "SourceSecurityGroupId"
+                    Prelude.<$> sourceSecurityGroupId,
+                  (JSON..=) "SourceSecurityGroupName"
+                    Prelude.<$> sourceSecurityGroupName,
+                  (JSON..=) "SourceSecurityGroupOwnerId"
+                    Prelude.<$> sourceSecurityGroupOwnerId,
+                  (JSON..=) "ToPort" Prelude.<$> toPort])))
+instance Property "CidrIp" SecurityGroupIngress where
+  type PropertyType "CidrIp" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress {cidrIp = Prelude.pure newValue, ..}
+instance Property "CidrIpv6" SecurityGroupIngress where
+  type PropertyType "CidrIpv6" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress {cidrIpv6 = Prelude.pure newValue, ..}
+instance Property "Description" SecurityGroupIngress where
+  type PropertyType "Description" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress {description = Prelude.pure newValue, ..}
+instance Property "FromPort" SecurityGroupIngress where
+  type PropertyType "FromPort" SecurityGroupIngress = Value Prelude.Integer
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress {fromPort = Prelude.pure newValue, ..}
+instance Property "GroupId" SecurityGroupIngress where
+  type PropertyType "GroupId" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress {groupId = Prelude.pure newValue, ..}
+instance Property "GroupName" SecurityGroupIngress where
+  type PropertyType "GroupName" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress {groupName = Prelude.pure newValue, ..}
+instance Property "IpProtocol" SecurityGroupIngress where
+  type PropertyType "IpProtocol" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress {ipProtocol = newValue, ..}
+instance Property "SourcePrefixListId" SecurityGroupIngress where
+  type PropertyType "SourcePrefixListId" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress
+        {sourcePrefixListId = Prelude.pure newValue, ..}
+instance Property "SourceSecurityGroupId" SecurityGroupIngress where
+  type PropertyType "SourceSecurityGroupId" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress
+        {sourceSecurityGroupId = Prelude.pure newValue, ..}
+instance Property "SourceSecurityGroupName" SecurityGroupIngress where
+  type PropertyType "SourceSecurityGroupName" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress
+        {sourceSecurityGroupName = Prelude.pure newValue, ..}
+instance Property "SourceSecurityGroupOwnerId" SecurityGroupIngress where
+  type PropertyType "SourceSecurityGroupOwnerId" SecurityGroupIngress = Value Prelude.Text
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress
+        {sourceSecurityGroupOwnerId = Prelude.pure newValue, ..}
+instance Property "ToPort" SecurityGroupIngress where
+  type PropertyType "ToPort" SecurityGroupIngress = Value Prelude.Integer
+  set newValue SecurityGroupIngress {..}
+    = SecurityGroupIngress {toPort = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SecurityGroupVpcAssociation.hs b/gen/Stratosphere/EC2/SecurityGroupVpcAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SecurityGroupVpcAssociation.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.SecurityGroupVpcAssociation (
+        SecurityGroupVpcAssociation(..), mkSecurityGroupVpcAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SecurityGroupVpcAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupvpcassociation.html>
+    SecurityGroupVpcAssociation {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupvpcassociation.html#cfn-ec2-securitygroupvpcassociation-groupid>
+                                 groupId :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-securitygroupvpcassociation.html#cfn-ec2-securitygroupvpcassociation-vpcid>
+                                 vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSecurityGroupVpcAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> SecurityGroupVpcAssociation
+mkSecurityGroupVpcAssociation groupId vpcId
+  = SecurityGroupVpcAssociation
+      {haddock_workaround_ = (), groupId = groupId, vpcId = vpcId}
+instance ToResourceProperties SecurityGroupVpcAssociation where
+  toResourceProperties SecurityGroupVpcAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SecurityGroupVpcAssociation",
+         supportsTags = Prelude.False,
+         properties = ["GroupId" JSON..= groupId, "VpcId" JSON..= vpcId]}
+instance JSON.ToJSON SecurityGroupVpcAssociation where
+  toJSON SecurityGroupVpcAssociation {..}
+    = JSON.object ["GroupId" JSON..= groupId, "VpcId" JSON..= vpcId]
+instance Property "GroupId" SecurityGroupVpcAssociation where
+  type PropertyType "GroupId" SecurityGroupVpcAssociation = Value Prelude.Text
+  set newValue SecurityGroupVpcAssociation {..}
+    = SecurityGroupVpcAssociation {groupId = newValue, ..}
+instance Property "VpcId" SecurityGroupVpcAssociation where
+  type PropertyType "VpcId" SecurityGroupVpcAssociation = Value Prelude.Text
+  set newValue SecurityGroupVpcAssociation {..}
+    = SecurityGroupVpcAssociation {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SnapshotBlockPublicAccess.hs b/gen/Stratosphere/EC2/SnapshotBlockPublicAccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SnapshotBlockPublicAccess.hs
@@ -0,0 +1,31 @@
+module Stratosphere.EC2.SnapshotBlockPublicAccess (
+        SnapshotBlockPublicAccess(..), mkSnapshotBlockPublicAccess
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SnapshotBlockPublicAccess
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-snapshotblockpublicaccess.html>
+    SnapshotBlockPublicAccess {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-snapshotblockpublicaccess.html#cfn-ec2-snapshotblockpublicaccess-state>
+                               state :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSnapshotBlockPublicAccess ::
+  Value Prelude.Text -> SnapshotBlockPublicAccess
+mkSnapshotBlockPublicAccess state
+  = SnapshotBlockPublicAccess
+      {haddock_workaround_ = (), state = state}
+instance ToResourceProperties SnapshotBlockPublicAccess where
+  toResourceProperties SnapshotBlockPublicAccess {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SnapshotBlockPublicAccess",
+         supportsTags = Prelude.False, properties = ["State" JSON..= state]}
+instance JSON.ToJSON SnapshotBlockPublicAccess where
+  toJSON SnapshotBlockPublicAccess {..}
+    = JSON.object ["State" JSON..= state]
+instance Property "State" SnapshotBlockPublicAccess where
+  type PropertyType "State" SnapshotBlockPublicAccess = Value Prelude.Text
+  set newValue SnapshotBlockPublicAccess {..}
+    = SnapshotBlockPublicAccess {state = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet.hs b/gen/Stratosphere/EC2/SpotFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet.hs
@@ -0,0 +1,33 @@
+module Stratosphere.EC2.SpotFleet (
+        module Exports, SpotFleet(..), mkSpotFleet
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.SpotFleetRequestConfigDataProperty as Exports
+import Stratosphere.ResourceProperties
+data SpotFleet
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-spotfleet.html>
+    SpotFleet {haddock_workaround_ :: (),
+               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-spotfleet.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata>
+               spotFleetRequestConfigData :: SpotFleetRequestConfigDataProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotFleet :: SpotFleetRequestConfigDataProperty -> SpotFleet
+mkSpotFleet spotFleetRequestConfigData
+  = SpotFleet
+      {haddock_workaround_ = (),
+       spotFleetRequestConfigData = spotFleetRequestConfigData}
+instance ToResourceProperties SpotFleet where
+  toResourceProperties SpotFleet {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet", supportsTags = Prelude.False,
+         properties = ["SpotFleetRequestConfigData"
+                         JSON..= spotFleetRequestConfigData]}
+instance JSON.ToJSON SpotFleet where
+  toJSON SpotFleet {..}
+    = JSON.object
+        ["SpotFleetRequestConfigData" JSON..= spotFleetRequestConfigData]
+instance Property "SpotFleetRequestConfigData" SpotFleet where
+  type PropertyType "SpotFleetRequestConfigData" SpotFleet = SpotFleetRequestConfigDataProperty
+  set newValue SpotFleet {..}
+    = SpotFleet {spotFleetRequestConfigData = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/AcceleratorCountRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/AcceleratorCountRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/AcceleratorCountRequestProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.SpotFleet.AcceleratorCountRequestProperty (
+        AcceleratorCountRequestProperty(..),
+        mkAcceleratorCountRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AcceleratorCountRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-acceleratorcountrequest.html>
+    AcceleratorCountRequestProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-acceleratorcountrequest.html#cfn-ec2-spotfleet-acceleratorcountrequest-max>
+                                     max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-acceleratorcountrequest.html#cfn-ec2-spotfleet-acceleratorcountrequest-min>
+                                     min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAcceleratorCountRequestProperty ::
+  AcceleratorCountRequestProperty
+mkAcceleratorCountRequestProperty
+  = AcceleratorCountRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties AcceleratorCountRequestProperty where
+  toResourceProperties AcceleratorCountRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.AcceleratorCountRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON AcceleratorCountRequestProperty where
+  toJSON AcceleratorCountRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" AcceleratorCountRequestProperty where
+  type PropertyType "Max" AcceleratorCountRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorCountRequestProperty {..}
+    = AcceleratorCountRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" AcceleratorCountRequestProperty where
+  type PropertyType "Min" AcceleratorCountRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorCountRequestProperty {..}
+    = AcceleratorCountRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/AcceleratorCountRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/AcceleratorCountRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/AcceleratorCountRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.AcceleratorCountRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AcceleratorCountRequestProperty :: Prelude.Type
+instance ToResourceProperties AcceleratorCountRequestProperty
+instance Prelude.Eq AcceleratorCountRequestProperty
+instance Prelude.Show AcceleratorCountRequestProperty
+instance JSON.ToJSON AcceleratorCountRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/AcceleratorTotalMemoryMiBRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/AcceleratorTotalMemoryMiBRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/AcceleratorTotalMemoryMiBRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.SpotFleet.AcceleratorTotalMemoryMiBRequestProperty (
+        AcceleratorTotalMemoryMiBRequestProperty(..),
+        mkAcceleratorTotalMemoryMiBRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data AcceleratorTotalMemoryMiBRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-acceleratortotalmemorymibrequest.html>
+    AcceleratorTotalMemoryMiBRequestProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-acceleratortotalmemorymibrequest.html#cfn-ec2-spotfleet-acceleratortotalmemorymibrequest-max>
+                                              max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-acceleratortotalmemorymibrequest.html#cfn-ec2-spotfleet-acceleratortotalmemorymibrequest-min>
+                                              min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkAcceleratorTotalMemoryMiBRequestProperty ::
+  AcceleratorTotalMemoryMiBRequestProperty
+mkAcceleratorTotalMemoryMiBRequestProperty
+  = AcceleratorTotalMemoryMiBRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties AcceleratorTotalMemoryMiBRequestProperty where
+  toResourceProperties AcceleratorTotalMemoryMiBRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.AcceleratorTotalMemoryMiBRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON AcceleratorTotalMemoryMiBRequestProperty where
+  toJSON AcceleratorTotalMemoryMiBRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" AcceleratorTotalMemoryMiBRequestProperty where
+  type PropertyType "Max" AcceleratorTotalMemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorTotalMemoryMiBRequestProperty {..}
+    = AcceleratorTotalMemoryMiBRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" AcceleratorTotalMemoryMiBRequestProperty where
+  type PropertyType "Min" AcceleratorTotalMemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue AcceleratorTotalMemoryMiBRequestProperty {..}
+    = AcceleratorTotalMemoryMiBRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/AcceleratorTotalMemoryMiBRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/AcceleratorTotalMemoryMiBRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/AcceleratorTotalMemoryMiBRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.AcceleratorTotalMemoryMiBRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data AcceleratorTotalMemoryMiBRequestProperty :: Prelude.Type
+instance ToResourceProperties AcceleratorTotalMemoryMiBRequestProperty
+instance Prelude.Eq AcceleratorTotalMemoryMiBRequestProperty
+instance Prelude.Show AcceleratorTotalMemoryMiBRequestProperty
+instance JSON.ToJSON AcceleratorTotalMemoryMiBRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/BaselineEbsBandwidthMbpsRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/BaselineEbsBandwidthMbpsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/BaselineEbsBandwidthMbpsRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.SpotFleet.BaselineEbsBandwidthMbpsRequestProperty (
+        BaselineEbsBandwidthMbpsRequestProperty(..),
+        mkBaselineEbsBandwidthMbpsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BaselineEbsBandwidthMbpsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-baselineebsbandwidthmbpsrequest.html>
+    BaselineEbsBandwidthMbpsRequestProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-baselineebsbandwidthmbpsrequest.html#cfn-ec2-spotfleet-baselineebsbandwidthmbpsrequest-max>
+                                             max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-baselineebsbandwidthmbpsrequest.html#cfn-ec2-spotfleet-baselineebsbandwidthmbpsrequest-min>
+                                             min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBaselineEbsBandwidthMbpsRequestProperty ::
+  BaselineEbsBandwidthMbpsRequestProperty
+mkBaselineEbsBandwidthMbpsRequestProperty
+  = BaselineEbsBandwidthMbpsRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties BaselineEbsBandwidthMbpsRequestProperty where
+  toResourceProperties BaselineEbsBandwidthMbpsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.BaselineEbsBandwidthMbpsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON BaselineEbsBandwidthMbpsRequestProperty where
+  toJSON BaselineEbsBandwidthMbpsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" BaselineEbsBandwidthMbpsRequestProperty where
+  type PropertyType "Max" BaselineEbsBandwidthMbpsRequestProperty = Value Prelude.Integer
+  set newValue BaselineEbsBandwidthMbpsRequestProperty {..}
+    = BaselineEbsBandwidthMbpsRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" BaselineEbsBandwidthMbpsRequestProperty where
+  type PropertyType "Min" BaselineEbsBandwidthMbpsRequestProperty = Value Prelude.Integer
+  set newValue BaselineEbsBandwidthMbpsRequestProperty {..}
+    = BaselineEbsBandwidthMbpsRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/BaselineEbsBandwidthMbpsRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/BaselineEbsBandwidthMbpsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/BaselineEbsBandwidthMbpsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.BaselineEbsBandwidthMbpsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BaselineEbsBandwidthMbpsRequestProperty :: Prelude.Type
+instance ToResourceProperties BaselineEbsBandwidthMbpsRequestProperty
+instance Prelude.Eq BaselineEbsBandwidthMbpsRequestProperty
+instance Prelude.Show BaselineEbsBandwidthMbpsRequestProperty
+instance JSON.ToJSON BaselineEbsBandwidthMbpsRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/BaselinePerformanceFactorsRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/BaselinePerformanceFactorsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/BaselinePerformanceFactorsRequestProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.SpotFleet.BaselinePerformanceFactorsRequestProperty (
+        module Exports, BaselinePerformanceFactorsRequestProperty(..),
+        mkBaselinePerformanceFactorsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.CpuPerformanceFactorRequestProperty as Exports
+import Stratosphere.ResourceProperties
+data BaselinePerformanceFactorsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-baselineperformancefactorsrequest.html>
+    BaselinePerformanceFactorsRequestProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-baselineperformancefactorsrequest.html#cfn-ec2-spotfleet-baselineperformancefactorsrequest-cpu>
+                                               cpu :: (Prelude.Maybe CpuPerformanceFactorRequestProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBaselinePerformanceFactorsRequestProperty ::
+  BaselinePerformanceFactorsRequestProperty
+mkBaselinePerformanceFactorsRequestProperty
+  = BaselinePerformanceFactorsRequestProperty
+      {haddock_workaround_ = (), cpu = Prelude.Nothing}
+instance ToResourceProperties BaselinePerformanceFactorsRequestProperty where
+  toResourceProperties BaselinePerformanceFactorsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.BaselinePerformanceFactorsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Cpu" Prelude.<$> cpu])}
+instance JSON.ToJSON BaselinePerformanceFactorsRequestProperty where
+  toJSON BaselinePerformanceFactorsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Cpu" Prelude.<$> cpu]))
+instance Property "Cpu" BaselinePerformanceFactorsRequestProperty where
+  type PropertyType "Cpu" BaselinePerformanceFactorsRequestProperty = CpuPerformanceFactorRequestProperty
+  set newValue BaselinePerformanceFactorsRequestProperty {..}
+    = BaselinePerformanceFactorsRequestProperty
+        {cpu = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/BaselinePerformanceFactorsRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/BaselinePerformanceFactorsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/BaselinePerformanceFactorsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.BaselinePerformanceFactorsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BaselinePerformanceFactorsRequestProperty :: Prelude.Type
+instance ToResourceProperties BaselinePerformanceFactorsRequestProperty
+instance Prelude.Eq BaselinePerformanceFactorsRequestProperty
+instance Prelude.Show BaselinePerformanceFactorsRequestProperty
+instance JSON.ToJSON BaselinePerformanceFactorsRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/BlockDeviceMappingProperty.hs b/gen/Stratosphere/EC2/SpotFleet/BlockDeviceMappingProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/BlockDeviceMappingProperty.hs
@@ -0,0 +1,68 @@
+module Stratosphere.EC2.SpotFleet.BlockDeviceMappingProperty (
+        module Exports, BlockDeviceMappingProperty(..),
+        mkBlockDeviceMappingProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.EbsBlockDeviceProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BlockDeviceMappingProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-blockdevicemapping.html>
+    BlockDeviceMappingProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-blockdevicemapping.html#cfn-ec2-spotfleet-blockdevicemapping-devicename>
+                                deviceName :: (Value Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-blockdevicemapping.html#cfn-ec2-spotfleet-blockdevicemapping-ebs>
+                                ebs :: (Prelude.Maybe EbsBlockDeviceProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-blockdevicemapping.html#cfn-ec2-spotfleet-blockdevicemapping-nodevice>
+                                noDevice :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-blockdevicemapping.html#cfn-ec2-spotfleet-blockdevicemapping-virtualname>
+                                virtualName :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBlockDeviceMappingProperty ::
+  Value Prelude.Text -> BlockDeviceMappingProperty
+mkBlockDeviceMappingProperty deviceName
+  = BlockDeviceMappingProperty
+      {haddock_workaround_ = (), deviceName = deviceName,
+       ebs = Prelude.Nothing, noDevice = Prelude.Nothing,
+       virtualName = Prelude.Nothing}
+instance ToResourceProperties BlockDeviceMappingProperty where
+  toResourceProperties BlockDeviceMappingProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.BlockDeviceMapping",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DeviceName" JSON..= deviceName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Ebs" Prelude.<$> ebs,
+                               (JSON..=) "NoDevice" Prelude.<$> noDevice,
+                               (JSON..=) "VirtualName" Prelude.<$> virtualName]))}
+instance JSON.ToJSON BlockDeviceMappingProperty where
+  toJSON BlockDeviceMappingProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DeviceName" JSON..= deviceName]
+              (Prelude.catMaybes
+                 [(JSON..=) "Ebs" Prelude.<$> ebs,
+                  (JSON..=) "NoDevice" Prelude.<$> noDevice,
+                  (JSON..=) "VirtualName" Prelude.<$> virtualName])))
+instance Property "DeviceName" BlockDeviceMappingProperty where
+  type PropertyType "DeviceName" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {deviceName = newValue, ..}
+instance Property "Ebs" BlockDeviceMappingProperty where
+  type PropertyType "Ebs" BlockDeviceMappingProperty = EbsBlockDeviceProperty
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {ebs = Prelude.pure newValue, ..}
+instance Property "NoDevice" BlockDeviceMappingProperty where
+  type PropertyType "NoDevice" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty {noDevice = Prelude.pure newValue, ..}
+instance Property "VirtualName" BlockDeviceMappingProperty where
+  type PropertyType "VirtualName" BlockDeviceMappingProperty = Value Prelude.Text
+  set newValue BlockDeviceMappingProperty {..}
+    = BlockDeviceMappingProperty
+        {virtualName = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/BlockDeviceMappingProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/BlockDeviceMappingProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/BlockDeviceMappingProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.BlockDeviceMappingProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BlockDeviceMappingProperty :: Prelude.Type
+instance ToResourceProperties BlockDeviceMappingProperty
+instance Prelude.Eq BlockDeviceMappingProperty
+instance Prelude.Show BlockDeviceMappingProperty
+instance JSON.ToJSON BlockDeviceMappingProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancerProperty.hs b/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancerProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancerProperty.hs
@@ -0,0 +1,31 @@
+module Stratosphere.EC2.SpotFleet.ClassicLoadBalancerProperty (
+        ClassicLoadBalancerProperty(..), mkClassicLoadBalancerProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data ClassicLoadBalancerProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-classicloadbalancer.html>
+    ClassicLoadBalancerProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-classicloadbalancer.html#cfn-ec2-spotfleet-classicloadbalancer-name>
+                                 name :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClassicLoadBalancerProperty ::
+  Value Prelude.Text -> ClassicLoadBalancerProperty
+mkClassicLoadBalancerProperty name
+  = ClassicLoadBalancerProperty
+      {haddock_workaround_ = (), name = name}
+instance ToResourceProperties ClassicLoadBalancerProperty where
+  toResourceProperties ClassicLoadBalancerProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.ClassicLoadBalancer",
+         supportsTags = Prelude.False, properties = ["Name" JSON..= name]}
+instance JSON.ToJSON ClassicLoadBalancerProperty where
+  toJSON ClassicLoadBalancerProperty {..}
+    = JSON.object ["Name" JSON..= name]
+instance Property "Name" ClassicLoadBalancerProperty where
+  type PropertyType "Name" ClassicLoadBalancerProperty = Value Prelude.Text
+  set newValue ClassicLoadBalancerProperty {..}
+    = ClassicLoadBalancerProperty {name = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancerProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancerProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancerProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.ClassicLoadBalancerProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ClassicLoadBalancerProperty :: Prelude.Type
+instance ToResourceProperties ClassicLoadBalancerProperty
+instance Prelude.Eq ClassicLoadBalancerProperty
+instance Prelude.Show ClassicLoadBalancerProperty
+instance JSON.ToJSON ClassicLoadBalancerProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancersConfigProperty.hs b/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancersConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancersConfigProperty.hs
@@ -0,0 +1,35 @@
+module Stratosphere.EC2.SpotFleet.ClassicLoadBalancersConfigProperty (
+        module Exports, ClassicLoadBalancersConfigProperty(..),
+        mkClassicLoadBalancersConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.ClassicLoadBalancerProperty as Exports
+import Stratosphere.ResourceProperties
+data ClassicLoadBalancersConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-classicloadbalancersconfig.html>
+    ClassicLoadBalancersConfigProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-classicloadbalancersconfig.html#cfn-ec2-spotfleet-classicloadbalancersconfig-classicloadbalancers>
+                                        classicLoadBalancers :: [ClassicLoadBalancerProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkClassicLoadBalancersConfigProperty ::
+  [ClassicLoadBalancerProperty] -> ClassicLoadBalancersConfigProperty
+mkClassicLoadBalancersConfigProperty classicLoadBalancers
+  = ClassicLoadBalancersConfigProperty
+      {haddock_workaround_ = (),
+       classicLoadBalancers = classicLoadBalancers}
+instance ToResourceProperties ClassicLoadBalancersConfigProperty where
+  toResourceProperties ClassicLoadBalancersConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.ClassicLoadBalancersConfig",
+         supportsTags = Prelude.False,
+         properties = ["ClassicLoadBalancers" JSON..= classicLoadBalancers]}
+instance JSON.ToJSON ClassicLoadBalancersConfigProperty where
+  toJSON ClassicLoadBalancersConfigProperty {..}
+    = JSON.object ["ClassicLoadBalancers" JSON..= classicLoadBalancers]
+instance Property "ClassicLoadBalancers" ClassicLoadBalancersConfigProperty where
+  type PropertyType "ClassicLoadBalancers" ClassicLoadBalancersConfigProperty = [ClassicLoadBalancerProperty]
+  set newValue ClassicLoadBalancersConfigProperty {..}
+    = ClassicLoadBalancersConfigProperty
+        {classicLoadBalancers = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancersConfigProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancersConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/ClassicLoadBalancersConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.ClassicLoadBalancersConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data ClassicLoadBalancersConfigProperty :: Prelude.Type
+instance ToResourceProperties ClassicLoadBalancersConfigProperty
+instance Prelude.Eq ClassicLoadBalancersConfigProperty
+instance Prelude.Show ClassicLoadBalancersConfigProperty
+instance JSON.ToJSON ClassicLoadBalancersConfigProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/CpuPerformanceFactorRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/CpuPerformanceFactorRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/CpuPerformanceFactorRequestProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.SpotFleet.CpuPerformanceFactorRequestProperty (
+        module Exports, CpuPerformanceFactorRequestProperty(..),
+        mkCpuPerformanceFactorRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.PerformanceFactorReferenceRequestProperty as Exports
+import Stratosphere.ResourceProperties
+data CpuPerformanceFactorRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-cpuperformancefactorrequest.html>
+    CpuPerformanceFactorRequestProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-cpuperformancefactorrequest.html#cfn-ec2-spotfleet-cpuperformancefactorrequest-references>
+                                         references :: (Prelude.Maybe [PerformanceFactorReferenceRequestProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCpuPerformanceFactorRequestProperty ::
+  CpuPerformanceFactorRequestProperty
+mkCpuPerformanceFactorRequestProperty
+  = CpuPerformanceFactorRequestProperty
+      {haddock_workaround_ = (), references = Prelude.Nothing}
+instance ToResourceProperties CpuPerformanceFactorRequestProperty where
+  toResourceProperties CpuPerformanceFactorRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.CpuPerformanceFactorRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "References" Prelude.<$> references])}
+instance JSON.ToJSON CpuPerformanceFactorRequestProperty where
+  toJSON CpuPerformanceFactorRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "References" Prelude.<$> references]))
+instance Property "References" CpuPerformanceFactorRequestProperty where
+  type PropertyType "References" CpuPerformanceFactorRequestProperty = [PerformanceFactorReferenceRequestProperty]
+  set newValue CpuPerformanceFactorRequestProperty {..}
+    = CpuPerformanceFactorRequestProperty
+        {references = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/CpuPerformanceFactorRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/CpuPerformanceFactorRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/CpuPerformanceFactorRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.CpuPerformanceFactorRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CpuPerformanceFactorRequestProperty :: Prelude.Type
+instance ToResourceProperties CpuPerformanceFactorRequestProperty
+instance Prelude.Eq CpuPerformanceFactorRequestProperty
+instance Prelude.Show CpuPerformanceFactorRequestProperty
+instance JSON.ToJSON CpuPerformanceFactorRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/EbsBlockDeviceProperty.hs b/gen/Stratosphere/EC2/SpotFleet/EbsBlockDeviceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/EbsBlockDeviceProperty.hs
@@ -0,0 +1,80 @@
+module Stratosphere.EC2.SpotFleet.EbsBlockDeviceProperty (
+        EbsBlockDeviceProperty(..), mkEbsBlockDeviceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data EbsBlockDeviceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-ebsblockdevice.html>
+    EbsBlockDeviceProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-ebsblockdevice.html#cfn-ec2-spotfleet-ebsblockdevice-deleteontermination>
+                            deleteOnTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-ebsblockdevice.html#cfn-ec2-spotfleet-ebsblockdevice-encrypted>
+                            encrypted :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-ebsblockdevice.html#cfn-ec2-spotfleet-ebsblockdevice-iops>
+                            iops :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-ebsblockdevice.html#cfn-ec2-spotfleet-ebsblockdevice-snapshotid>
+                            snapshotId :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-ebsblockdevice.html#cfn-ec2-spotfleet-ebsblockdevice-volumesize>
+                            volumeSize :: (Prelude.Maybe (Value Prelude.Integer)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-ebsblockdevice.html#cfn-ec2-spotfleet-ebsblockdevice-volumetype>
+                            volumeType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkEbsBlockDeviceProperty :: EbsBlockDeviceProperty
+mkEbsBlockDeviceProperty
+  = EbsBlockDeviceProperty
+      {haddock_workaround_ = (), deleteOnTermination = Prelude.Nothing,
+       encrypted = Prelude.Nothing, iops = Prelude.Nothing,
+       snapshotId = Prelude.Nothing, volumeSize = Prelude.Nothing,
+       volumeType = Prelude.Nothing}
+instance ToResourceProperties EbsBlockDeviceProperty where
+  toResourceProperties EbsBlockDeviceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.EbsBlockDevice",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                            (JSON..=) "Encrypted" Prelude.<$> encrypted,
+                            (JSON..=) "Iops" Prelude.<$> iops,
+                            (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+                            (JSON..=) "VolumeSize" Prelude.<$> volumeSize,
+                            (JSON..=) "VolumeType" Prelude.<$> volumeType])}
+instance JSON.ToJSON EbsBlockDeviceProperty where
+  toJSON EbsBlockDeviceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+               (JSON..=) "Encrypted" Prelude.<$> encrypted,
+               (JSON..=) "Iops" Prelude.<$> iops,
+               (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+               (JSON..=) "VolumeSize" Prelude.<$> volumeSize,
+               (JSON..=) "VolumeType" Prelude.<$> volumeType]))
+instance Property "DeleteOnTermination" EbsBlockDeviceProperty where
+  type PropertyType "DeleteOnTermination" EbsBlockDeviceProperty = Value Prelude.Bool
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty
+        {deleteOnTermination = Prelude.pure newValue, ..}
+instance Property "Encrypted" EbsBlockDeviceProperty where
+  type PropertyType "Encrypted" EbsBlockDeviceProperty = Value Prelude.Bool
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {encrypted = Prelude.pure newValue, ..}
+instance Property "Iops" EbsBlockDeviceProperty where
+  type PropertyType "Iops" EbsBlockDeviceProperty = Value Prelude.Integer
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {iops = Prelude.pure newValue, ..}
+instance Property "SnapshotId" EbsBlockDeviceProperty where
+  type PropertyType "SnapshotId" EbsBlockDeviceProperty = Value Prelude.Text
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {snapshotId = Prelude.pure newValue, ..}
+instance Property "VolumeSize" EbsBlockDeviceProperty where
+  type PropertyType "VolumeSize" EbsBlockDeviceProperty = Value Prelude.Integer
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {volumeSize = Prelude.pure newValue, ..}
+instance Property "VolumeType" EbsBlockDeviceProperty where
+  type PropertyType "VolumeType" EbsBlockDeviceProperty = Value Prelude.Text
+  set newValue EbsBlockDeviceProperty {..}
+    = EbsBlockDeviceProperty {volumeType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/EbsBlockDeviceProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/EbsBlockDeviceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/EbsBlockDeviceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.EbsBlockDeviceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data EbsBlockDeviceProperty :: Prelude.Type
+instance ToResourceProperties EbsBlockDeviceProperty
+instance Prelude.Eq EbsBlockDeviceProperty
+instance Prelude.Show EbsBlockDeviceProperty
+instance JSON.ToJSON EbsBlockDeviceProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/FleetLaunchTemplateSpecificationProperty.hs b/gen/Stratosphere/EC2/SpotFleet/FleetLaunchTemplateSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/FleetLaunchTemplateSpecificationProperty.hs
@@ -0,0 +1,60 @@
+module Stratosphere.EC2.SpotFleet.FleetLaunchTemplateSpecificationProperty (
+        FleetLaunchTemplateSpecificationProperty(..),
+        mkFleetLaunchTemplateSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data FleetLaunchTemplateSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-fleetlaunchtemplatespecification.html>
+    FleetLaunchTemplateSpecificationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-fleetlaunchtemplatespecification.html#cfn-ec2-spotfleet-fleetlaunchtemplatespecification-launchtemplateid>
+                                              launchTemplateId :: (Prelude.Maybe (Value Prelude.Text)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-fleetlaunchtemplatespecification.html#cfn-ec2-spotfleet-fleetlaunchtemplatespecification-launchtemplatename>
+                                              launchTemplateName :: (Prelude.Maybe (Value Prelude.Text)),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-fleetlaunchtemplatespecification.html#cfn-ec2-spotfleet-fleetlaunchtemplatespecification-version>
+                                              version :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkFleetLaunchTemplateSpecificationProperty ::
+  Value Prelude.Text -> FleetLaunchTemplateSpecificationProperty
+mkFleetLaunchTemplateSpecificationProperty version
+  = FleetLaunchTemplateSpecificationProperty
+      {haddock_workaround_ = (), version = version,
+       launchTemplateId = Prelude.Nothing,
+       launchTemplateName = Prelude.Nothing}
+instance ToResourceProperties FleetLaunchTemplateSpecificationProperty where
+  toResourceProperties FleetLaunchTemplateSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.FleetLaunchTemplateSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Version" JSON..= version]
+                           (Prelude.catMaybes
+                              [(JSON..=) "LaunchTemplateId" Prelude.<$> launchTemplateId,
+                               (JSON..=) "LaunchTemplateName" Prelude.<$> launchTemplateName]))}
+instance JSON.ToJSON FleetLaunchTemplateSpecificationProperty where
+  toJSON FleetLaunchTemplateSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Version" JSON..= version]
+              (Prelude.catMaybes
+                 [(JSON..=) "LaunchTemplateId" Prelude.<$> launchTemplateId,
+                  (JSON..=) "LaunchTemplateName" Prelude.<$> launchTemplateName])))
+instance Property "LaunchTemplateId" FleetLaunchTemplateSpecificationProperty where
+  type PropertyType "LaunchTemplateId" FleetLaunchTemplateSpecificationProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateSpecificationProperty {..}
+    = FleetLaunchTemplateSpecificationProperty
+        {launchTemplateId = Prelude.pure newValue, ..}
+instance Property "LaunchTemplateName" FleetLaunchTemplateSpecificationProperty where
+  type PropertyType "LaunchTemplateName" FleetLaunchTemplateSpecificationProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateSpecificationProperty {..}
+    = FleetLaunchTemplateSpecificationProperty
+        {launchTemplateName = Prelude.pure newValue, ..}
+instance Property "Version" FleetLaunchTemplateSpecificationProperty where
+  type PropertyType "Version" FleetLaunchTemplateSpecificationProperty = Value Prelude.Text
+  set newValue FleetLaunchTemplateSpecificationProperty {..}
+    = FleetLaunchTemplateSpecificationProperty {version = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/FleetLaunchTemplateSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/FleetLaunchTemplateSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/FleetLaunchTemplateSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.FleetLaunchTemplateSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data FleetLaunchTemplateSpecificationProperty :: Prelude.Type
+instance ToResourceProperties FleetLaunchTemplateSpecificationProperty
+instance Prelude.Eq FleetLaunchTemplateSpecificationProperty
+instance Prelude.Show FleetLaunchTemplateSpecificationProperty
+instance JSON.ToJSON FleetLaunchTemplateSpecificationProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/GroupIdentifierProperty.hs b/gen/Stratosphere/EC2/SpotFleet/GroupIdentifierProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/GroupIdentifierProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.EC2.SpotFleet.GroupIdentifierProperty (
+        GroupIdentifierProperty(..), mkGroupIdentifierProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data GroupIdentifierProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-groupidentifier.html>
+    GroupIdentifierProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-groupidentifier.html#cfn-ec2-spotfleet-groupidentifier-groupid>
+                             groupId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkGroupIdentifierProperty ::
+  Value Prelude.Text -> GroupIdentifierProperty
+mkGroupIdentifierProperty groupId
+  = GroupIdentifierProperty
+      {haddock_workaround_ = (), groupId = groupId}
+instance ToResourceProperties GroupIdentifierProperty where
+  toResourceProperties GroupIdentifierProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.GroupIdentifier",
+         supportsTags = Prelude.False,
+         properties = ["GroupId" JSON..= groupId]}
+instance JSON.ToJSON GroupIdentifierProperty where
+  toJSON GroupIdentifierProperty {..}
+    = JSON.object ["GroupId" JSON..= groupId]
+instance Property "GroupId" GroupIdentifierProperty where
+  type PropertyType "GroupId" GroupIdentifierProperty = Value Prelude.Text
+  set newValue GroupIdentifierProperty {..}
+    = GroupIdentifierProperty {groupId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/GroupIdentifierProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/GroupIdentifierProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/GroupIdentifierProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.GroupIdentifierProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data GroupIdentifierProperty :: Prelude.Type
+instance ToResourceProperties GroupIdentifierProperty
+instance Prelude.Eq GroupIdentifierProperty
+instance Prelude.Show GroupIdentifierProperty
+instance JSON.ToJSON GroupIdentifierProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/IamInstanceProfileSpecificationProperty.hs b/gen/Stratosphere/EC2/SpotFleet/IamInstanceProfileSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/IamInstanceProfileSpecificationProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.SpotFleet.IamInstanceProfileSpecificationProperty (
+        IamInstanceProfileSpecificationProperty(..),
+        mkIamInstanceProfileSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IamInstanceProfileSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-iaminstanceprofilespecification.html>
+    IamInstanceProfileSpecificationProperty {haddock_workaround_ :: (),
+                                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-iaminstanceprofilespecification.html#cfn-ec2-spotfleet-iaminstanceprofilespecification-arn>
+                                             arn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIamInstanceProfileSpecificationProperty ::
+  IamInstanceProfileSpecificationProperty
+mkIamInstanceProfileSpecificationProperty
+  = IamInstanceProfileSpecificationProperty
+      {haddock_workaround_ = (), arn = Prelude.Nothing}
+instance ToResourceProperties IamInstanceProfileSpecificationProperty where
+  toResourceProperties IamInstanceProfileSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.IamInstanceProfileSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Arn" Prelude.<$> arn])}
+instance JSON.ToJSON IamInstanceProfileSpecificationProperty where
+  toJSON IamInstanceProfileSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Arn" Prelude.<$> arn]))
+instance Property "Arn" IamInstanceProfileSpecificationProperty where
+  type PropertyType "Arn" IamInstanceProfileSpecificationProperty = Value Prelude.Text
+  set newValue IamInstanceProfileSpecificationProperty {..}
+    = IamInstanceProfileSpecificationProperty
+        {arn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/IamInstanceProfileSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/IamInstanceProfileSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/IamInstanceProfileSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.IamInstanceProfileSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IamInstanceProfileSpecificationProperty :: Prelude.Type
+instance ToResourceProperties IamInstanceProfileSpecificationProperty
+instance Prelude.Eq IamInstanceProfileSpecificationProperty
+instance Prelude.Show IamInstanceProfileSpecificationProperty
+instance JSON.ToJSON IamInstanceProfileSpecificationProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/InstanceIpv6AddressProperty.hs b/gen/Stratosphere/EC2/SpotFleet/InstanceIpv6AddressProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/InstanceIpv6AddressProperty.hs
@@ -0,0 +1,32 @@
+module Stratosphere.EC2.SpotFleet.InstanceIpv6AddressProperty (
+        InstanceIpv6AddressProperty(..), mkInstanceIpv6AddressProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceIpv6AddressProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instanceipv6address.html>
+    InstanceIpv6AddressProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instanceipv6address.html#cfn-ec2-spotfleet-instanceipv6address-ipv6address>
+                                 ipv6Address :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceIpv6AddressProperty ::
+  Value Prelude.Text -> InstanceIpv6AddressProperty
+mkInstanceIpv6AddressProperty ipv6Address
+  = InstanceIpv6AddressProperty
+      {haddock_workaround_ = (), ipv6Address = ipv6Address}
+instance ToResourceProperties InstanceIpv6AddressProperty where
+  toResourceProperties InstanceIpv6AddressProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.InstanceIpv6Address",
+         supportsTags = Prelude.False,
+         properties = ["Ipv6Address" JSON..= ipv6Address]}
+instance JSON.ToJSON InstanceIpv6AddressProperty where
+  toJSON InstanceIpv6AddressProperty {..}
+    = JSON.object ["Ipv6Address" JSON..= ipv6Address]
+instance Property "Ipv6Address" InstanceIpv6AddressProperty where
+  type PropertyType "Ipv6Address" InstanceIpv6AddressProperty = Value Prelude.Text
+  set newValue InstanceIpv6AddressProperty {..}
+    = InstanceIpv6AddressProperty {ipv6Address = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/InstanceIpv6AddressProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/InstanceIpv6AddressProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/InstanceIpv6AddressProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.InstanceIpv6AddressProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceIpv6AddressProperty :: Prelude.Type
+instance ToResourceProperties InstanceIpv6AddressProperty
+instance Prelude.Eq InstanceIpv6AddressProperty
+instance Prelude.Show InstanceIpv6AddressProperty
+instance JSON.ToJSON InstanceIpv6AddressProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/InstanceNetworkInterfaceSpecificationProperty.hs b/gen/Stratosphere/EC2/SpotFleet/InstanceNetworkInterfaceSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/InstanceNetworkInterfaceSpecificationProperty.hs
@@ -0,0 +1,145 @@
+module Stratosphere.EC2.SpotFleet.InstanceNetworkInterfaceSpecificationProperty (
+        module Exports, InstanceNetworkInterfaceSpecificationProperty(..),
+        mkInstanceNetworkInterfaceSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.InstanceIpv6AddressProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.PrivateIpAddressSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceNetworkInterfaceSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html>
+    InstanceNetworkInterfaceSpecificationProperty {haddock_workaround_ :: (),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-associatepublicipaddress>
+                                                   associatePublicIpAddress :: (Prelude.Maybe (Value Prelude.Bool)),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-deleteontermination>
+                                                   deleteOnTermination :: (Prelude.Maybe (Value Prelude.Bool)),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-description>
+                                                   description :: (Prelude.Maybe (Value Prelude.Text)),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-deviceindex>
+                                                   deviceIndex :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-groups>
+                                                   groups :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-ipv6addresscount>
+                                                   ipv6AddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-ipv6addresses>
+                                                   ipv6Addresses :: (Prelude.Maybe [InstanceIpv6AddressProperty]),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-networkinterfaceid>
+                                                   networkInterfaceId :: (Prelude.Maybe (Value Prelude.Text)),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-privateipaddresses>
+                                                   privateIpAddresses :: (Prelude.Maybe [PrivateIpAddressSpecificationProperty]),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-secondaryprivateipaddresscount>
+                                                   secondaryPrivateIpAddressCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancenetworkinterfacespecification.html#cfn-ec2-spotfleet-instancenetworkinterfacespecification-subnetid>
+                                                   subnetId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceNetworkInterfaceSpecificationProperty ::
+  InstanceNetworkInterfaceSpecificationProperty
+mkInstanceNetworkInterfaceSpecificationProperty
+  = InstanceNetworkInterfaceSpecificationProperty
+      {haddock_workaround_ = (),
+       associatePublicIpAddress = Prelude.Nothing,
+       deleteOnTermination = Prelude.Nothing,
+       description = Prelude.Nothing, deviceIndex = Prelude.Nothing,
+       groups = Prelude.Nothing, ipv6AddressCount = Prelude.Nothing,
+       ipv6Addresses = Prelude.Nothing,
+       networkInterfaceId = Prelude.Nothing,
+       privateIpAddresses = Prelude.Nothing,
+       secondaryPrivateIpAddressCount = Prelude.Nothing,
+       subnetId = Prelude.Nothing}
+instance ToResourceProperties InstanceNetworkInterfaceSpecificationProperty where
+  toResourceProperties
+    InstanceNetworkInterfaceSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.InstanceNetworkInterfaceSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AssociatePublicIpAddress"
+                              Prelude.<$> associatePublicIpAddress,
+                            (JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "DeviceIndex" Prelude.<$> deviceIndex,
+                            (JSON..=) "Groups" Prelude.<$> groups,
+                            (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+                            (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+                            (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                            (JSON..=) "PrivateIpAddresses" Prelude.<$> privateIpAddresses,
+                            (JSON..=) "SecondaryPrivateIpAddressCount"
+                              Prelude.<$> secondaryPrivateIpAddressCount,
+                            (JSON..=) "SubnetId" Prelude.<$> subnetId])}
+instance JSON.ToJSON InstanceNetworkInterfaceSpecificationProperty where
+  toJSON InstanceNetworkInterfaceSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AssociatePublicIpAddress"
+                 Prelude.<$> associatePublicIpAddress,
+               (JSON..=) "DeleteOnTermination" Prelude.<$> deleteOnTermination,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "DeviceIndex" Prelude.<$> deviceIndex,
+               (JSON..=) "Groups" Prelude.<$> groups,
+               (JSON..=) "Ipv6AddressCount" Prelude.<$> ipv6AddressCount,
+               (JSON..=) "Ipv6Addresses" Prelude.<$> ipv6Addresses,
+               (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+               (JSON..=) "PrivateIpAddresses" Prelude.<$> privateIpAddresses,
+               (JSON..=) "SecondaryPrivateIpAddressCount"
+                 Prelude.<$> secondaryPrivateIpAddressCount,
+               (JSON..=) "SubnetId" Prelude.<$> subnetId]))
+instance Property "AssociatePublicIpAddress" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "AssociatePublicIpAddress" InstanceNetworkInterfaceSpecificationProperty = Value Prelude.Bool
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {associatePublicIpAddress = Prelude.pure newValue, ..}
+instance Property "DeleteOnTermination" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "DeleteOnTermination" InstanceNetworkInterfaceSpecificationProperty = Value Prelude.Bool
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {deleteOnTermination = Prelude.pure newValue, ..}
+instance Property "Description" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "Description" InstanceNetworkInterfaceSpecificationProperty = Value Prelude.Text
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {description = Prelude.pure newValue, ..}
+instance Property "DeviceIndex" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "DeviceIndex" InstanceNetworkInterfaceSpecificationProperty = Value Prelude.Integer
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {deviceIndex = Prelude.pure newValue, ..}
+instance Property "Groups" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "Groups" InstanceNetworkInterfaceSpecificationProperty = ValueList Prelude.Text
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {groups = Prelude.pure newValue, ..}
+instance Property "Ipv6AddressCount" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "Ipv6AddressCount" InstanceNetworkInterfaceSpecificationProperty = Value Prelude.Integer
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {ipv6AddressCount = Prelude.pure newValue, ..}
+instance Property "Ipv6Addresses" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "Ipv6Addresses" InstanceNetworkInterfaceSpecificationProperty = [InstanceIpv6AddressProperty]
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {ipv6Addresses = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceId" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "NetworkInterfaceId" InstanceNetworkInterfaceSpecificationProperty = Value Prelude.Text
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {networkInterfaceId = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddresses" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "PrivateIpAddresses" InstanceNetworkInterfaceSpecificationProperty = [PrivateIpAddressSpecificationProperty]
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {privateIpAddresses = Prelude.pure newValue, ..}
+instance Property "SecondaryPrivateIpAddressCount" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "SecondaryPrivateIpAddressCount" InstanceNetworkInterfaceSpecificationProperty = Value Prelude.Integer
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {secondaryPrivateIpAddressCount = Prelude.pure newValue, ..}
+instance Property "SubnetId" InstanceNetworkInterfaceSpecificationProperty where
+  type PropertyType "SubnetId" InstanceNetworkInterfaceSpecificationProperty = Value Prelude.Text
+  set newValue InstanceNetworkInterfaceSpecificationProperty {..}
+    = InstanceNetworkInterfaceSpecificationProperty
+        {subnetId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/InstanceNetworkInterfaceSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/InstanceNetworkInterfaceSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/InstanceNetworkInterfaceSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.InstanceNetworkInterfaceSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceNetworkInterfaceSpecificationProperty :: Prelude.Type
+instance ToResourceProperties InstanceNetworkInterfaceSpecificationProperty
+instance Prelude.Eq InstanceNetworkInterfaceSpecificationProperty
+instance Prelude.Show InstanceNetworkInterfaceSpecificationProperty
+instance JSON.ToJSON InstanceNetworkInterfaceSpecificationProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/InstanceRequirementsRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/InstanceRequirementsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/InstanceRequirementsRequestProperty.hs
@@ -0,0 +1,310 @@
+module Stratosphere.EC2.SpotFleet.InstanceRequirementsRequestProperty (
+        module Exports, InstanceRequirementsRequestProperty(..),
+        mkInstanceRequirementsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.AcceleratorCountRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.AcceleratorTotalMemoryMiBRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.BaselineEbsBandwidthMbpsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.BaselinePerformanceFactorsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.MemoryGiBPerVCpuRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.MemoryMiBRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.NetworkBandwidthGbpsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.NetworkInterfaceCountRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.TotalLocalStorageGBRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.VCpuCountRangeRequestProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data InstanceRequirementsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html>
+    InstanceRequirementsRequestProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-acceleratorcount>
+                                         acceleratorCount :: (Prelude.Maybe AcceleratorCountRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-acceleratormanufacturers>
+                                         acceleratorManufacturers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-acceleratornames>
+                                         acceleratorNames :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-acceleratortotalmemorymib>
+                                         acceleratorTotalMemoryMiB :: (Prelude.Maybe AcceleratorTotalMemoryMiBRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-acceleratortypes>
+                                         acceleratorTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-allowedinstancetypes>
+                                         allowedInstanceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-baremetal>
+                                         bareMetal :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-baselineebsbandwidthmbps>
+                                         baselineEbsBandwidthMbps :: (Prelude.Maybe BaselineEbsBandwidthMbpsRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-baselineperformancefactors>
+                                         baselinePerformanceFactors :: (Prelude.Maybe BaselinePerformanceFactorsRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-burstableperformance>
+                                         burstablePerformance :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-cpumanufacturers>
+                                         cpuManufacturers :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-excludedinstancetypes>
+                                         excludedInstanceTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-instancegenerations>
+                                         instanceGenerations :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-localstorage>
+                                         localStorage :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-localstoragetypes>
+                                         localStorageTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-maxspotpriceaspercentageofoptimalondemandprice>
+                                         maxSpotPriceAsPercentageOfOptimalOnDemandPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-memorygibpervcpu>
+                                         memoryGiBPerVCpu :: (Prelude.Maybe MemoryGiBPerVCpuRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-memorymib>
+                                         memoryMiB :: (Prelude.Maybe MemoryMiBRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-networkbandwidthgbps>
+                                         networkBandwidthGbps :: (Prelude.Maybe NetworkBandwidthGbpsRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-networkinterfacecount>
+                                         networkInterfaceCount :: (Prelude.Maybe NetworkInterfaceCountRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-ondemandmaxpricepercentageoverlowestprice>
+                                         onDemandMaxPricePercentageOverLowestPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-requirehibernatesupport>
+                                         requireHibernateSupport :: (Prelude.Maybe (Value Prelude.Bool)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-spotmaxpricepercentageoverlowestprice>
+                                         spotMaxPricePercentageOverLowestPrice :: (Prelude.Maybe (Value Prelude.Integer)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-totallocalstoragegb>
+                                         totalLocalStorageGB :: (Prelude.Maybe TotalLocalStorageGBRequestProperty),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-instancerequirementsrequest.html#cfn-ec2-spotfleet-instancerequirementsrequest-vcpucount>
+                                         vCpuCount :: (Prelude.Maybe VCpuCountRangeRequestProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkInstanceRequirementsRequestProperty ::
+  InstanceRequirementsRequestProperty
+mkInstanceRequirementsRequestProperty
+  = InstanceRequirementsRequestProperty
+      {haddock_workaround_ = (), acceleratorCount = Prelude.Nothing,
+       acceleratorManufacturers = Prelude.Nothing,
+       acceleratorNames = Prelude.Nothing,
+       acceleratorTotalMemoryMiB = Prelude.Nothing,
+       acceleratorTypes = Prelude.Nothing,
+       allowedInstanceTypes = Prelude.Nothing,
+       bareMetal = Prelude.Nothing,
+       baselineEbsBandwidthMbps = Prelude.Nothing,
+       baselinePerformanceFactors = Prelude.Nothing,
+       burstablePerformance = Prelude.Nothing,
+       cpuManufacturers = Prelude.Nothing,
+       excludedInstanceTypes = Prelude.Nothing,
+       instanceGenerations = Prelude.Nothing,
+       localStorage = Prelude.Nothing,
+       localStorageTypes = Prelude.Nothing,
+       maxSpotPriceAsPercentageOfOptimalOnDemandPrice = Prelude.Nothing,
+       memoryGiBPerVCpu = Prelude.Nothing, memoryMiB = Prelude.Nothing,
+       networkBandwidthGbps = Prelude.Nothing,
+       networkInterfaceCount = Prelude.Nothing,
+       onDemandMaxPricePercentageOverLowestPrice = Prelude.Nothing,
+       requireHibernateSupport = Prelude.Nothing,
+       spotMaxPricePercentageOverLowestPrice = Prelude.Nothing,
+       totalLocalStorageGB = Prelude.Nothing, vCpuCount = Prelude.Nothing}
+instance ToResourceProperties InstanceRequirementsRequestProperty where
+  toResourceProperties InstanceRequirementsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.InstanceRequirementsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AcceleratorCount" Prelude.<$> acceleratorCount,
+                            (JSON..=) "AcceleratorManufacturers"
+                              Prelude.<$> acceleratorManufacturers,
+                            (JSON..=) "AcceleratorNames" Prelude.<$> acceleratorNames,
+                            (JSON..=) "AcceleratorTotalMemoryMiB"
+                              Prelude.<$> acceleratorTotalMemoryMiB,
+                            (JSON..=) "AcceleratorTypes" Prelude.<$> acceleratorTypes,
+                            (JSON..=) "AllowedInstanceTypes" Prelude.<$> allowedInstanceTypes,
+                            (JSON..=) "BareMetal" Prelude.<$> bareMetal,
+                            (JSON..=) "BaselineEbsBandwidthMbps"
+                              Prelude.<$> baselineEbsBandwidthMbps,
+                            (JSON..=) "BaselinePerformanceFactors"
+                              Prelude.<$> baselinePerformanceFactors,
+                            (JSON..=) "BurstablePerformance" Prelude.<$> burstablePerformance,
+                            (JSON..=) "CpuManufacturers" Prelude.<$> cpuManufacturers,
+                            (JSON..=) "ExcludedInstanceTypes"
+                              Prelude.<$> excludedInstanceTypes,
+                            (JSON..=) "InstanceGenerations" Prelude.<$> instanceGenerations,
+                            (JSON..=) "LocalStorage" Prelude.<$> localStorage,
+                            (JSON..=) "LocalStorageTypes" Prelude.<$> localStorageTypes,
+                            (JSON..=) "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice"
+                              Prelude.<$> maxSpotPriceAsPercentageOfOptimalOnDemandPrice,
+                            (JSON..=) "MemoryGiBPerVCpu" Prelude.<$> memoryGiBPerVCpu,
+                            (JSON..=) "MemoryMiB" Prelude.<$> memoryMiB,
+                            (JSON..=) "NetworkBandwidthGbps" Prelude.<$> networkBandwidthGbps,
+                            (JSON..=) "NetworkInterfaceCount"
+                              Prelude.<$> networkInterfaceCount,
+                            (JSON..=) "OnDemandMaxPricePercentageOverLowestPrice"
+                              Prelude.<$> onDemandMaxPricePercentageOverLowestPrice,
+                            (JSON..=) "RequireHibernateSupport"
+                              Prelude.<$> requireHibernateSupport,
+                            (JSON..=) "SpotMaxPricePercentageOverLowestPrice"
+                              Prelude.<$> spotMaxPricePercentageOverLowestPrice,
+                            (JSON..=) "TotalLocalStorageGB" Prelude.<$> totalLocalStorageGB,
+                            (JSON..=) "VCpuCount" Prelude.<$> vCpuCount])}
+instance JSON.ToJSON InstanceRequirementsRequestProperty where
+  toJSON InstanceRequirementsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AcceleratorCount" Prelude.<$> acceleratorCount,
+               (JSON..=) "AcceleratorManufacturers"
+                 Prelude.<$> acceleratorManufacturers,
+               (JSON..=) "AcceleratorNames" Prelude.<$> acceleratorNames,
+               (JSON..=) "AcceleratorTotalMemoryMiB"
+                 Prelude.<$> acceleratorTotalMemoryMiB,
+               (JSON..=) "AcceleratorTypes" Prelude.<$> acceleratorTypes,
+               (JSON..=) "AllowedInstanceTypes" Prelude.<$> allowedInstanceTypes,
+               (JSON..=) "BareMetal" Prelude.<$> bareMetal,
+               (JSON..=) "BaselineEbsBandwidthMbps"
+                 Prelude.<$> baselineEbsBandwidthMbps,
+               (JSON..=) "BaselinePerformanceFactors"
+                 Prelude.<$> baselinePerformanceFactors,
+               (JSON..=) "BurstablePerformance" Prelude.<$> burstablePerformance,
+               (JSON..=) "CpuManufacturers" Prelude.<$> cpuManufacturers,
+               (JSON..=) "ExcludedInstanceTypes"
+                 Prelude.<$> excludedInstanceTypes,
+               (JSON..=) "InstanceGenerations" Prelude.<$> instanceGenerations,
+               (JSON..=) "LocalStorage" Prelude.<$> localStorage,
+               (JSON..=) "LocalStorageTypes" Prelude.<$> localStorageTypes,
+               (JSON..=) "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice"
+                 Prelude.<$> maxSpotPriceAsPercentageOfOptimalOnDemandPrice,
+               (JSON..=) "MemoryGiBPerVCpu" Prelude.<$> memoryGiBPerVCpu,
+               (JSON..=) "MemoryMiB" Prelude.<$> memoryMiB,
+               (JSON..=) "NetworkBandwidthGbps" Prelude.<$> networkBandwidthGbps,
+               (JSON..=) "NetworkInterfaceCount"
+                 Prelude.<$> networkInterfaceCount,
+               (JSON..=) "OnDemandMaxPricePercentageOverLowestPrice"
+                 Prelude.<$> onDemandMaxPricePercentageOverLowestPrice,
+               (JSON..=) "RequireHibernateSupport"
+                 Prelude.<$> requireHibernateSupport,
+               (JSON..=) "SpotMaxPricePercentageOverLowestPrice"
+                 Prelude.<$> spotMaxPricePercentageOverLowestPrice,
+               (JSON..=) "TotalLocalStorageGB" Prelude.<$> totalLocalStorageGB,
+               (JSON..=) "VCpuCount" Prelude.<$> vCpuCount]))
+instance Property "AcceleratorCount" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorCount" InstanceRequirementsRequestProperty = AcceleratorCountRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorCount = Prelude.pure newValue, ..}
+instance Property "AcceleratorManufacturers" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorManufacturers" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorManufacturers = Prelude.pure newValue, ..}
+instance Property "AcceleratorNames" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorNames" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorNames = Prelude.pure newValue, ..}
+instance Property "AcceleratorTotalMemoryMiB" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorTotalMemoryMiB" InstanceRequirementsRequestProperty = AcceleratorTotalMemoryMiBRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorTotalMemoryMiB = Prelude.pure newValue, ..}
+instance Property "AcceleratorTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "AcceleratorTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {acceleratorTypes = Prelude.pure newValue, ..}
+instance Property "AllowedInstanceTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "AllowedInstanceTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {allowedInstanceTypes = Prelude.pure newValue, ..}
+instance Property "BareMetal" InstanceRequirementsRequestProperty where
+  type PropertyType "BareMetal" InstanceRequirementsRequestProperty = Value Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {bareMetal = Prelude.pure newValue, ..}
+instance Property "BaselineEbsBandwidthMbps" InstanceRequirementsRequestProperty where
+  type PropertyType "BaselineEbsBandwidthMbps" InstanceRequirementsRequestProperty = BaselineEbsBandwidthMbpsRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {baselineEbsBandwidthMbps = Prelude.pure newValue, ..}
+instance Property "BaselinePerformanceFactors" InstanceRequirementsRequestProperty where
+  type PropertyType "BaselinePerformanceFactors" InstanceRequirementsRequestProperty = BaselinePerformanceFactorsRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {baselinePerformanceFactors = Prelude.pure newValue, ..}
+instance Property "BurstablePerformance" InstanceRequirementsRequestProperty where
+  type PropertyType "BurstablePerformance" InstanceRequirementsRequestProperty = Value Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {burstablePerformance = Prelude.pure newValue, ..}
+instance Property "CpuManufacturers" InstanceRequirementsRequestProperty where
+  type PropertyType "CpuManufacturers" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {cpuManufacturers = Prelude.pure newValue, ..}
+instance Property "ExcludedInstanceTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "ExcludedInstanceTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {excludedInstanceTypes = Prelude.pure newValue, ..}
+instance Property "InstanceGenerations" InstanceRequirementsRequestProperty where
+  type PropertyType "InstanceGenerations" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {instanceGenerations = Prelude.pure newValue, ..}
+instance Property "LocalStorage" InstanceRequirementsRequestProperty where
+  type PropertyType "LocalStorage" InstanceRequirementsRequestProperty = Value Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {localStorage = Prelude.pure newValue, ..}
+instance Property "LocalStorageTypes" InstanceRequirementsRequestProperty where
+  type PropertyType "LocalStorageTypes" InstanceRequirementsRequestProperty = ValueList Prelude.Text
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {localStorageTypes = Prelude.pure newValue, ..}
+instance Property "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" InstanceRequirementsRequestProperty where
+  type PropertyType "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" InstanceRequirementsRequestProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {maxSpotPriceAsPercentageOfOptimalOnDemandPrice = Prelude.pure
+                                                            newValue,
+         ..}
+instance Property "MemoryGiBPerVCpu" InstanceRequirementsRequestProperty where
+  type PropertyType "MemoryGiBPerVCpu" InstanceRequirementsRequestProperty = MemoryGiBPerVCpuRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {memoryGiBPerVCpu = Prelude.pure newValue, ..}
+instance Property "MemoryMiB" InstanceRequirementsRequestProperty where
+  type PropertyType "MemoryMiB" InstanceRequirementsRequestProperty = MemoryMiBRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {memoryMiB = Prelude.pure newValue, ..}
+instance Property "NetworkBandwidthGbps" InstanceRequirementsRequestProperty where
+  type PropertyType "NetworkBandwidthGbps" InstanceRequirementsRequestProperty = NetworkBandwidthGbpsRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {networkBandwidthGbps = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceCount" InstanceRequirementsRequestProperty where
+  type PropertyType "NetworkInterfaceCount" InstanceRequirementsRequestProperty = NetworkInterfaceCountRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {networkInterfaceCount = Prelude.pure newValue, ..}
+instance Property "OnDemandMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty where
+  type PropertyType "OnDemandMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {onDemandMaxPricePercentageOverLowestPrice = Prelude.pure newValue,
+         ..}
+instance Property "RequireHibernateSupport" InstanceRequirementsRequestProperty where
+  type PropertyType "RequireHibernateSupport" InstanceRequirementsRequestProperty = Value Prelude.Bool
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {requireHibernateSupport = Prelude.pure newValue, ..}
+instance Property "SpotMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty where
+  type PropertyType "SpotMaxPricePercentageOverLowestPrice" InstanceRequirementsRequestProperty = Value Prelude.Integer
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {spotMaxPricePercentageOverLowestPrice = Prelude.pure newValue, ..}
+instance Property "TotalLocalStorageGB" InstanceRequirementsRequestProperty where
+  type PropertyType "TotalLocalStorageGB" InstanceRequirementsRequestProperty = TotalLocalStorageGBRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {totalLocalStorageGB = Prelude.pure newValue, ..}
+instance Property "VCpuCount" InstanceRequirementsRequestProperty where
+  type PropertyType "VCpuCount" InstanceRequirementsRequestProperty = VCpuCountRangeRequestProperty
+  set newValue InstanceRequirementsRequestProperty {..}
+    = InstanceRequirementsRequestProperty
+        {vCpuCount = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/InstanceRequirementsRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/InstanceRequirementsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/InstanceRequirementsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.InstanceRequirementsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data InstanceRequirementsRequestProperty :: Prelude.Type
+instance ToResourceProperties InstanceRequirementsRequestProperty
+instance Prelude.Eq InstanceRequirementsRequestProperty
+instance Prelude.Show InstanceRequirementsRequestProperty
+instance JSON.ToJSON InstanceRequirementsRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateConfigProperty.hs b/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateConfigProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.EC2.SpotFleet.LaunchTemplateConfigProperty (
+        module Exports, LaunchTemplateConfigProperty(..),
+        mkLaunchTemplateConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.FleetLaunchTemplateSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.LaunchTemplateOverridesProperty as Exports
+import Stratosphere.ResourceProperties
+data LaunchTemplateConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateconfig.html>
+    LaunchTemplateConfigProperty {haddock_workaround_ :: (),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateconfig.html#cfn-ec2-spotfleet-launchtemplateconfig-launchtemplatespecification>
+                                  launchTemplateSpecification :: (Prelude.Maybe FleetLaunchTemplateSpecificationProperty),
+                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateconfig.html#cfn-ec2-spotfleet-launchtemplateconfig-overrides>
+                                  overrides :: (Prelude.Maybe [LaunchTemplateOverridesProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLaunchTemplateConfigProperty :: LaunchTemplateConfigProperty
+mkLaunchTemplateConfigProperty
+  = LaunchTemplateConfigProperty
+      {haddock_workaround_ = (),
+       launchTemplateSpecification = Prelude.Nothing,
+       overrides = Prelude.Nothing}
+instance ToResourceProperties LaunchTemplateConfigProperty where
+  toResourceProperties LaunchTemplateConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.LaunchTemplateConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LaunchTemplateSpecification"
+                              Prelude.<$> launchTemplateSpecification,
+                            (JSON..=) "Overrides" Prelude.<$> overrides])}
+instance JSON.ToJSON LaunchTemplateConfigProperty where
+  toJSON LaunchTemplateConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LaunchTemplateSpecification"
+                 Prelude.<$> launchTemplateSpecification,
+               (JSON..=) "Overrides" Prelude.<$> overrides]))
+instance Property "LaunchTemplateSpecification" LaunchTemplateConfigProperty where
+  type PropertyType "LaunchTemplateSpecification" LaunchTemplateConfigProperty = FleetLaunchTemplateSpecificationProperty
+  set newValue LaunchTemplateConfigProperty {..}
+    = LaunchTemplateConfigProperty
+        {launchTemplateSpecification = Prelude.pure newValue, ..}
+instance Property "Overrides" LaunchTemplateConfigProperty where
+  type PropertyType "Overrides" LaunchTemplateConfigProperty = [LaunchTemplateOverridesProperty]
+  set newValue LaunchTemplateConfigProperty {..}
+    = LaunchTemplateConfigProperty
+        {overrides = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateConfigProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.LaunchTemplateConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LaunchTemplateConfigProperty :: Prelude.Type
+instance ToResourceProperties LaunchTemplateConfigProperty
+instance Prelude.Eq LaunchTemplateConfigProperty
+instance Prelude.Show LaunchTemplateConfigProperty
+instance JSON.ToJSON LaunchTemplateConfigProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateOverridesProperty.hs b/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateOverridesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateOverridesProperty.hs
@@ -0,0 +1,98 @@
+module Stratosphere.EC2.SpotFleet.LaunchTemplateOverridesProperty (
+        module Exports, LaunchTemplateOverridesProperty(..),
+        mkLaunchTemplateOverridesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.InstanceRequirementsRequestProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LaunchTemplateOverridesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html>
+    LaunchTemplateOverridesProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-availabilityzone>
+                                     availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-instancerequirements>
+                                     instanceRequirements :: (Prelude.Maybe InstanceRequirementsRequestProperty),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-instancetype>
+                                     instanceType :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-priority>
+                                     priority :: (Prelude.Maybe (Value Prelude.Double)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-spotprice>
+                                     spotPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-subnetid>
+                                     subnetId :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-launchtemplateoverrides.html#cfn-ec2-spotfleet-launchtemplateoverrides-weightedcapacity>
+                                     weightedCapacity :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLaunchTemplateOverridesProperty ::
+  LaunchTemplateOverridesProperty
+mkLaunchTemplateOverridesProperty
+  = LaunchTemplateOverridesProperty
+      {haddock_workaround_ = (), availabilityZone = Prelude.Nothing,
+       instanceRequirements = Prelude.Nothing,
+       instanceType = Prelude.Nothing, priority = Prelude.Nothing,
+       spotPrice = Prelude.Nothing, subnetId = Prelude.Nothing,
+       weightedCapacity = Prelude.Nothing}
+instance ToResourceProperties LaunchTemplateOverridesProperty where
+  toResourceProperties LaunchTemplateOverridesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.LaunchTemplateOverrides",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                            (JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+                            (JSON..=) "InstanceType" Prelude.<$> instanceType,
+                            (JSON..=) "Priority" Prelude.<$> priority,
+                            (JSON..=) "SpotPrice" Prelude.<$> spotPrice,
+                            (JSON..=) "SubnetId" Prelude.<$> subnetId,
+                            (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity])}
+instance JSON.ToJSON LaunchTemplateOverridesProperty where
+  toJSON LaunchTemplateOverridesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+               (JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+               (JSON..=) "InstanceType" Prelude.<$> instanceType,
+               (JSON..=) "Priority" Prelude.<$> priority,
+               (JSON..=) "SpotPrice" Prelude.<$> spotPrice,
+               (JSON..=) "SubnetId" Prelude.<$> subnetId,
+               (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity]))
+instance Property "AvailabilityZone" LaunchTemplateOverridesProperty where
+  type PropertyType "AvailabilityZone" LaunchTemplateOverridesProperty = Value Prelude.Text
+  set newValue LaunchTemplateOverridesProperty {..}
+    = LaunchTemplateOverridesProperty
+        {availabilityZone = Prelude.pure newValue, ..}
+instance Property "InstanceRequirements" LaunchTemplateOverridesProperty where
+  type PropertyType "InstanceRequirements" LaunchTemplateOverridesProperty = InstanceRequirementsRequestProperty
+  set newValue LaunchTemplateOverridesProperty {..}
+    = LaunchTemplateOverridesProperty
+        {instanceRequirements = Prelude.pure newValue, ..}
+instance Property "InstanceType" LaunchTemplateOverridesProperty where
+  type PropertyType "InstanceType" LaunchTemplateOverridesProperty = Value Prelude.Text
+  set newValue LaunchTemplateOverridesProperty {..}
+    = LaunchTemplateOverridesProperty
+        {instanceType = Prelude.pure newValue, ..}
+instance Property "Priority" LaunchTemplateOverridesProperty where
+  type PropertyType "Priority" LaunchTemplateOverridesProperty = Value Prelude.Double
+  set newValue LaunchTemplateOverridesProperty {..}
+    = LaunchTemplateOverridesProperty
+        {priority = Prelude.pure newValue, ..}
+instance Property "SpotPrice" LaunchTemplateOverridesProperty where
+  type PropertyType "SpotPrice" LaunchTemplateOverridesProperty = Value Prelude.Text
+  set newValue LaunchTemplateOverridesProperty {..}
+    = LaunchTemplateOverridesProperty
+        {spotPrice = Prelude.pure newValue, ..}
+instance Property "SubnetId" LaunchTemplateOverridesProperty where
+  type PropertyType "SubnetId" LaunchTemplateOverridesProperty = Value Prelude.Text
+  set newValue LaunchTemplateOverridesProperty {..}
+    = LaunchTemplateOverridesProperty
+        {subnetId = Prelude.pure newValue, ..}
+instance Property "WeightedCapacity" LaunchTemplateOverridesProperty where
+  type PropertyType "WeightedCapacity" LaunchTemplateOverridesProperty = Value Prelude.Double
+  set newValue LaunchTemplateOverridesProperty {..}
+    = LaunchTemplateOverridesProperty
+        {weightedCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateOverridesProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateOverridesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/LaunchTemplateOverridesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.LaunchTemplateOverridesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LaunchTemplateOverridesProperty :: Prelude.Type
+instance ToResourceProperties LaunchTemplateOverridesProperty
+instance Prelude.Eq LaunchTemplateOverridesProperty
+instance Prelude.Show LaunchTemplateOverridesProperty
+instance JSON.ToJSON LaunchTemplateOverridesProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/LoadBalancersConfigProperty.hs b/gen/Stratosphere/EC2/SpotFleet/LoadBalancersConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/LoadBalancersConfigProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.EC2.SpotFleet.LoadBalancersConfigProperty (
+        module Exports, LoadBalancersConfigProperty(..),
+        mkLoadBalancersConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.ClassicLoadBalancersConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.TargetGroupsConfigProperty as Exports
+import Stratosphere.ResourceProperties
+data LoadBalancersConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-loadbalancersconfig.html>
+    LoadBalancersConfigProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-loadbalancersconfig.html#cfn-ec2-spotfleet-loadbalancersconfig-classicloadbalancersconfig>
+                                 classicLoadBalancersConfig :: (Prelude.Maybe ClassicLoadBalancersConfigProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-loadbalancersconfig.html#cfn-ec2-spotfleet-loadbalancersconfig-targetgroupsconfig>
+                                 targetGroupsConfig :: (Prelude.Maybe TargetGroupsConfigProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLoadBalancersConfigProperty :: LoadBalancersConfigProperty
+mkLoadBalancersConfigProperty
+  = LoadBalancersConfigProperty
+      {haddock_workaround_ = (),
+       classicLoadBalancersConfig = Prelude.Nothing,
+       targetGroupsConfig = Prelude.Nothing}
+instance ToResourceProperties LoadBalancersConfigProperty where
+  toResourceProperties LoadBalancersConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.LoadBalancersConfig",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ClassicLoadBalancersConfig"
+                              Prelude.<$> classicLoadBalancersConfig,
+                            (JSON..=) "TargetGroupsConfig" Prelude.<$> targetGroupsConfig])}
+instance JSON.ToJSON LoadBalancersConfigProperty where
+  toJSON LoadBalancersConfigProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ClassicLoadBalancersConfig"
+                 Prelude.<$> classicLoadBalancersConfig,
+               (JSON..=) "TargetGroupsConfig" Prelude.<$> targetGroupsConfig]))
+instance Property "ClassicLoadBalancersConfig" LoadBalancersConfigProperty where
+  type PropertyType "ClassicLoadBalancersConfig" LoadBalancersConfigProperty = ClassicLoadBalancersConfigProperty
+  set newValue LoadBalancersConfigProperty {..}
+    = LoadBalancersConfigProperty
+        {classicLoadBalancersConfig = Prelude.pure newValue, ..}
+instance Property "TargetGroupsConfig" LoadBalancersConfigProperty where
+  type PropertyType "TargetGroupsConfig" LoadBalancersConfigProperty = TargetGroupsConfigProperty
+  set newValue LoadBalancersConfigProperty {..}
+    = LoadBalancersConfigProperty
+        {targetGroupsConfig = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/LoadBalancersConfigProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/LoadBalancersConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/LoadBalancersConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.LoadBalancersConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LoadBalancersConfigProperty :: Prelude.Type
+instance ToResourceProperties LoadBalancersConfigProperty
+instance Prelude.Eq LoadBalancersConfigProperty
+instance Prelude.Show LoadBalancersConfigProperty
+instance JSON.ToJSON LoadBalancersConfigProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/MemoryGiBPerVCpuRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/MemoryGiBPerVCpuRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/MemoryGiBPerVCpuRequestProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.SpotFleet.MemoryGiBPerVCpuRequestProperty (
+        MemoryGiBPerVCpuRequestProperty(..),
+        mkMemoryGiBPerVCpuRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MemoryGiBPerVCpuRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-memorygibpervcpurequest.html>
+    MemoryGiBPerVCpuRequestProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-memorygibpervcpurequest.html#cfn-ec2-spotfleet-memorygibpervcpurequest-max>
+                                     max :: (Prelude.Maybe (Value Prelude.Double)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-memorygibpervcpurequest.html#cfn-ec2-spotfleet-memorygibpervcpurequest-min>
+                                     min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMemoryGiBPerVCpuRequestProperty ::
+  MemoryGiBPerVCpuRequestProperty
+mkMemoryGiBPerVCpuRequestProperty
+  = MemoryGiBPerVCpuRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties MemoryGiBPerVCpuRequestProperty where
+  toResourceProperties MemoryGiBPerVCpuRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.MemoryGiBPerVCpuRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON MemoryGiBPerVCpuRequestProperty where
+  toJSON MemoryGiBPerVCpuRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" MemoryGiBPerVCpuRequestProperty where
+  type PropertyType "Max" MemoryGiBPerVCpuRequestProperty = Value Prelude.Double
+  set newValue MemoryGiBPerVCpuRequestProperty {..}
+    = MemoryGiBPerVCpuRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" MemoryGiBPerVCpuRequestProperty where
+  type PropertyType "Min" MemoryGiBPerVCpuRequestProperty = Value Prelude.Double
+  set newValue MemoryGiBPerVCpuRequestProperty {..}
+    = MemoryGiBPerVCpuRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/MemoryGiBPerVCpuRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/MemoryGiBPerVCpuRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/MemoryGiBPerVCpuRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.MemoryGiBPerVCpuRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MemoryGiBPerVCpuRequestProperty :: Prelude.Type
+instance ToResourceProperties MemoryGiBPerVCpuRequestProperty
+instance Prelude.Eq MemoryGiBPerVCpuRequestProperty
+instance Prelude.Show MemoryGiBPerVCpuRequestProperty
+instance JSON.ToJSON MemoryGiBPerVCpuRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/MemoryMiBRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/MemoryMiBRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/MemoryMiBRequestProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.SpotFleet.MemoryMiBRequestProperty (
+        MemoryMiBRequestProperty(..), mkMemoryMiBRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data MemoryMiBRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-memorymibrequest.html>
+    MemoryMiBRequestProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-memorymibrequest.html#cfn-ec2-spotfleet-memorymibrequest-max>
+                              max :: (Prelude.Maybe (Value Prelude.Integer)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-memorymibrequest.html#cfn-ec2-spotfleet-memorymibrequest-min>
+                              min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkMemoryMiBRequestProperty :: MemoryMiBRequestProperty
+mkMemoryMiBRequestProperty
+  = MemoryMiBRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties MemoryMiBRequestProperty where
+  toResourceProperties MemoryMiBRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.MemoryMiBRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON MemoryMiBRequestProperty where
+  toJSON MemoryMiBRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" MemoryMiBRequestProperty where
+  type PropertyType "Max" MemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue MemoryMiBRequestProperty {..}
+    = MemoryMiBRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" MemoryMiBRequestProperty where
+  type PropertyType "Min" MemoryMiBRequestProperty = Value Prelude.Integer
+  set newValue MemoryMiBRequestProperty {..}
+    = MemoryMiBRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/MemoryMiBRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/MemoryMiBRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/MemoryMiBRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.MemoryMiBRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data MemoryMiBRequestProperty :: Prelude.Type
+instance ToResourceProperties MemoryMiBRequestProperty
+instance Prelude.Eq MemoryMiBRequestProperty
+instance Prelude.Show MemoryMiBRequestProperty
+instance JSON.ToJSON MemoryMiBRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/NetworkBandwidthGbpsRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/NetworkBandwidthGbpsRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/NetworkBandwidthGbpsRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.SpotFleet.NetworkBandwidthGbpsRequestProperty (
+        NetworkBandwidthGbpsRequestProperty(..),
+        mkNetworkBandwidthGbpsRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkBandwidthGbpsRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-networkbandwidthgbpsrequest.html>
+    NetworkBandwidthGbpsRequestProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-networkbandwidthgbpsrequest.html#cfn-ec2-spotfleet-networkbandwidthgbpsrequest-max>
+                                         max :: (Prelude.Maybe (Value Prelude.Double)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-networkbandwidthgbpsrequest.html#cfn-ec2-spotfleet-networkbandwidthgbpsrequest-min>
+                                         min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkBandwidthGbpsRequestProperty ::
+  NetworkBandwidthGbpsRequestProperty
+mkNetworkBandwidthGbpsRequestProperty
+  = NetworkBandwidthGbpsRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties NetworkBandwidthGbpsRequestProperty where
+  toResourceProperties NetworkBandwidthGbpsRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.NetworkBandwidthGbpsRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON NetworkBandwidthGbpsRequestProperty where
+  toJSON NetworkBandwidthGbpsRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" NetworkBandwidthGbpsRequestProperty where
+  type PropertyType "Max" NetworkBandwidthGbpsRequestProperty = Value Prelude.Double
+  set newValue NetworkBandwidthGbpsRequestProperty {..}
+    = NetworkBandwidthGbpsRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" NetworkBandwidthGbpsRequestProperty where
+  type PropertyType "Min" NetworkBandwidthGbpsRequestProperty = Value Prelude.Double
+  set newValue NetworkBandwidthGbpsRequestProperty {..}
+    = NetworkBandwidthGbpsRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/NetworkBandwidthGbpsRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/NetworkBandwidthGbpsRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/NetworkBandwidthGbpsRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.NetworkBandwidthGbpsRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkBandwidthGbpsRequestProperty :: Prelude.Type
+instance ToResourceProperties NetworkBandwidthGbpsRequestProperty
+instance Prelude.Eq NetworkBandwidthGbpsRequestProperty
+instance Prelude.Show NetworkBandwidthGbpsRequestProperty
+instance JSON.ToJSON NetworkBandwidthGbpsRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/NetworkInterfaceCountRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/NetworkInterfaceCountRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/NetworkInterfaceCountRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.SpotFleet.NetworkInterfaceCountRequestProperty (
+        NetworkInterfaceCountRequestProperty(..),
+        mkNetworkInterfaceCountRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkInterfaceCountRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-networkinterfacecountrequest.html>
+    NetworkInterfaceCountRequestProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-networkinterfacecountrequest.html#cfn-ec2-spotfleet-networkinterfacecountrequest-max>
+                                          max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-networkinterfacecountrequest.html#cfn-ec2-spotfleet-networkinterfacecountrequest-min>
+                                          min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterfaceCountRequestProperty ::
+  NetworkInterfaceCountRequestProperty
+mkNetworkInterfaceCountRequestProperty
+  = NetworkInterfaceCountRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties NetworkInterfaceCountRequestProperty where
+  toResourceProperties NetworkInterfaceCountRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.NetworkInterfaceCountRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON NetworkInterfaceCountRequestProperty where
+  toJSON NetworkInterfaceCountRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" NetworkInterfaceCountRequestProperty where
+  type PropertyType "Max" NetworkInterfaceCountRequestProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceCountRequestProperty {..}
+    = NetworkInterfaceCountRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" NetworkInterfaceCountRequestProperty where
+  type PropertyType "Min" NetworkInterfaceCountRequestProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceCountRequestProperty {..}
+    = NetworkInterfaceCountRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/NetworkInterfaceCountRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/NetworkInterfaceCountRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/NetworkInterfaceCountRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.NetworkInterfaceCountRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkInterfaceCountRequestProperty :: Prelude.Type
+instance ToResourceProperties NetworkInterfaceCountRequestProperty
+instance Prelude.Eq NetworkInterfaceCountRequestProperty
+instance Prelude.Show NetworkInterfaceCountRequestProperty
+instance JSON.ToJSON NetworkInterfaceCountRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/PerformanceFactorReferenceRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/PerformanceFactorReferenceRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/PerformanceFactorReferenceRequestProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.SpotFleet.PerformanceFactorReferenceRequestProperty (
+        PerformanceFactorReferenceRequestProperty(..),
+        mkPerformanceFactorReferenceRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PerformanceFactorReferenceRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-performancefactorreferencerequest.html>
+    PerformanceFactorReferenceRequestProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-performancefactorreferencerequest.html#cfn-ec2-spotfleet-performancefactorreferencerequest-instancefamily>
+                                               instanceFamily :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPerformanceFactorReferenceRequestProperty ::
+  PerformanceFactorReferenceRequestProperty
+mkPerformanceFactorReferenceRequestProperty
+  = PerformanceFactorReferenceRequestProperty
+      {haddock_workaround_ = (), instanceFamily = Prelude.Nothing}
+instance ToResourceProperties PerformanceFactorReferenceRequestProperty where
+  toResourceProperties PerformanceFactorReferenceRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.PerformanceFactorReferenceRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "InstanceFamily" Prelude.<$> instanceFamily])}
+instance JSON.ToJSON PerformanceFactorReferenceRequestProperty where
+  toJSON PerformanceFactorReferenceRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "InstanceFamily" Prelude.<$> instanceFamily]))
+instance Property "InstanceFamily" PerformanceFactorReferenceRequestProperty where
+  type PropertyType "InstanceFamily" PerformanceFactorReferenceRequestProperty = Value Prelude.Text
+  set newValue PerformanceFactorReferenceRequestProperty {..}
+    = PerformanceFactorReferenceRequestProperty
+        {instanceFamily = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/PerformanceFactorReferenceRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/PerformanceFactorReferenceRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/PerformanceFactorReferenceRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.PerformanceFactorReferenceRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PerformanceFactorReferenceRequestProperty :: Prelude.Type
+instance ToResourceProperties PerformanceFactorReferenceRequestProperty
+instance Prelude.Eq PerformanceFactorReferenceRequestProperty
+instance Prelude.Show PerformanceFactorReferenceRequestProperty
+instance JSON.ToJSON PerformanceFactorReferenceRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/PrivateIpAddressSpecificationProperty.hs b/gen/Stratosphere/EC2/SpotFleet/PrivateIpAddressSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/PrivateIpAddressSpecificationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.SpotFleet.PrivateIpAddressSpecificationProperty (
+        PrivateIpAddressSpecificationProperty(..),
+        mkPrivateIpAddressSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PrivateIpAddressSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-privateipaddressspecification.html>
+    PrivateIpAddressSpecificationProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-privateipaddressspecification.html#cfn-ec2-spotfleet-privateipaddressspecification-primary>
+                                           primary :: (Prelude.Maybe (Value Prelude.Bool)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-privateipaddressspecification.html#cfn-ec2-spotfleet-privateipaddressspecification-privateipaddress>
+                                           privateIpAddress :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrivateIpAddressSpecificationProperty ::
+  Value Prelude.Text -> PrivateIpAddressSpecificationProperty
+mkPrivateIpAddressSpecificationProperty privateIpAddress
+  = PrivateIpAddressSpecificationProperty
+      {haddock_workaround_ = (), privateIpAddress = privateIpAddress,
+       primary = Prelude.Nothing}
+instance ToResourceProperties PrivateIpAddressSpecificationProperty where
+  toResourceProperties PrivateIpAddressSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.PrivateIpAddressSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["PrivateIpAddress" JSON..= privateIpAddress]
+                           (Prelude.catMaybes [(JSON..=) "Primary" Prelude.<$> primary]))}
+instance JSON.ToJSON PrivateIpAddressSpecificationProperty where
+  toJSON PrivateIpAddressSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["PrivateIpAddress" JSON..= privateIpAddress]
+              (Prelude.catMaybes [(JSON..=) "Primary" Prelude.<$> primary])))
+instance Property "Primary" PrivateIpAddressSpecificationProperty where
+  type PropertyType "Primary" PrivateIpAddressSpecificationProperty = Value Prelude.Bool
+  set newValue PrivateIpAddressSpecificationProperty {..}
+    = PrivateIpAddressSpecificationProperty
+        {primary = Prelude.pure newValue, ..}
+instance Property "PrivateIpAddress" PrivateIpAddressSpecificationProperty where
+  type PropertyType "PrivateIpAddress" PrivateIpAddressSpecificationProperty = Value Prelude.Text
+  set newValue PrivateIpAddressSpecificationProperty {..}
+    = PrivateIpAddressSpecificationProperty
+        {privateIpAddress = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/PrivateIpAddressSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/PrivateIpAddressSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/PrivateIpAddressSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.PrivateIpAddressSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PrivateIpAddressSpecificationProperty :: Prelude.Type
+instance ToResourceProperties PrivateIpAddressSpecificationProperty
+instance Prelude.Eq PrivateIpAddressSpecificationProperty
+instance Prelude.Show PrivateIpAddressSpecificationProperty
+instance JSON.ToJSON PrivateIpAddressSpecificationProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotCapacityRebalanceProperty.hs b/gen/Stratosphere/EC2/SpotFleet/SpotCapacityRebalanceProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotCapacityRebalanceProperty.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.SpotFleet.SpotCapacityRebalanceProperty (
+        SpotCapacityRebalanceProperty(..), mkSpotCapacityRebalanceProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotCapacityRebalanceProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotcapacityrebalance.html>
+    SpotCapacityRebalanceProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotcapacityrebalance.html#cfn-ec2-spotfleet-spotcapacityrebalance-replacementstrategy>
+                                   replacementStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotcapacityrebalance.html#cfn-ec2-spotfleet-spotcapacityrebalance-terminationdelay>
+                                   terminationDelay :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotCapacityRebalanceProperty :: SpotCapacityRebalanceProperty
+mkSpotCapacityRebalanceProperty
+  = SpotCapacityRebalanceProperty
+      {haddock_workaround_ = (), replacementStrategy = Prelude.Nothing,
+       terminationDelay = Prelude.Nothing}
+instance ToResourceProperties SpotCapacityRebalanceProperty where
+  toResourceProperties SpotCapacityRebalanceProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.SpotCapacityRebalance",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ReplacementStrategy" Prelude.<$> replacementStrategy,
+                            (JSON..=) "TerminationDelay" Prelude.<$> terminationDelay])}
+instance JSON.ToJSON SpotCapacityRebalanceProperty where
+  toJSON SpotCapacityRebalanceProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ReplacementStrategy" Prelude.<$> replacementStrategy,
+               (JSON..=) "TerminationDelay" Prelude.<$> terminationDelay]))
+instance Property "ReplacementStrategy" SpotCapacityRebalanceProperty where
+  type PropertyType "ReplacementStrategy" SpotCapacityRebalanceProperty = Value Prelude.Text
+  set newValue SpotCapacityRebalanceProperty {..}
+    = SpotCapacityRebalanceProperty
+        {replacementStrategy = Prelude.pure newValue, ..}
+instance Property "TerminationDelay" SpotCapacityRebalanceProperty where
+  type PropertyType "TerminationDelay" SpotCapacityRebalanceProperty = Value Prelude.Integer
+  set newValue SpotCapacityRebalanceProperty {..}
+    = SpotCapacityRebalanceProperty
+        {terminationDelay = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotCapacityRebalanceProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/SpotCapacityRebalanceProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotCapacityRebalanceProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.SpotCapacityRebalanceProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotCapacityRebalanceProperty :: Prelude.Type
+instance ToResourceProperties SpotCapacityRebalanceProperty
+instance Prelude.Eq SpotCapacityRebalanceProperty
+instance Prelude.Show SpotCapacityRebalanceProperty
+instance JSON.ToJSON SpotCapacityRebalanceProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotFleetLaunchSpecificationProperty.hs b/gen/Stratosphere/EC2/SpotFleet/SpotFleetLaunchSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotFleetLaunchSpecificationProperty.hs
@@ -0,0 +1,212 @@
+module Stratosphere.EC2.SpotFleet.SpotFleetLaunchSpecificationProperty (
+        module Exports, SpotFleetLaunchSpecificationProperty(..),
+        mkSpotFleetLaunchSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.BlockDeviceMappingProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.GroupIdentifierProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.IamInstanceProfileSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.InstanceNetworkInterfaceSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.InstanceRequirementsRequestProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.SpotFleetMonitoringProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.SpotFleetTagSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.SpotPlacementProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotFleetLaunchSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html>
+    SpotFleetLaunchSpecificationProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-blockdevicemappings>
+                                          blockDeviceMappings :: (Prelude.Maybe [BlockDeviceMappingProperty]),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-ebsoptimized>
+                                          ebsOptimized :: (Prelude.Maybe (Value Prelude.Bool)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-iaminstanceprofile>
+                                          iamInstanceProfile :: (Prelude.Maybe IamInstanceProfileSpecificationProperty),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-imageid>
+                                          imageId :: (Value Prelude.Text),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-instancerequirements>
+                                          instanceRequirements :: (Prelude.Maybe InstanceRequirementsRequestProperty),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-instancetype>
+                                          instanceType :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-kernelid>
+                                          kernelId :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-keyname>
+                                          keyName :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-monitoring>
+                                          monitoring :: (Prelude.Maybe SpotFleetMonitoringProperty),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-networkinterfaces>
+                                          networkInterfaces :: (Prelude.Maybe [InstanceNetworkInterfaceSpecificationProperty]),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-placement>
+                                          placement :: (Prelude.Maybe SpotPlacementProperty),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-ramdiskid>
+                                          ramdiskId :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-securitygroups>
+                                          securityGroups :: (Prelude.Maybe [GroupIdentifierProperty]),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-spotprice>
+                                          spotPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-subnetid>
+                                          subnetId :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-tagspecifications>
+                                          tagSpecifications :: (Prelude.Maybe [SpotFleetTagSpecificationProperty]),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-userdata>
+                                          userData :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetlaunchspecification.html#cfn-ec2-spotfleet-spotfleetlaunchspecification-weightedcapacity>
+                                          weightedCapacity :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotFleetLaunchSpecificationProperty ::
+  Value Prelude.Text -> SpotFleetLaunchSpecificationProperty
+mkSpotFleetLaunchSpecificationProperty imageId
+  = SpotFleetLaunchSpecificationProperty
+      {haddock_workaround_ = (), imageId = imageId,
+       blockDeviceMappings = Prelude.Nothing,
+       ebsOptimized = Prelude.Nothing,
+       iamInstanceProfile = Prelude.Nothing,
+       instanceRequirements = Prelude.Nothing,
+       instanceType = Prelude.Nothing, kernelId = Prelude.Nothing,
+       keyName = Prelude.Nothing, monitoring = Prelude.Nothing,
+       networkInterfaces = Prelude.Nothing, placement = Prelude.Nothing,
+       ramdiskId = Prelude.Nothing, securityGroups = Prelude.Nothing,
+       spotPrice = Prelude.Nothing, subnetId = Prelude.Nothing,
+       tagSpecifications = Prelude.Nothing, userData = Prelude.Nothing,
+       weightedCapacity = Prelude.Nothing}
+instance ToResourceProperties SpotFleetLaunchSpecificationProperty where
+  toResourceProperties SpotFleetLaunchSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.SpotFleetLaunchSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ImageId" JSON..= imageId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BlockDeviceMappings" Prelude.<$> blockDeviceMappings,
+                               (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+                               (JSON..=) "IamInstanceProfile" Prelude.<$> iamInstanceProfile,
+                               (JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+                               (JSON..=) "InstanceType" Prelude.<$> instanceType,
+                               (JSON..=) "KernelId" Prelude.<$> kernelId,
+                               (JSON..=) "KeyName" Prelude.<$> keyName,
+                               (JSON..=) "Monitoring" Prelude.<$> monitoring,
+                               (JSON..=) "NetworkInterfaces" Prelude.<$> networkInterfaces,
+                               (JSON..=) "Placement" Prelude.<$> placement,
+                               (JSON..=) "RamdiskId" Prelude.<$> ramdiskId,
+                               (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+                               (JSON..=) "SpotPrice" Prelude.<$> spotPrice,
+                               (JSON..=) "SubnetId" Prelude.<$> subnetId,
+                               (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                               (JSON..=) "UserData" Prelude.<$> userData,
+                               (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity]))}
+instance JSON.ToJSON SpotFleetLaunchSpecificationProperty where
+  toJSON SpotFleetLaunchSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ImageId" JSON..= imageId]
+              (Prelude.catMaybes
+                 [(JSON..=) "BlockDeviceMappings" Prelude.<$> blockDeviceMappings,
+                  (JSON..=) "EbsOptimized" Prelude.<$> ebsOptimized,
+                  (JSON..=) "IamInstanceProfile" Prelude.<$> iamInstanceProfile,
+                  (JSON..=) "InstanceRequirements" Prelude.<$> instanceRequirements,
+                  (JSON..=) "InstanceType" Prelude.<$> instanceType,
+                  (JSON..=) "KernelId" Prelude.<$> kernelId,
+                  (JSON..=) "KeyName" Prelude.<$> keyName,
+                  (JSON..=) "Monitoring" Prelude.<$> monitoring,
+                  (JSON..=) "NetworkInterfaces" Prelude.<$> networkInterfaces,
+                  (JSON..=) "Placement" Prelude.<$> placement,
+                  (JSON..=) "RamdiskId" Prelude.<$> ramdiskId,
+                  (JSON..=) "SecurityGroups" Prelude.<$> securityGroups,
+                  (JSON..=) "SpotPrice" Prelude.<$> spotPrice,
+                  (JSON..=) "SubnetId" Prelude.<$> subnetId,
+                  (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                  (JSON..=) "UserData" Prelude.<$> userData,
+                  (JSON..=) "WeightedCapacity" Prelude.<$> weightedCapacity])))
+instance Property "BlockDeviceMappings" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "BlockDeviceMappings" SpotFleetLaunchSpecificationProperty = [BlockDeviceMappingProperty]
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {blockDeviceMappings = Prelude.pure newValue, ..}
+instance Property "EbsOptimized" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "EbsOptimized" SpotFleetLaunchSpecificationProperty = Value Prelude.Bool
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {ebsOptimized = Prelude.pure newValue, ..}
+instance Property "IamInstanceProfile" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "IamInstanceProfile" SpotFleetLaunchSpecificationProperty = IamInstanceProfileSpecificationProperty
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {iamInstanceProfile = Prelude.pure newValue, ..}
+instance Property "ImageId" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "ImageId" SpotFleetLaunchSpecificationProperty = Value Prelude.Text
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty {imageId = newValue, ..}
+instance Property "InstanceRequirements" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "InstanceRequirements" SpotFleetLaunchSpecificationProperty = InstanceRequirementsRequestProperty
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {instanceRequirements = Prelude.pure newValue, ..}
+instance Property "InstanceType" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "InstanceType" SpotFleetLaunchSpecificationProperty = Value Prelude.Text
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {instanceType = Prelude.pure newValue, ..}
+instance Property "KernelId" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "KernelId" SpotFleetLaunchSpecificationProperty = Value Prelude.Text
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {kernelId = Prelude.pure newValue, ..}
+instance Property "KeyName" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "KeyName" SpotFleetLaunchSpecificationProperty = Value Prelude.Text
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {keyName = Prelude.pure newValue, ..}
+instance Property "Monitoring" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "Monitoring" SpotFleetLaunchSpecificationProperty = SpotFleetMonitoringProperty
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {monitoring = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaces" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "NetworkInterfaces" SpotFleetLaunchSpecificationProperty = [InstanceNetworkInterfaceSpecificationProperty]
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {networkInterfaces = Prelude.pure newValue, ..}
+instance Property "Placement" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "Placement" SpotFleetLaunchSpecificationProperty = SpotPlacementProperty
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {placement = Prelude.pure newValue, ..}
+instance Property "RamdiskId" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "RamdiskId" SpotFleetLaunchSpecificationProperty = Value Prelude.Text
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {ramdiskId = Prelude.pure newValue, ..}
+instance Property "SecurityGroups" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "SecurityGroups" SpotFleetLaunchSpecificationProperty = [GroupIdentifierProperty]
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {securityGroups = Prelude.pure newValue, ..}
+instance Property "SpotPrice" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "SpotPrice" SpotFleetLaunchSpecificationProperty = Value Prelude.Text
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {spotPrice = Prelude.pure newValue, ..}
+instance Property "SubnetId" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "SubnetId" SpotFleetLaunchSpecificationProperty = Value Prelude.Text
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {subnetId = Prelude.pure newValue, ..}
+instance Property "TagSpecifications" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "TagSpecifications" SpotFleetLaunchSpecificationProperty = [SpotFleetTagSpecificationProperty]
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {tagSpecifications = Prelude.pure newValue, ..}
+instance Property "UserData" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "UserData" SpotFleetLaunchSpecificationProperty = Value Prelude.Text
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {userData = Prelude.pure newValue, ..}
+instance Property "WeightedCapacity" SpotFleetLaunchSpecificationProperty where
+  type PropertyType "WeightedCapacity" SpotFleetLaunchSpecificationProperty = Value Prelude.Double
+  set newValue SpotFleetLaunchSpecificationProperty {..}
+    = SpotFleetLaunchSpecificationProperty
+        {weightedCapacity = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotFleetLaunchSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/SpotFleetLaunchSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotFleetLaunchSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.SpotFleetLaunchSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotFleetLaunchSpecificationProperty :: Prelude.Type
+instance ToResourceProperties SpotFleetLaunchSpecificationProperty
+instance Prelude.Eq SpotFleetLaunchSpecificationProperty
+instance Prelude.Show SpotFleetLaunchSpecificationProperty
+instance JSON.ToJSON SpotFleetLaunchSpecificationProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotFleetMonitoringProperty.hs b/gen/Stratosphere/EC2/SpotFleet/SpotFleetMonitoringProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotFleetMonitoringProperty.hs
@@ -0,0 +1,34 @@
+module Stratosphere.EC2.SpotFleet.SpotFleetMonitoringProperty (
+        SpotFleetMonitoringProperty(..), mkSpotFleetMonitoringProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotFleetMonitoringProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetmonitoring.html>
+    SpotFleetMonitoringProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetmonitoring.html#cfn-ec2-spotfleet-spotfleetmonitoring-enabled>
+                                 enabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotFleetMonitoringProperty :: SpotFleetMonitoringProperty
+mkSpotFleetMonitoringProperty
+  = SpotFleetMonitoringProperty
+      {haddock_workaround_ = (), enabled = Prelude.Nothing}
+instance ToResourceProperties SpotFleetMonitoringProperty where
+  toResourceProperties SpotFleetMonitoringProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.SpotFleetMonitoring",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Enabled" Prelude.<$> enabled])}
+instance JSON.ToJSON SpotFleetMonitoringProperty where
+  toJSON SpotFleetMonitoringProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Enabled" Prelude.<$> enabled]))
+instance Property "Enabled" SpotFleetMonitoringProperty where
+  type PropertyType "Enabled" SpotFleetMonitoringProperty = Value Prelude.Bool
+  set newValue SpotFleetMonitoringProperty {..}
+    = SpotFleetMonitoringProperty {enabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotFleetMonitoringProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/SpotFleetMonitoringProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotFleetMonitoringProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.SpotFleetMonitoringProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotFleetMonitoringProperty :: Prelude.Type
+instance ToResourceProperties SpotFleetMonitoringProperty
+instance Prelude.Eq SpotFleetMonitoringProperty
+instance Prelude.Show SpotFleetMonitoringProperty
+instance JSON.ToJSON SpotFleetMonitoringProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotFleetRequestConfigDataProperty.hs b/gen/Stratosphere/EC2/SpotFleet/SpotFleetRequestConfigDataProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotFleetRequestConfigDataProperty.hs
@@ -0,0 +1,285 @@
+module Stratosphere.EC2.SpotFleet.SpotFleetRequestConfigDataProperty (
+        module Exports, SpotFleetRequestConfigDataProperty(..),
+        mkSpotFleetRequestConfigDataProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.LaunchTemplateConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.LoadBalancersConfigProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.SpotFleetLaunchSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.SpotFleetTagSpecificationProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.SpotMaintenanceStrategiesProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotFleetRequestConfigDataProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html>
+    SpotFleetRequestConfigDataProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-allocationstrategy>
+                                        allocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-context>
+                                        context :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-excesscapacityterminationpolicy>
+                                        excessCapacityTerminationPolicy :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-iamfleetrole>
+                                        iamFleetRole :: (Value Prelude.Text),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-instanceinterruptionbehavior>
+                                        instanceInterruptionBehavior :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-instancepoolstousecount>
+                                        instancePoolsToUseCount :: (Prelude.Maybe (Value Prelude.Integer)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-launchspecifications>
+                                        launchSpecifications :: (Prelude.Maybe [SpotFleetLaunchSpecificationProperty]),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-launchtemplateconfigs>
+                                        launchTemplateConfigs :: (Prelude.Maybe [LaunchTemplateConfigProperty]),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-loadbalancersconfig>
+                                        loadBalancersConfig :: (Prelude.Maybe LoadBalancersConfigProperty),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-ondemandallocationstrategy>
+                                        onDemandAllocationStrategy :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-ondemandmaxtotalprice>
+                                        onDemandMaxTotalPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-ondemandtargetcapacity>
+                                        onDemandTargetCapacity :: (Prelude.Maybe (Value Prelude.Integer)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-replaceunhealthyinstances>
+                                        replaceUnhealthyInstances :: (Prelude.Maybe (Value Prelude.Bool)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-spotmaintenancestrategies>
+                                        spotMaintenanceStrategies :: (Prelude.Maybe SpotMaintenanceStrategiesProperty),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-spotmaxtotalprice>
+                                        spotMaxTotalPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-spotprice>
+                                        spotPrice :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-tagspecifications>
+                                        tagSpecifications :: (Prelude.Maybe [SpotFleetTagSpecificationProperty]),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-targetcapacity>
+                                        targetCapacity :: (Value Prelude.Integer),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-targetcapacityunittype>
+                                        targetCapacityUnitType :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-terminateinstanceswithexpiration>
+                                        terminateInstancesWithExpiration :: (Prelude.Maybe (Value Prelude.Bool)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-type>
+                                        type' :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-validfrom>
+                                        validFrom :: (Prelude.Maybe (Value Prelude.Text)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleetrequestconfigdata.html#cfn-ec2-spotfleet-spotfleetrequestconfigdata-validuntil>
+                                        validUntil :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotFleetRequestConfigDataProperty ::
+  Value Prelude.Text
+  -> Value Prelude.Integer -> SpotFleetRequestConfigDataProperty
+mkSpotFleetRequestConfigDataProperty iamFleetRole targetCapacity
+  = SpotFleetRequestConfigDataProperty
+      {haddock_workaround_ = (), iamFleetRole = iamFleetRole,
+       targetCapacity = targetCapacity,
+       allocationStrategy = Prelude.Nothing, context = Prelude.Nothing,
+       excessCapacityTerminationPolicy = Prelude.Nothing,
+       instanceInterruptionBehavior = Prelude.Nothing,
+       instancePoolsToUseCount = Prelude.Nothing,
+       launchSpecifications = Prelude.Nothing,
+       launchTemplateConfigs = Prelude.Nothing,
+       loadBalancersConfig = Prelude.Nothing,
+       onDemandAllocationStrategy = Prelude.Nothing,
+       onDemandMaxTotalPrice = Prelude.Nothing,
+       onDemandTargetCapacity = Prelude.Nothing,
+       replaceUnhealthyInstances = Prelude.Nothing,
+       spotMaintenanceStrategies = Prelude.Nothing,
+       spotMaxTotalPrice = Prelude.Nothing, spotPrice = Prelude.Nothing,
+       tagSpecifications = Prelude.Nothing,
+       targetCapacityUnitType = Prelude.Nothing,
+       terminateInstancesWithExpiration = Prelude.Nothing,
+       type' = Prelude.Nothing, validFrom = Prelude.Nothing,
+       validUntil = Prelude.Nothing}
+instance ToResourceProperties SpotFleetRequestConfigDataProperty where
+  toResourceProperties SpotFleetRequestConfigDataProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.SpotFleetRequestConfigData",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["IamFleetRole" JSON..= iamFleetRole,
+                            "TargetCapacity" JSON..= targetCapacity]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                               (JSON..=) "Context" Prelude.<$> context,
+                               (JSON..=) "ExcessCapacityTerminationPolicy"
+                                 Prelude.<$> excessCapacityTerminationPolicy,
+                               (JSON..=) "InstanceInterruptionBehavior"
+                                 Prelude.<$> instanceInterruptionBehavior,
+                               (JSON..=) "InstancePoolsToUseCount"
+                                 Prelude.<$> instancePoolsToUseCount,
+                               (JSON..=) "LaunchSpecifications" Prelude.<$> launchSpecifications,
+                               (JSON..=) "LaunchTemplateConfigs"
+                                 Prelude.<$> launchTemplateConfigs,
+                               (JSON..=) "LoadBalancersConfig" Prelude.<$> loadBalancersConfig,
+                               (JSON..=) "OnDemandAllocationStrategy"
+                                 Prelude.<$> onDemandAllocationStrategy,
+                               (JSON..=) "OnDemandMaxTotalPrice"
+                                 Prelude.<$> onDemandMaxTotalPrice,
+                               (JSON..=) "OnDemandTargetCapacity"
+                                 Prelude.<$> onDemandTargetCapacity,
+                               (JSON..=) "ReplaceUnhealthyInstances"
+                                 Prelude.<$> replaceUnhealthyInstances,
+                               (JSON..=) "SpotMaintenanceStrategies"
+                                 Prelude.<$> spotMaintenanceStrategies,
+                               (JSON..=) "SpotMaxTotalPrice" Prelude.<$> spotMaxTotalPrice,
+                               (JSON..=) "SpotPrice" Prelude.<$> spotPrice,
+                               (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                               (JSON..=) "TargetCapacityUnitType"
+                                 Prelude.<$> targetCapacityUnitType,
+                               (JSON..=) "TerminateInstancesWithExpiration"
+                                 Prelude.<$> terminateInstancesWithExpiration,
+                               (JSON..=) "Type" Prelude.<$> type',
+                               (JSON..=) "ValidFrom" Prelude.<$> validFrom,
+                               (JSON..=) "ValidUntil" Prelude.<$> validUntil]))}
+instance JSON.ToJSON SpotFleetRequestConfigDataProperty where
+  toJSON SpotFleetRequestConfigDataProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["IamFleetRole" JSON..= iamFleetRole,
+               "TargetCapacity" JSON..= targetCapacity]
+              (Prelude.catMaybes
+                 [(JSON..=) "AllocationStrategy" Prelude.<$> allocationStrategy,
+                  (JSON..=) "Context" Prelude.<$> context,
+                  (JSON..=) "ExcessCapacityTerminationPolicy"
+                    Prelude.<$> excessCapacityTerminationPolicy,
+                  (JSON..=) "InstanceInterruptionBehavior"
+                    Prelude.<$> instanceInterruptionBehavior,
+                  (JSON..=) "InstancePoolsToUseCount"
+                    Prelude.<$> instancePoolsToUseCount,
+                  (JSON..=) "LaunchSpecifications" Prelude.<$> launchSpecifications,
+                  (JSON..=) "LaunchTemplateConfigs"
+                    Prelude.<$> launchTemplateConfigs,
+                  (JSON..=) "LoadBalancersConfig" Prelude.<$> loadBalancersConfig,
+                  (JSON..=) "OnDemandAllocationStrategy"
+                    Prelude.<$> onDemandAllocationStrategy,
+                  (JSON..=) "OnDemandMaxTotalPrice"
+                    Prelude.<$> onDemandMaxTotalPrice,
+                  (JSON..=) "OnDemandTargetCapacity"
+                    Prelude.<$> onDemandTargetCapacity,
+                  (JSON..=) "ReplaceUnhealthyInstances"
+                    Prelude.<$> replaceUnhealthyInstances,
+                  (JSON..=) "SpotMaintenanceStrategies"
+                    Prelude.<$> spotMaintenanceStrategies,
+                  (JSON..=) "SpotMaxTotalPrice" Prelude.<$> spotMaxTotalPrice,
+                  (JSON..=) "SpotPrice" Prelude.<$> spotPrice,
+                  (JSON..=) "TagSpecifications" Prelude.<$> tagSpecifications,
+                  (JSON..=) "TargetCapacityUnitType"
+                    Prelude.<$> targetCapacityUnitType,
+                  (JSON..=) "TerminateInstancesWithExpiration"
+                    Prelude.<$> terminateInstancesWithExpiration,
+                  (JSON..=) "Type" Prelude.<$> type',
+                  (JSON..=) "ValidFrom" Prelude.<$> validFrom,
+                  (JSON..=) "ValidUntil" Prelude.<$> validUntil])))
+instance Property "AllocationStrategy" SpotFleetRequestConfigDataProperty where
+  type PropertyType "AllocationStrategy" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {allocationStrategy = Prelude.pure newValue, ..}
+instance Property "Context" SpotFleetRequestConfigDataProperty where
+  type PropertyType "Context" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {context = Prelude.pure newValue, ..}
+instance Property "ExcessCapacityTerminationPolicy" SpotFleetRequestConfigDataProperty where
+  type PropertyType "ExcessCapacityTerminationPolicy" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {excessCapacityTerminationPolicy = Prelude.pure newValue, ..}
+instance Property "IamFleetRole" SpotFleetRequestConfigDataProperty where
+  type PropertyType "IamFleetRole" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty {iamFleetRole = newValue, ..}
+instance Property "InstanceInterruptionBehavior" SpotFleetRequestConfigDataProperty where
+  type PropertyType "InstanceInterruptionBehavior" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {instanceInterruptionBehavior = Prelude.pure newValue, ..}
+instance Property "InstancePoolsToUseCount" SpotFleetRequestConfigDataProperty where
+  type PropertyType "InstancePoolsToUseCount" SpotFleetRequestConfigDataProperty = Value Prelude.Integer
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {instancePoolsToUseCount = Prelude.pure newValue, ..}
+instance Property "LaunchSpecifications" SpotFleetRequestConfigDataProperty where
+  type PropertyType "LaunchSpecifications" SpotFleetRequestConfigDataProperty = [SpotFleetLaunchSpecificationProperty]
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {launchSpecifications = Prelude.pure newValue, ..}
+instance Property "LaunchTemplateConfigs" SpotFleetRequestConfigDataProperty where
+  type PropertyType "LaunchTemplateConfigs" SpotFleetRequestConfigDataProperty = [LaunchTemplateConfigProperty]
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {launchTemplateConfigs = Prelude.pure newValue, ..}
+instance Property "LoadBalancersConfig" SpotFleetRequestConfigDataProperty where
+  type PropertyType "LoadBalancersConfig" SpotFleetRequestConfigDataProperty = LoadBalancersConfigProperty
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {loadBalancersConfig = Prelude.pure newValue, ..}
+instance Property "OnDemandAllocationStrategy" SpotFleetRequestConfigDataProperty where
+  type PropertyType "OnDemandAllocationStrategy" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {onDemandAllocationStrategy = Prelude.pure newValue, ..}
+instance Property "OnDemandMaxTotalPrice" SpotFleetRequestConfigDataProperty where
+  type PropertyType "OnDemandMaxTotalPrice" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {onDemandMaxTotalPrice = Prelude.pure newValue, ..}
+instance Property "OnDemandTargetCapacity" SpotFleetRequestConfigDataProperty where
+  type PropertyType "OnDemandTargetCapacity" SpotFleetRequestConfigDataProperty = Value Prelude.Integer
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {onDemandTargetCapacity = Prelude.pure newValue, ..}
+instance Property "ReplaceUnhealthyInstances" SpotFleetRequestConfigDataProperty where
+  type PropertyType "ReplaceUnhealthyInstances" SpotFleetRequestConfigDataProperty = Value Prelude.Bool
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {replaceUnhealthyInstances = Prelude.pure newValue, ..}
+instance Property "SpotMaintenanceStrategies" SpotFleetRequestConfigDataProperty where
+  type PropertyType "SpotMaintenanceStrategies" SpotFleetRequestConfigDataProperty = SpotMaintenanceStrategiesProperty
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {spotMaintenanceStrategies = Prelude.pure newValue, ..}
+instance Property "SpotMaxTotalPrice" SpotFleetRequestConfigDataProperty where
+  type PropertyType "SpotMaxTotalPrice" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {spotMaxTotalPrice = Prelude.pure newValue, ..}
+instance Property "SpotPrice" SpotFleetRequestConfigDataProperty where
+  type PropertyType "SpotPrice" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {spotPrice = Prelude.pure newValue, ..}
+instance Property "TagSpecifications" SpotFleetRequestConfigDataProperty where
+  type PropertyType "TagSpecifications" SpotFleetRequestConfigDataProperty = [SpotFleetTagSpecificationProperty]
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {tagSpecifications = Prelude.pure newValue, ..}
+instance Property "TargetCapacity" SpotFleetRequestConfigDataProperty where
+  type PropertyType "TargetCapacity" SpotFleetRequestConfigDataProperty = Value Prelude.Integer
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {targetCapacity = newValue, ..}
+instance Property "TargetCapacityUnitType" SpotFleetRequestConfigDataProperty where
+  type PropertyType "TargetCapacityUnitType" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {targetCapacityUnitType = Prelude.pure newValue, ..}
+instance Property "TerminateInstancesWithExpiration" SpotFleetRequestConfigDataProperty where
+  type PropertyType "TerminateInstancesWithExpiration" SpotFleetRequestConfigDataProperty = Value Prelude.Bool
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {terminateInstancesWithExpiration = Prelude.pure newValue, ..}
+instance Property "Type" SpotFleetRequestConfigDataProperty where
+  type PropertyType "Type" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {type' = Prelude.pure newValue, ..}
+instance Property "ValidFrom" SpotFleetRequestConfigDataProperty where
+  type PropertyType "ValidFrom" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {validFrom = Prelude.pure newValue, ..}
+instance Property "ValidUntil" SpotFleetRequestConfigDataProperty where
+  type PropertyType "ValidUntil" SpotFleetRequestConfigDataProperty = Value Prelude.Text
+  set newValue SpotFleetRequestConfigDataProperty {..}
+    = SpotFleetRequestConfigDataProperty
+        {validUntil = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotFleetRequestConfigDataProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/SpotFleetRequestConfigDataProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotFleetRequestConfigDataProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.SpotFleetRequestConfigDataProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotFleetRequestConfigDataProperty :: Prelude.Type
+instance ToResourceProperties SpotFleetRequestConfigDataProperty
+instance Prelude.Eq SpotFleetRequestConfigDataProperty
+instance Prelude.Show SpotFleetRequestConfigDataProperty
+instance JSON.ToJSON SpotFleetRequestConfigDataProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotFleetTagSpecificationProperty.hs b/gen/Stratosphere/EC2/SpotFleet/SpotFleetTagSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotFleetTagSpecificationProperty.hs
@@ -0,0 +1,50 @@
+module Stratosphere.EC2.SpotFleet.SpotFleetTagSpecificationProperty (
+        SpotFleetTagSpecificationProperty(..),
+        mkSpotFleetTagSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data SpotFleetTagSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleettagspecification.html>
+    SpotFleetTagSpecificationProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleettagspecification.html#cfn-ec2-spotfleet-spotfleettagspecification-resourcetype>
+                                       resourceType :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotfleettagspecification.html#cfn-ec2-spotfleet-spotfleettagspecification-tags>
+                                       tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotFleetTagSpecificationProperty ::
+  SpotFleetTagSpecificationProperty
+mkSpotFleetTagSpecificationProperty
+  = SpotFleetTagSpecificationProperty
+      {haddock_workaround_ = (), resourceType = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties SpotFleetTagSpecificationProperty where
+  toResourceProperties SpotFleetTagSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.SpotFleetTagSpecification",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON SpotFleetTagSpecificationProperty where
+  toJSON SpotFleetTagSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ResourceType" Prelude.<$> resourceType,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "ResourceType" SpotFleetTagSpecificationProperty where
+  type PropertyType "ResourceType" SpotFleetTagSpecificationProperty = Value Prelude.Text
+  set newValue SpotFleetTagSpecificationProperty {..}
+    = SpotFleetTagSpecificationProperty
+        {resourceType = Prelude.pure newValue, ..}
+instance Property "Tags" SpotFleetTagSpecificationProperty where
+  type PropertyType "Tags" SpotFleetTagSpecificationProperty = [Tag]
+  set newValue SpotFleetTagSpecificationProperty {..}
+    = SpotFleetTagSpecificationProperty
+        {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotFleetTagSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/SpotFleetTagSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotFleetTagSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.SpotFleetTagSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotFleetTagSpecificationProperty :: Prelude.Type
+instance ToResourceProperties SpotFleetTagSpecificationProperty
+instance Prelude.Eq SpotFleetTagSpecificationProperty
+instance Prelude.Show SpotFleetTagSpecificationProperty
+instance JSON.ToJSON SpotFleetTagSpecificationProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotMaintenanceStrategiesProperty.hs b/gen/Stratosphere/EC2/SpotFleet/SpotMaintenanceStrategiesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotMaintenanceStrategiesProperty.hs
@@ -0,0 +1,39 @@
+module Stratosphere.EC2.SpotFleet.SpotMaintenanceStrategiesProperty (
+        module Exports, SpotMaintenanceStrategiesProperty(..),
+        mkSpotMaintenanceStrategiesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.SpotCapacityRebalanceProperty as Exports
+import Stratosphere.ResourceProperties
+data SpotMaintenanceStrategiesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotmaintenancestrategies.html>
+    SpotMaintenanceStrategiesProperty {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotmaintenancestrategies.html#cfn-ec2-spotfleet-spotmaintenancestrategies-capacityrebalance>
+                                       capacityRebalance :: (Prelude.Maybe SpotCapacityRebalanceProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotMaintenanceStrategiesProperty ::
+  SpotMaintenanceStrategiesProperty
+mkSpotMaintenanceStrategiesProperty
+  = SpotMaintenanceStrategiesProperty
+      {haddock_workaround_ = (), capacityRebalance = Prelude.Nothing}
+instance ToResourceProperties SpotMaintenanceStrategiesProperty where
+  toResourceProperties SpotMaintenanceStrategiesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.SpotMaintenanceStrategies",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CapacityRebalance" Prelude.<$> capacityRebalance])}
+instance JSON.ToJSON SpotMaintenanceStrategiesProperty where
+  toJSON SpotMaintenanceStrategiesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CapacityRebalance" Prelude.<$> capacityRebalance]))
+instance Property "CapacityRebalance" SpotMaintenanceStrategiesProperty where
+  type PropertyType "CapacityRebalance" SpotMaintenanceStrategiesProperty = SpotCapacityRebalanceProperty
+  set newValue SpotMaintenanceStrategiesProperty {..}
+    = SpotMaintenanceStrategiesProperty
+        {capacityRebalance = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotMaintenanceStrategiesProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/SpotMaintenanceStrategiesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotMaintenanceStrategiesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.SpotMaintenanceStrategiesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotMaintenanceStrategiesProperty :: Prelude.Type
+instance ToResourceProperties SpotMaintenanceStrategiesProperty
+instance Prelude.Eq SpotMaintenanceStrategiesProperty
+instance Prelude.Show SpotMaintenanceStrategiesProperty
+instance JSON.ToJSON SpotMaintenanceStrategiesProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotPlacementProperty.hs b/gen/Stratosphere/EC2/SpotFleet/SpotPlacementProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotPlacementProperty.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EC2.SpotFleet.SpotPlacementProperty (
+        SpotPlacementProperty(..), mkSpotPlacementProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SpotPlacementProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotplacement.html>
+    SpotPlacementProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotplacement.html#cfn-ec2-spotfleet-spotplacement-availabilityzone>
+                           availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotplacement.html#cfn-ec2-spotfleet-spotplacement-groupname>
+                           groupName :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-spotplacement.html#cfn-ec2-spotfleet-spotplacement-tenancy>
+                           tenancy :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSpotPlacementProperty :: SpotPlacementProperty
+mkSpotPlacementProperty
+  = SpotPlacementProperty
+      {haddock_workaround_ = (), availabilityZone = Prelude.Nothing,
+       groupName = Prelude.Nothing, tenancy = Prelude.Nothing}
+instance ToResourceProperties SpotPlacementProperty where
+  toResourceProperties SpotPlacementProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.SpotPlacement",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                            (JSON..=) "GroupName" Prelude.<$> groupName,
+                            (JSON..=) "Tenancy" Prelude.<$> tenancy])}
+instance JSON.ToJSON SpotPlacementProperty where
+  toJSON SpotPlacementProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+               (JSON..=) "GroupName" Prelude.<$> groupName,
+               (JSON..=) "Tenancy" Prelude.<$> tenancy]))
+instance Property "AvailabilityZone" SpotPlacementProperty where
+  type PropertyType "AvailabilityZone" SpotPlacementProperty = Value Prelude.Text
+  set newValue SpotPlacementProperty {..}
+    = SpotPlacementProperty
+        {availabilityZone = Prelude.pure newValue, ..}
+instance Property "GroupName" SpotPlacementProperty where
+  type PropertyType "GroupName" SpotPlacementProperty = Value Prelude.Text
+  set newValue SpotPlacementProperty {..}
+    = SpotPlacementProperty {groupName = Prelude.pure newValue, ..}
+instance Property "Tenancy" SpotPlacementProperty where
+  type PropertyType "Tenancy" SpotPlacementProperty = Value Prelude.Text
+  set newValue SpotPlacementProperty {..}
+    = SpotPlacementProperty {tenancy = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/SpotPlacementProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/SpotPlacementProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/SpotPlacementProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.SpotPlacementProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SpotPlacementProperty :: Prelude.Type
+instance ToResourceProperties SpotPlacementProperty
+instance Prelude.Eq SpotPlacementProperty
+instance Prelude.Show SpotPlacementProperty
+instance JSON.ToJSON SpotPlacementProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/TargetGroupProperty.hs b/gen/Stratosphere/EC2/SpotFleet/TargetGroupProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/TargetGroupProperty.hs
@@ -0,0 +1,28 @@
+module Stratosphere.EC2.SpotFleet.TargetGroupProperty (
+        TargetGroupProperty(..), mkTargetGroupProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TargetGroupProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-targetgroup.html>
+    TargetGroupProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-targetgroup.html#cfn-ec2-spotfleet-targetgroup-arn>
+                         arn :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetGroupProperty :: Value Prelude.Text -> TargetGroupProperty
+mkTargetGroupProperty arn
+  = TargetGroupProperty {haddock_workaround_ = (), arn = arn}
+instance ToResourceProperties TargetGroupProperty where
+  toResourceProperties TargetGroupProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.TargetGroup",
+         supportsTags = Prelude.False, properties = ["Arn" JSON..= arn]}
+instance JSON.ToJSON TargetGroupProperty where
+  toJSON TargetGroupProperty {..} = JSON.object ["Arn" JSON..= arn]
+instance Property "Arn" TargetGroupProperty where
+  type PropertyType "Arn" TargetGroupProperty = Value Prelude.Text
+  set newValue TargetGroupProperty {..}
+    = TargetGroupProperty {arn = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/TargetGroupProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/TargetGroupProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/TargetGroupProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.TargetGroupProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetGroupProperty :: Prelude.Type
+instance ToResourceProperties TargetGroupProperty
+instance Prelude.Eq TargetGroupProperty
+instance Prelude.Show TargetGroupProperty
+instance JSON.ToJSON TargetGroupProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/TargetGroupsConfigProperty.hs b/gen/Stratosphere/EC2/SpotFleet/TargetGroupsConfigProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/TargetGroupsConfigProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.EC2.SpotFleet.TargetGroupsConfigProperty (
+        module Exports, TargetGroupsConfigProperty(..),
+        mkTargetGroupsConfigProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.SpotFleet.TargetGroupProperty as Exports
+import Stratosphere.ResourceProperties
+data TargetGroupsConfigProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-targetgroupsconfig.html>
+    TargetGroupsConfigProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-targetgroupsconfig.html#cfn-ec2-spotfleet-targetgroupsconfig-targetgroups>
+                                targetGroups :: [TargetGroupProperty]}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTargetGroupsConfigProperty ::
+  [TargetGroupProperty] -> TargetGroupsConfigProperty
+mkTargetGroupsConfigProperty targetGroups
+  = TargetGroupsConfigProperty
+      {haddock_workaround_ = (), targetGroups = targetGroups}
+instance ToResourceProperties TargetGroupsConfigProperty where
+  toResourceProperties TargetGroupsConfigProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.TargetGroupsConfig",
+         supportsTags = Prelude.False,
+         properties = ["TargetGroups" JSON..= targetGroups]}
+instance JSON.ToJSON TargetGroupsConfigProperty where
+  toJSON TargetGroupsConfigProperty {..}
+    = JSON.object ["TargetGroups" JSON..= targetGroups]
+instance Property "TargetGroups" TargetGroupsConfigProperty where
+  type PropertyType "TargetGroups" TargetGroupsConfigProperty = [TargetGroupProperty]
+  set newValue TargetGroupsConfigProperty {..}
+    = TargetGroupsConfigProperty {targetGroups = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/TargetGroupsConfigProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/TargetGroupsConfigProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/TargetGroupsConfigProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.TargetGroupsConfigProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TargetGroupsConfigProperty :: Prelude.Type
+instance ToResourceProperties TargetGroupsConfigProperty
+instance Prelude.Eq TargetGroupsConfigProperty
+instance Prelude.Show TargetGroupsConfigProperty
+instance JSON.ToJSON TargetGroupsConfigProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/TotalLocalStorageGBRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/TotalLocalStorageGBRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/TotalLocalStorageGBRequestProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.SpotFleet.TotalLocalStorageGBRequestProperty (
+        TotalLocalStorageGBRequestProperty(..),
+        mkTotalLocalStorageGBRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TotalLocalStorageGBRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-totallocalstoragegbrequest.html>
+    TotalLocalStorageGBRequestProperty {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-totallocalstoragegbrequest.html#cfn-ec2-spotfleet-totallocalstoragegbrequest-max>
+                                        max :: (Prelude.Maybe (Value Prelude.Double)),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-totallocalstoragegbrequest.html#cfn-ec2-spotfleet-totallocalstoragegbrequest-min>
+                                        min :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTotalLocalStorageGBRequestProperty ::
+  TotalLocalStorageGBRequestProperty
+mkTotalLocalStorageGBRequestProperty
+  = TotalLocalStorageGBRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties TotalLocalStorageGBRequestProperty where
+  toResourceProperties TotalLocalStorageGBRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.TotalLocalStorageGBRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON TotalLocalStorageGBRequestProperty where
+  toJSON TotalLocalStorageGBRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" TotalLocalStorageGBRequestProperty where
+  type PropertyType "Max" TotalLocalStorageGBRequestProperty = Value Prelude.Double
+  set newValue TotalLocalStorageGBRequestProperty {..}
+    = TotalLocalStorageGBRequestProperty
+        {max = Prelude.pure newValue, ..}
+instance Property "Min" TotalLocalStorageGBRequestProperty where
+  type PropertyType "Min" TotalLocalStorageGBRequestProperty = Value Prelude.Double
+  set newValue TotalLocalStorageGBRequestProperty {..}
+    = TotalLocalStorageGBRequestProperty
+        {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/TotalLocalStorageGBRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/TotalLocalStorageGBRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/TotalLocalStorageGBRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.TotalLocalStorageGBRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TotalLocalStorageGBRequestProperty :: Prelude.Type
+instance ToResourceProperties TotalLocalStorageGBRequestProperty
+instance Prelude.Eq TotalLocalStorageGBRequestProperty
+instance Prelude.Show TotalLocalStorageGBRequestProperty
+instance JSON.ToJSON TotalLocalStorageGBRequestProperty
diff --git a/gen/Stratosphere/EC2/SpotFleet/VCpuCountRangeRequestProperty.hs b/gen/Stratosphere/EC2/SpotFleet/VCpuCountRangeRequestProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/VCpuCountRangeRequestProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.SpotFleet.VCpuCountRangeRequestProperty (
+        VCpuCountRangeRequestProperty(..), mkVCpuCountRangeRequestProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VCpuCountRangeRequestProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-vcpucountrangerequest.html>
+    VCpuCountRangeRequestProperty {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-vcpucountrangerequest.html#cfn-ec2-spotfleet-vcpucountrangerequest-max>
+                                   max :: (Prelude.Maybe (Value Prelude.Integer)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-spotfleet-vcpucountrangerequest.html#cfn-ec2-spotfleet-vcpucountrangerequest-min>
+                                   min :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVCpuCountRangeRequestProperty :: VCpuCountRangeRequestProperty
+mkVCpuCountRangeRequestProperty
+  = VCpuCountRangeRequestProperty
+      {haddock_workaround_ = (), max = Prelude.Nothing,
+       min = Prelude.Nothing}
+instance ToResourceProperties VCpuCountRangeRequestProperty where
+  toResourceProperties VCpuCountRangeRequestProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SpotFleet.VCpuCountRangeRequest",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Max" Prelude.<$> max,
+                            (JSON..=) "Min" Prelude.<$> min])}
+instance JSON.ToJSON VCpuCountRangeRequestProperty where
+  toJSON VCpuCountRangeRequestProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Max" Prelude.<$> max,
+               (JSON..=) "Min" Prelude.<$> min]))
+instance Property "Max" VCpuCountRangeRequestProperty where
+  type PropertyType "Max" VCpuCountRangeRequestProperty = Value Prelude.Integer
+  set newValue VCpuCountRangeRequestProperty {..}
+    = VCpuCountRangeRequestProperty {max = Prelude.pure newValue, ..}
+instance Property "Min" VCpuCountRangeRequestProperty where
+  type PropertyType "Min" VCpuCountRangeRequestProperty = Value Prelude.Integer
+  set newValue VCpuCountRangeRequestProperty {..}
+    = VCpuCountRangeRequestProperty {min = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/SpotFleet/VCpuCountRangeRequestProperty.hs-boot b/gen/Stratosphere/EC2/SpotFleet/VCpuCountRangeRequestProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SpotFleet/VCpuCountRangeRequestProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.SpotFleet.VCpuCountRangeRequestProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VCpuCountRangeRequestProperty :: Prelude.Type
+instance ToResourceProperties VCpuCountRangeRequestProperty
+instance Prelude.Eq VCpuCountRangeRequestProperty
+instance Prelude.Show VCpuCountRangeRequestProperty
+instance JSON.ToJSON VCpuCountRangeRequestProperty
diff --git a/gen/Stratosphere/EC2/Subnet.hs b/gen/Stratosphere/EC2/Subnet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Subnet.hs
@@ -0,0 +1,186 @@
+module Stratosphere.EC2.Subnet (
+        module Exports, Subnet(..), mkSubnet
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.Subnet.PrivateDnsNameOptionsOnLaunchProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Subnet
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html>
+    Subnet {haddock_workaround_ :: (),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-assignipv6addressoncreation>
+            assignIpv6AddressOnCreation :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-availabilityzone>
+            availabilityZone :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-availabilityzoneid>
+            availabilityZoneId :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-cidrblock>
+            cidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-enabledns64>
+            enableDns64 :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-enablelniatdeviceindex>
+            enableLniAtDeviceIndex :: (Prelude.Maybe (Value Prelude.Integer)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-ipv4ipampoolid>
+            ipv4IpamPoolId :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-ipv4netmasklength>
+            ipv4NetmaskLength :: (Prelude.Maybe (Value Prelude.Integer)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-ipv6cidrblock>
+            ipv6CidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-ipv6ipampoolid>
+            ipv6IpamPoolId :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-ipv6native>
+            ipv6Native :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-ipv6netmasklength>
+            ipv6NetmaskLength :: (Prelude.Maybe (Value Prelude.Integer)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-mappubliciponlaunch>
+            mapPublicIpOnLaunch :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-outpostarn>
+            outpostArn :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-privatednsnameoptionsonlaunch>
+            privateDnsNameOptionsOnLaunch :: (Prelude.Maybe PrivateDnsNameOptionsOnLaunchProperty),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-tags>
+            tags :: (Prelude.Maybe [Tag]),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnet.html#cfn-ec2-subnet-vpcid>
+            vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubnet :: Value Prelude.Text -> Subnet
+mkSubnet vpcId
+  = Subnet
+      {haddock_workaround_ = (), vpcId = vpcId,
+       assignIpv6AddressOnCreation = Prelude.Nothing,
+       availabilityZone = Prelude.Nothing,
+       availabilityZoneId = Prelude.Nothing, cidrBlock = Prelude.Nothing,
+       enableDns64 = Prelude.Nothing,
+       enableLniAtDeviceIndex = Prelude.Nothing,
+       ipv4IpamPoolId = Prelude.Nothing,
+       ipv4NetmaskLength = Prelude.Nothing,
+       ipv6CidrBlock = Prelude.Nothing, ipv6IpamPoolId = Prelude.Nothing,
+       ipv6Native = Prelude.Nothing, ipv6NetmaskLength = Prelude.Nothing,
+       mapPublicIpOnLaunch = Prelude.Nothing,
+       outpostArn = Prelude.Nothing,
+       privateDnsNameOptionsOnLaunch = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties Subnet where
+  toResourceProperties Subnet {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Subnet", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AssignIpv6AddressOnCreation"
+                                 Prelude.<$> assignIpv6AddressOnCreation,
+                               (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                               (JSON..=) "AvailabilityZoneId" Prelude.<$> availabilityZoneId,
+                               (JSON..=) "CidrBlock" Prelude.<$> cidrBlock,
+                               (JSON..=) "EnableDns64" Prelude.<$> enableDns64,
+                               (JSON..=) "EnableLniAtDeviceIndex"
+                                 Prelude.<$> enableLniAtDeviceIndex,
+                               (JSON..=) "Ipv4IpamPoolId" Prelude.<$> ipv4IpamPoolId,
+                               (JSON..=) "Ipv4NetmaskLength" Prelude.<$> ipv4NetmaskLength,
+                               (JSON..=) "Ipv6CidrBlock" Prelude.<$> ipv6CidrBlock,
+                               (JSON..=) "Ipv6IpamPoolId" Prelude.<$> ipv6IpamPoolId,
+                               (JSON..=) "Ipv6Native" Prelude.<$> ipv6Native,
+                               (JSON..=) "Ipv6NetmaskLength" Prelude.<$> ipv6NetmaskLength,
+                               (JSON..=) "MapPublicIpOnLaunch" Prelude.<$> mapPublicIpOnLaunch,
+                               (JSON..=) "OutpostArn" Prelude.<$> outpostArn,
+                               (JSON..=) "PrivateDnsNameOptionsOnLaunch"
+                                 Prelude.<$> privateDnsNameOptionsOnLaunch,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Subnet where
+  toJSON Subnet {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcId" JSON..= vpcId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AssignIpv6AddressOnCreation"
+                    Prelude.<$> assignIpv6AddressOnCreation,
+                  (JSON..=) "AvailabilityZone" Prelude.<$> availabilityZone,
+                  (JSON..=) "AvailabilityZoneId" Prelude.<$> availabilityZoneId,
+                  (JSON..=) "CidrBlock" Prelude.<$> cidrBlock,
+                  (JSON..=) "EnableDns64" Prelude.<$> enableDns64,
+                  (JSON..=) "EnableLniAtDeviceIndex"
+                    Prelude.<$> enableLniAtDeviceIndex,
+                  (JSON..=) "Ipv4IpamPoolId" Prelude.<$> ipv4IpamPoolId,
+                  (JSON..=) "Ipv4NetmaskLength" Prelude.<$> ipv4NetmaskLength,
+                  (JSON..=) "Ipv6CidrBlock" Prelude.<$> ipv6CidrBlock,
+                  (JSON..=) "Ipv6IpamPoolId" Prelude.<$> ipv6IpamPoolId,
+                  (JSON..=) "Ipv6Native" Prelude.<$> ipv6Native,
+                  (JSON..=) "Ipv6NetmaskLength" Prelude.<$> ipv6NetmaskLength,
+                  (JSON..=) "MapPublicIpOnLaunch" Prelude.<$> mapPublicIpOnLaunch,
+                  (JSON..=) "OutpostArn" Prelude.<$> outpostArn,
+                  (JSON..=) "PrivateDnsNameOptionsOnLaunch"
+                    Prelude.<$> privateDnsNameOptionsOnLaunch,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AssignIpv6AddressOnCreation" Subnet where
+  type PropertyType "AssignIpv6AddressOnCreation" Subnet = Value Prelude.Bool
+  set newValue Subnet {..}
+    = Subnet {assignIpv6AddressOnCreation = Prelude.pure newValue, ..}
+instance Property "AvailabilityZone" Subnet where
+  type PropertyType "AvailabilityZone" Subnet = Value Prelude.Text
+  set newValue Subnet {..}
+    = Subnet {availabilityZone = Prelude.pure newValue, ..}
+instance Property "AvailabilityZoneId" Subnet where
+  type PropertyType "AvailabilityZoneId" Subnet = Value Prelude.Text
+  set newValue Subnet {..}
+    = Subnet {availabilityZoneId = Prelude.pure newValue, ..}
+instance Property "CidrBlock" Subnet where
+  type PropertyType "CidrBlock" Subnet = Value Prelude.Text
+  set newValue Subnet {..}
+    = Subnet {cidrBlock = Prelude.pure newValue, ..}
+instance Property "EnableDns64" Subnet where
+  type PropertyType "EnableDns64" Subnet = Value Prelude.Bool
+  set newValue Subnet {..}
+    = Subnet {enableDns64 = Prelude.pure newValue, ..}
+instance Property "EnableLniAtDeviceIndex" Subnet where
+  type PropertyType "EnableLniAtDeviceIndex" Subnet = Value Prelude.Integer
+  set newValue Subnet {..}
+    = Subnet {enableLniAtDeviceIndex = Prelude.pure newValue, ..}
+instance Property "Ipv4IpamPoolId" Subnet where
+  type PropertyType "Ipv4IpamPoolId" Subnet = Value Prelude.Text
+  set newValue Subnet {..}
+    = Subnet {ipv4IpamPoolId = Prelude.pure newValue, ..}
+instance Property "Ipv4NetmaskLength" Subnet where
+  type PropertyType "Ipv4NetmaskLength" Subnet = Value Prelude.Integer
+  set newValue Subnet {..}
+    = Subnet {ipv4NetmaskLength = Prelude.pure newValue, ..}
+instance Property "Ipv6CidrBlock" Subnet where
+  type PropertyType "Ipv6CidrBlock" Subnet = Value Prelude.Text
+  set newValue Subnet {..}
+    = Subnet {ipv6CidrBlock = Prelude.pure newValue, ..}
+instance Property "Ipv6IpamPoolId" Subnet where
+  type PropertyType "Ipv6IpamPoolId" Subnet = Value Prelude.Text
+  set newValue Subnet {..}
+    = Subnet {ipv6IpamPoolId = Prelude.pure newValue, ..}
+instance Property "Ipv6Native" Subnet where
+  type PropertyType "Ipv6Native" Subnet = Value Prelude.Bool
+  set newValue Subnet {..}
+    = Subnet {ipv6Native = Prelude.pure newValue, ..}
+instance Property "Ipv6NetmaskLength" Subnet where
+  type PropertyType "Ipv6NetmaskLength" Subnet = Value Prelude.Integer
+  set newValue Subnet {..}
+    = Subnet {ipv6NetmaskLength = Prelude.pure newValue, ..}
+instance Property "MapPublicIpOnLaunch" Subnet where
+  type PropertyType "MapPublicIpOnLaunch" Subnet = Value Prelude.Bool
+  set newValue Subnet {..}
+    = Subnet {mapPublicIpOnLaunch = Prelude.pure newValue, ..}
+instance Property "OutpostArn" Subnet where
+  type PropertyType "OutpostArn" Subnet = Value Prelude.Text
+  set newValue Subnet {..}
+    = Subnet {outpostArn = Prelude.pure newValue, ..}
+instance Property "PrivateDnsNameOptionsOnLaunch" Subnet where
+  type PropertyType "PrivateDnsNameOptionsOnLaunch" Subnet = PrivateDnsNameOptionsOnLaunchProperty
+  set newValue Subnet {..}
+    = Subnet
+        {privateDnsNameOptionsOnLaunch = Prelude.pure newValue, ..}
+instance Property "Tags" Subnet where
+  type PropertyType "Tags" Subnet = [Tag]
+  set newValue Subnet {..}
+    = Subnet {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" Subnet where
+  type PropertyType "VpcId" Subnet = Value Prelude.Text
+  set newValue Subnet {..} = Subnet {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/Subnet/BlockPublicAccessStatesProperty.hs b/gen/Stratosphere/EC2/Subnet/BlockPublicAccessStatesProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Subnet/BlockPublicAccessStatesProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.EC2.Subnet.BlockPublicAccessStatesProperty (
+        BlockPublicAccessStatesProperty(..),
+        mkBlockPublicAccessStatesProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data BlockPublicAccessStatesProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-blockpublicaccessstates.html>
+    BlockPublicAccessStatesProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-blockpublicaccessstates.html#cfn-ec2-subnet-blockpublicaccessstates-internetgatewayblockmode>
+                                     internetGatewayBlockMode :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkBlockPublicAccessStatesProperty ::
+  BlockPublicAccessStatesProperty
+mkBlockPublicAccessStatesProperty
+  = BlockPublicAccessStatesProperty
+      {haddock_workaround_ = (),
+       internetGatewayBlockMode = Prelude.Nothing}
+instance ToResourceProperties BlockPublicAccessStatesProperty where
+  toResourceProperties BlockPublicAccessStatesProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Subnet.BlockPublicAccessStates",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "InternetGatewayBlockMode"
+                              Prelude.<$> internetGatewayBlockMode])}
+instance JSON.ToJSON BlockPublicAccessStatesProperty where
+  toJSON BlockPublicAccessStatesProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "InternetGatewayBlockMode"
+                 Prelude.<$> internetGatewayBlockMode]))
+instance Property "InternetGatewayBlockMode" BlockPublicAccessStatesProperty where
+  type PropertyType "InternetGatewayBlockMode" BlockPublicAccessStatesProperty = Value Prelude.Text
+  set newValue BlockPublicAccessStatesProperty {..}
+    = BlockPublicAccessStatesProperty
+        {internetGatewayBlockMode = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Subnet/BlockPublicAccessStatesProperty.hs-boot b/gen/Stratosphere/EC2/Subnet/BlockPublicAccessStatesProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Subnet/BlockPublicAccessStatesProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Subnet.BlockPublicAccessStatesProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data BlockPublicAccessStatesProperty :: Prelude.Type
+instance ToResourceProperties BlockPublicAccessStatesProperty
+instance Prelude.Eq BlockPublicAccessStatesProperty
+instance Prelude.Show BlockPublicAccessStatesProperty
+instance JSON.ToJSON BlockPublicAccessStatesProperty
diff --git a/gen/Stratosphere/EC2/Subnet/PrivateDnsNameOptionsOnLaunchProperty.hs b/gen/Stratosphere/EC2/Subnet/PrivateDnsNameOptionsOnLaunchProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Subnet/PrivateDnsNameOptionsOnLaunchProperty.hs
@@ -0,0 +1,64 @@
+module Stratosphere.EC2.Subnet.PrivateDnsNameOptionsOnLaunchProperty (
+        PrivateDnsNameOptionsOnLaunchProperty(..),
+        mkPrivateDnsNameOptionsOnLaunchProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PrivateDnsNameOptionsOnLaunchProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-privatednsnameoptionsonlaunch.html>
+    PrivateDnsNameOptionsOnLaunchProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-privatednsnameoptionsonlaunch.html#cfn-ec2-subnet-privatednsnameoptionsonlaunch-enableresourcenamednsaaaarecord>
+                                           enableResourceNameDnsAAAARecord :: (Prelude.Maybe (Value Prelude.Bool)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-privatednsnameoptionsonlaunch.html#cfn-ec2-subnet-privatednsnameoptionsonlaunch-enableresourcenamednsarecord>
+                                           enableResourceNameDnsARecord :: (Prelude.Maybe (Value Prelude.Bool)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-subnet-privatednsnameoptionsonlaunch.html#cfn-ec2-subnet-privatednsnameoptionsonlaunch-hostnametype>
+                                           hostnameType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPrivateDnsNameOptionsOnLaunchProperty ::
+  PrivateDnsNameOptionsOnLaunchProperty
+mkPrivateDnsNameOptionsOnLaunchProperty
+  = PrivateDnsNameOptionsOnLaunchProperty
+      {haddock_workaround_ = (),
+       enableResourceNameDnsAAAARecord = Prelude.Nothing,
+       enableResourceNameDnsARecord = Prelude.Nothing,
+       hostnameType = Prelude.Nothing}
+instance ToResourceProperties PrivateDnsNameOptionsOnLaunchProperty where
+  toResourceProperties PrivateDnsNameOptionsOnLaunchProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Subnet.PrivateDnsNameOptionsOnLaunch",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "EnableResourceNameDnsAAAARecord"
+                              Prelude.<$> enableResourceNameDnsAAAARecord,
+                            (JSON..=) "EnableResourceNameDnsARecord"
+                              Prelude.<$> enableResourceNameDnsARecord,
+                            (JSON..=) "HostnameType" Prelude.<$> hostnameType])}
+instance JSON.ToJSON PrivateDnsNameOptionsOnLaunchProperty where
+  toJSON PrivateDnsNameOptionsOnLaunchProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "EnableResourceNameDnsAAAARecord"
+                 Prelude.<$> enableResourceNameDnsAAAARecord,
+               (JSON..=) "EnableResourceNameDnsARecord"
+                 Prelude.<$> enableResourceNameDnsARecord,
+               (JSON..=) "HostnameType" Prelude.<$> hostnameType]))
+instance Property "EnableResourceNameDnsAAAARecord" PrivateDnsNameOptionsOnLaunchProperty where
+  type PropertyType "EnableResourceNameDnsAAAARecord" PrivateDnsNameOptionsOnLaunchProperty = Value Prelude.Bool
+  set newValue PrivateDnsNameOptionsOnLaunchProperty {..}
+    = PrivateDnsNameOptionsOnLaunchProperty
+        {enableResourceNameDnsAAAARecord = Prelude.pure newValue, ..}
+instance Property "EnableResourceNameDnsARecord" PrivateDnsNameOptionsOnLaunchProperty where
+  type PropertyType "EnableResourceNameDnsARecord" PrivateDnsNameOptionsOnLaunchProperty = Value Prelude.Bool
+  set newValue PrivateDnsNameOptionsOnLaunchProperty {..}
+    = PrivateDnsNameOptionsOnLaunchProperty
+        {enableResourceNameDnsARecord = Prelude.pure newValue, ..}
+instance Property "HostnameType" PrivateDnsNameOptionsOnLaunchProperty where
+  type PropertyType "HostnameType" PrivateDnsNameOptionsOnLaunchProperty = Value Prelude.Text
+  set newValue PrivateDnsNameOptionsOnLaunchProperty {..}
+    = PrivateDnsNameOptionsOnLaunchProperty
+        {hostnameType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/Subnet/PrivateDnsNameOptionsOnLaunchProperty.hs-boot b/gen/Stratosphere/EC2/Subnet/PrivateDnsNameOptionsOnLaunchProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Subnet/PrivateDnsNameOptionsOnLaunchProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.Subnet.PrivateDnsNameOptionsOnLaunchProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PrivateDnsNameOptionsOnLaunchProperty :: Prelude.Type
+instance ToResourceProperties PrivateDnsNameOptionsOnLaunchProperty
+instance Prelude.Eq PrivateDnsNameOptionsOnLaunchProperty
+instance Prelude.Show PrivateDnsNameOptionsOnLaunchProperty
+instance JSON.ToJSON PrivateDnsNameOptionsOnLaunchProperty
diff --git a/gen/Stratosphere/EC2/SubnetCidrBlock.hs b/gen/Stratosphere/EC2/SubnetCidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SubnetCidrBlock.hs
@@ -0,0 +1,64 @@
+module Stratosphere.EC2.SubnetCidrBlock (
+        SubnetCidrBlock(..), mkSubnetCidrBlock
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SubnetCidrBlock
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html>
+    SubnetCidrBlock {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html#cfn-ec2-subnetcidrblock-ipv6cidrblock>
+                     ipv6CidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html#cfn-ec2-subnetcidrblock-ipv6ipampoolid>
+                     ipv6IpamPoolId :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html#cfn-ec2-subnetcidrblock-ipv6netmasklength>
+                     ipv6NetmaskLength :: (Prelude.Maybe (Value Prelude.Integer)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetcidrblock.html#cfn-ec2-subnetcidrblock-subnetid>
+                     subnetId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubnetCidrBlock :: Value Prelude.Text -> SubnetCidrBlock
+mkSubnetCidrBlock subnetId
+  = SubnetCidrBlock
+      {haddock_workaround_ = (), subnetId = subnetId,
+       ipv6CidrBlock = Prelude.Nothing, ipv6IpamPoolId = Prelude.Nothing,
+       ipv6NetmaskLength = Prelude.Nothing}
+instance ToResourceProperties SubnetCidrBlock where
+  toResourceProperties SubnetCidrBlock {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SubnetCidrBlock",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SubnetId" JSON..= subnetId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Ipv6CidrBlock" Prelude.<$> ipv6CidrBlock,
+                               (JSON..=) "Ipv6IpamPoolId" Prelude.<$> ipv6IpamPoolId,
+                               (JSON..=) "Ipv6NetmaskLength" Prelude.<$> ipv6NetmaskLength]))}
+instance JSON.ToJSON SubnetCidrBlock where
+  toJSON SubnetCidrBlock {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SubnetId" JSON..= subnetId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Ipv6CidrBlock" Prelude.<$> ipv6CidrBlock,
+                  (JSON..=) "Ipv6IpamPoolId" Prelude.<$> ipv6IpamPoolId,
+                  (JSON..=) "Ipv6NetmaskLength" Prelude.<$> ipv6NetmaskLength])))
+instance Property "Ipv6CidrBlock" SubnetCidrBlock where
+  type PropertyType "Ipv6CidrBlock" SubnetCidrBlock = Value Prelude.Text
+  set newValue SubnetCidrBlock {..}
+    = SubnetCidrBlock {ipv6CidrBlock = Prelude.pure newValue, ..}
+instance Property "Ipv6IpamPoolId" SubnetCidrBlock where
+  type PropertyType "Ipv6IpamPoolId" SubnetCidrBlock = Value Prelude.Text
+  set newValue SubnetCidrBlock {..}
+    = SubnetCidrBlock {ipv6IpamPoolId = Prelude.pure newValue, ..}
+instance Property "Ipv6NetmaskLength" SubnetCidrBlock where
+  type PropertyType "Ipv6NetmaskLength" SubnetCidrBlock = Value Prelude.Integer
+  set newValue SubnetCidrBlock {..}
+    = SubnetCidrBlock {ipv6NetmaskLength = Prelude.pure newValue, ..}
+instance Property "SubnetId" SubnetCidrBlock where
+  type PropertyType "SubnetId" SubnetCidrBlock = Value Prelude.Text
+  set newValue SubnetCidrBlock {..}
+    = SubnetCidrBlock {subnetId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SubnetNetworkAclAssociation.hs b/gen/Stratosphere/EC2/SubnetNetworkAclAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SubnetNetworkAclAssociation.hs
@@ -0,0 +1,42 @@
+module Stratosphere.EC2.SubnetNetworkAclAssociation (
+        SubnetNetworkAclAssociation(..), mkSubnetNetworkAclAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SubnetNetworkAclAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetnetworkaclassociation.html>
+    SubnetNetworkAclAssociation {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetnetworkaclassociation.html#cfn-ec2-subnetnetworkaclassociation-networkaclid>
+                                 networkAclId :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetnetworkaclassociation.html#cfn-ec2-subnetnetworkaclassociation-subnetid>
+                                 subnetId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubnetNetworkAclAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> SubnetNetworkAclAssociation
+mkSubnetNetworkAclAssociation networkAclId subnetId
+  = SubnetNetworkAclAssociation
+      {haddock_workaround_ = (), networkAclId = networkAclId,
+       subnetId = subnetId}
+instance ToResourceProperties SubnetNetworkAclAssociation where
+  toResourceProperties SubnetNetworkAclAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SubnetNetworkAclAssociation",
+         supportsTags = Prelude.False,
+         properties = ["NetworkAclId" JSON..= networkAclId,
+                       "SubnetId" JSON..= subnetId]}
+instance JSON.ToJSON SubnetNetworkAclAssociation where
+  toJSON SubnetNetworkAclAssociation {..}
+    = JSON.object
+        ["NetworkAclId" JSON..= networkAclId, "SubnetId" JSON..= subnetId]
+instance Property "NetworkAclId" SubnetNetworkAclAssociation where
+  type PropertyType "NetworkAclId" SubnetNetworkAclAssociation = Value Prelude.Text
+  set newValue SubnetNetworkAclAssociation {..}
+    = SubnetNetworkAclAssociation {networkAclId = newValue, ..}
+instance Property "SubnetId" SubnetNetworkAclAssociation where
+  type PropertyType "SubnetId" SubnetNetworkAclAssociation = Value Prelude.Text
+  set newValue SubnetNetworkAclAssociation {..}
+    = SubnetNetworkAclAssociation {subnetId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/SubnetRouteTableAssociation.hs b/gen/Stratosphere/EC2/SubnetRouteTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/SubnetRouteTableAssociation.hs
@@ -0,0 +1,42 @@
+module Stratosphere.EC2.SubnetRouteTableAssociation (
+        SubnetRouteTableAssociation(..), mkSubnetRouteTableAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SubnetRouteTableAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetroutetableassociation.html>
+    SubnetRouteTableAssociation {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetroutetableassociation.html#cfn-ec2-subnetroutetableassociation-routetableid>
+                                 routeTableId :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-subnetroutetableassociation.html#cfn-ec2-subnetroutetableassociation-subnetid>
+                                 subnetId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSubnetRouteTableAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> SubnetRouteTableAssociation
+mkSubnetRouteTableAssociation routeTableId subnetId
+  = SubnetRouteTableAssociation
+      {haddock_workaround_ = (), routeTableId = routeTableId,
+       subnetId = subnetId}
+instance ToResourceProperties SubnetRouteTableAssociation where
+  toResourceProperties SubnetRouteTableAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::SubnetRouteTableAssociation",
+         supportsTags = Prelude.False,
+         properties = ["RouteTableId" JSON..= routeTableId,
+                       "SubnetId" JSON..= subnetId]}
+instance JSON.ToJSON SubnetRouteTableAssociation where
+  toJSON SubnetRouteTableAssociation {..}
+    = JSON.object
+        ["RouteTableId" JSON..= routeTableId, "SubnetId" JSON..= subnetId]
+instance Property "RouteTableId" SubnetRouteTableAssociation where
+  type PropertyType "RouteTableId" SubnetRouteTableAssociation = Value Prelude.Text
+  set newValue SubnetRouteTableAssociation {..}
+    = SubnetRouteTableAssociation {routeTableId = newValue, ..}
+instance Property "SubnetId" SubnetRouteTableAssociation where
+  type PropertyType "SubnetId" SubnetRouteTableAssociation = Value Prelude.Text
+  set newValue SubnetRouteTableAssociation {..}
+    = SubnetRouteTableAssociation {subnetId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TrafficMirrorFilter.hs b/gen/Stratosphere/EC2/TrafficMirrorFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TrafficMirrorFilter.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EC2.TrafficMirrorFilter (
+        TrafficMirrorFilter(..), mkTrafficMirrorFilter
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TrafficMirrorFilter
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilter.html>
+    TrafficMirrorFilter {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilter.html#cfn-ec2-trafficmirrorfilter-description>
+                         description :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilter.html#cfn-ec2-trafficmirrorfilter-networkservices>
+                         networkServices :: (Prelude.Maybe (ValueList Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilter.html#cfn-ec2-trafficmirrorfilter-tags>
+                         tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrafficMirrorFilter :: TrafficMirrorFilter
+mkTrafficMirrorFilter
+  = TrafficMirrorFilter
+      {haddock_workaround_ = (), description = Prelude.Nothing,
+       networkServices = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties TrafficMirrorFilter where
+  toResourceProperties TrafficMirrorFilter {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TrafficMirrorFilter",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "NetworkServices" Prelude.<$> networkServices,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON TrafficMirrorFilter where
+  toJSON TrafficMirrorFilter {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "NetworkServices" Prelude.<$> networkServices,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "Description" TrafficMirrorFilter where
+  type PropertyType "Description" TrafficMirrorFilter = Value Prelude.Text
+  set newValue TrafficMirrorFilter {..}
+    = TrafficMirrorFilter {description = Prelude.pure newValue, ..}
+instance Property "NetworkServices" TrafficMirrorFilter where
+  type PropertyType "NetworkServices" TrafficMirrorFilter = ValueList Prelude.Text
+  set newValue TrafficMirrorFilter {..}
+    = TrafficMirrorFilter {networkServices = Prelude.pure newValue, ..}
+instance Property "Tags" TrafficMirrorFilter where
+  type PropertyType "Tags" TrafficMirrorFilter = [Tag]
+  set newValue TrafficMirrorFilter {..}
+    = TrafficMirrorFilter {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TrafficMirrorFilterRule.hs b/gen/Stratosphere/EC2/TrafficMirrorFilterRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TrafficMirrorFilterRule.hs
@@ -0,0 +1,141 @@
+module Stratosphere.EC2.TrafficMirrorFilterRule (
+        module Exports, TrafficMirrorFilterRule(..),
+        mkTrafficMirrorFilterRule
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.TrafficMirrorFilterRule.TrafficMirrorPortRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TrafficMirrorFilterRule
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html>
+    TrafficMirrorFilterRule {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-description>
+                             description :: (Prelude.Maybe (Value Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-destinationcidrblock>
+                             destinationCidrBlock :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-destinationportrange>
+                             destinationPortRange :: (Prelude.Maybe TrafficMirrorPortRangeProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-protocol>
+                             protocol :: (Prelude.Maybe (Value Prelude.Integer)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-ruleaction>
+                             ruleAction :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-rulenumber>
+                             ruleNumber :: (Value Prelude.Integer),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-sourcecidrblock>
+                             sourceCidrBlock :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-sourceportrange>
+                             sourcePortRange :: (Prelude.Maybe TrafficMirrorPortRangeProperty),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-tags>
+                             tags :: (Prelude.Maybe [Tag]),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-trafficdirection>
+                             trafficDirection :: (Value Prelude.Text),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorfilterrule.html#cfn-ec2-trafficmirrorfilterrule-trafficmirrorfilterid>
+                             trafficMirrorFilterId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrafficMirrorFilterRule ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Integer
+        -> Value Prelude.Text
+           -> Value Prelude.Text
+              -> Value Prelude.Text -> TrafficMirrorFilterRule
+mkTrafficMirrorFilterRule
+  destinationCidrBlock
+  ruleAction
+  ruleNumber
+  sourceCidrBlock
+  trafficDirection
+  trafficMirrorFilterId
+  = TrafficMirrorFilterRule
+      {haddock_workaround_ = (),
+       destinationCidrBlock = destinationCidrBlock,
+       ruleAction = ruleAction, ruleNumber = ruleNumber,
+       sourceCidrBlock = sourceCidrBlock,
+       trafficDirection = trafficDirection,
+       trafficMirrorFilterId = trafficMirrorFilterId,
+       description = Prelude.Nothing,
+       destinationPortRange = Prelude.Nothing, protocol = Prelude.Nothing,
+       sourcePortRange = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties TrafficMirrorFilterRule where
+  toResourceProperties TrafficMirrorFilterRule {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TrafficMirrorFilterRule",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DestinationCidrBlock" JSON..= destinationCidrBlock,
+                            "RuleAction" JSON..= ruleAction, "RuleNumber" JSON..= ruleNumber,
+                            "SourceCidrBlock" JSON..= sourceCidrBlock,
+                            "TrafficDirection" JSON..= trafficDirection,
+                            "TrafficMirrorFilterId" JSON..= trafficMirrorFilterId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DestinationPortRange" Prelude.<$> destinationPortRange,
+                               (JSON..=) "Protocol" Prelude.<$> protocol,
+                               (JSON..=) "SourcePortRange" Prelude.<$> sourcePortRange,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TrafficMirrorFilterRule where
+  toJSON TrafficMirrorFilterRule {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DestinationCidrBlock" JSON..= destinationCidrBlock,
+               "RuleAction" JSON..= ruleAction, "RuleNumber" JSON..= ruleNumber,
+               "SourceCidrBlock" JSON..= sourceCidrBlock,
+               "TrafficDirection" JSON..= trafficDirection,
+               "TrafficMirrorFilterId" JSON..= trafficMirrorFilterId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DestinationPortRange" Prelude.<$> destinationPortRange,
+                  (JSON..=) "Protocol" Prelude.<$> protocol,
+                  (JSON..=) "SourcePortRange" Prelude.<$> sourcePortRange,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Description" TrafficMirrorFilterRule where
+  type PropertyType "Description" TrafficMirrorFilterRule = Value Prelude.Text
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule {description = Prelude.pure newValue, ..}
+instance Property "DestinationCidrBlock" TrafficMirrorFilterRule where
+  type PropertyType "DestinationCidrBlock" TrafficMirrorFilterRule = Value Prelude.Text
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule {destinationCidrBlock = newValue, ..}
+instance Property "DestinationPortRange" TrafficMirrorFilterRule where
+  type PropertyType "DestinationPortRange" TrafficMirrorFilterRule = TrafficMirrorPortRangeProperty
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule
+        {destinationPortRange = Prelude.pure newValue, ..}
+instance Property "Protocol" TrafficMirrorFilterRule where
+  type PropertyType "Protocol" TrafficMirrorFilterRule = Value Prelude.Integer
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule {protocol = Prelude.pure newValue, ..}
+instance Property "RuleAction" TrafficMirrorFilterRule where
+  type PropertyType "RuleAction" TrafficMirrorFilterRule = Value Prelude.Text
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule {ruleAction = newValue, ..}
+instance Property "RuleNumber" TrafficMirrorFilterRule where
+  type PropertyType "RuleNumber" TrafficMirrorFilterRule = Value Prelude.Integer
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule {ruleNumber = newValue, ..}
+instance Property "SourceCidrBlock" TrafficMirrorFilterRule where
+  type PropertyType "SourceCidrBlock" TrafficMirrorFilterRule = Value Prelude.Text
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule {sourceCidrBlock = newValue, ..}
+instance Property "SourcePortRange" TrafficMirrorFilterRule where
+  type PropertyType "SourcePortRange" TrafficMirrorFilterRule = TrafficMirrorPortRangeProperty
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule
+        {sourcePortRange = Prelude.pure newValue, ..}
+instance Property "Tags" TrafficMirrorFilterRule where
+  type PropertyType "Tags" TrafficMirrorFilterRule = [Tag]
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule {tags = Prelude.pure newValue, ..}
+instance Property "TrafficDirection" TrafficMirrorFilterRule where
+  type PropertyType "TrafficDirection" TrafficMirrorFilterRule = Value Prelude.Text
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule {trafficDirection = newValue, ..}
+instance Property "TrafficMirrorFilterId" TrafficMirrorFilterRule where
+  type PropertyType "TrafficMirrorFilterId" TrafficMirrorFilterRule = Value Prelude.Text
+  set newValue TrafficMirrorFilterRule {..}
+    = TrafficMirrorFilterRule {trafficMirrorFilterId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TrafficMirrorFilterRule/TrafficMirrorPortRangeProperty.hs b/gen/Stratosphere/EC2/TrafficMirrorFilterRule/TrafficMirrorPortRangeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TrafficMirrorFilterRule/TrafficMirrorPortRangeProperty.hs
@@ -0,0 +1,42 @@
+module Stratosphere.EC2.TrafficMirrorFilterRule.TrafficMirrorPortRangeProperty (
+        TrafficMirrorPortRangeProperty(..),
+        mkTrafficMirrorPortRangeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TrafficMirrorPortRangeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-trafficmirrorfilterrule-trafficmirrorportrange.html>
+    TrafficMirrorPortRangeProperty {haddock_workaround_ :: (),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-trafficmirrorfilterrule-trafficmirrorportrange.html#cfn-ec2-trafficmirrorfilterrule-trafficmirrorportrange-fromport>
+                                    fromPort :: (Value Prelude.Integer),
+                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-trafficmirrorfilterrule-trafficmirrorportrange.html#cfn-ec2-trafficmirrorfilterrule-trafficmirrorportrange-toport>
+                                    toPort :: (Value Prelude.Integer)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrafficMirrorPortRangeProperty ::
+  Value Prelude.Integer
+  -> Value Prelude.Integer -> TrafficMirrorPortRangeProperty
+mkTrafficMirrorPortRangeProperty fromPort toPort
+  = TrafficMirrorPortRangeProperty
+      {haddock_workaround_ = (), fromPort = fromPort, toPort = toPort}
+instance ToResourceProperties TrafficMirrorPortRangeProperty where
+  toResourceProperties TrafficMirrorPortRangeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TrafficMirrorFilterRule.TrafficMirrorPortRange",
+         supportsTags = Prelude.False,
+         properties = ["FromPort" JSON..= fromPort,
+                       "ToPort" JSON..= toPort]}
+instance JSON.ToJSON TrafficMirrorPortRangeProperty where
+  toJSON TrafficMirrorPortRangeProperty {..}
+    = JSON.object
+        ["FromPort" JSON..= fromPort, "ToPort" JSON..= toPort]
+instance Property "FromPort" TrafficMirrorPortRangeProperty where
+  type PropertyType "FromPort" TrafficMirrorPortRangeProperty = Value Prelude.Integer
+  set newValue TrafficMirrorPortRangeProperty {..}
+    = TrafficMirrorPortRangeProperty {fromPort = newValue, ..}
+instance Property "ToPort" TrafficMirrorPortRangeProperty where
+  type PropertyType "ToPort" TrafficMirrorPortRangeProperty = Value Prelude.Integer
+  set newValue TrafficMirrorPortRangeProperty {..}
+    = TrafficMirrorPortRangeProperty {toPort = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TrafficMirrorFilterRule/TrafficMirrorPortRangeProperty.hs-boot b/gen/Stratosphere/EC2/TrafficMirrorFilterRule/TrafficMirrorPortRangeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TrafficMirrorFilterRule/TrafficMirrorPortRangeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.TrafficMirrorFilterRule.TrafficMirrorPortRangeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TrafficMirrorPortRangeProperty :: Prelude.Type
+instance ToResourceProperties TrafficMirrorPortRangeProperty
+instance Prelude.Eq TrafficMirrorPortRangeProperty
+instance Prelude.Show TrafficMirrorPortRangeProperty
+instance JSON.ToJSON TrafficMirrorPortRangeProperty
diff --git a/gen/Stratosphere/EC2/TrafficMirrorSession.hs b/gen/Stratosphere/EC2/TrafficMirrorSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TrafficMirrorSession.hs
@@ -0,0 +1,117 @@
+module Stratosphere.EC2.TrafficMirrorSession (
+        TrafficMirrorSession(..), mkTrafficMirrorSession
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TrafficMirrorSession
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html>
+    TrafficMirrorSession {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html#cfn-ec2-trafficmirrorsession-description>
+                          description :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html#cfn-ec2-trafficmirrorsession-networkinterfaceid>
+                          networkInterfaceId :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html#cfn-ec2-trafficmirrorsession-ownerid>
+                          ownerId :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html#cfn-ec2-trafficmirrorsession-packetlength>
+                          packetLength :: (Prelude.Maybe (Value Prelude.Integer)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html#cfn-ec2-trafficmirrorsession-sessionnumber>
+                          sessionNumber :: (Value Prelude.Integer),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html#cfn-ec2-trafficmirrorsession-tags>
+                          tags :: (Prelude.Maybe [Tag]),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html#cfn-ec2-trafficmirrorsession-trafficmirrorfilterid>
+                          trafficMirrorFilterId :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html#cfn-ec2-trafficmirrorsession-trafficmirrortargetid>
+                          trafficMirrorTargetId :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrorsession.html#cfn-ec2-trafficmirrorsession-virtualnetworkid>
+                          virtualNetworkId :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrafficMirrorSession ::
+  Value Prelude.Text
+  -> Value Prelude.Integer
+     -> Value Prelude.Text -> Value Prelude.Text -> TrafficMirrorSession
+mkTrafficMirrorSession
+  networkInterfaceId
+  sessionNumber
+  trafficMirrorFilterId
+  trafficMirrorTargetId
+  = TrafficMirrorSession
+      {haddock_workaround_ = (), networkInterfaceId = networkInterfaceId,
+       sessionNumber = sessionNumber,
+       trafficMirrorFilterId = trafficMirrorFilterId,
+       trafficMirrorTargetId = trafficMirrorTargetId,
+       description = Prelude.Nothing, ownerId = Prelude.Nothing,
+       packetLength = Prelude.Nothing, tags = Prelude.Nothing,
+       virtualNetworkId = Prelude.Nothing}
+instance ToResourceProperties TrafficMirrorSession where
+  toResourceProperties TrafficMirrorSession {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TrafficMirrorSession",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["NetworkInterfaceId" JSON..= networkInterfaceId,
+                            "SessionNumber" JSON..= sessionNumber,
+                            "TrafficMirrorFilterId" JSON..= trafficMirrorFilterId,
+                            "TrafficMirrorTargetId" JSON..= trafficMirrorTargetId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "OwnerId" Prelude.<$> ownerId,
+                               (JSON..=) "PacketLength" Prelude.<$> packetLength,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "VirtualNetworkId" Prelude.<$> virtualNetworkId]))}
+instance JSON.ToJSON TrafficMirrorSession where
+  toJSON TrafficMirrorSession {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["NetworkInterfaceId" JSON..= networkInterfaceId,
+               "SessionNumber" JSON..= sessionNumber,
+               "TrafficMirrorFilterId" JSON..= trafficMirrorFilterId,
+               "TrafficMirrorTargetId" JSON..= trafficMirrorTargetId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "OwnerId" Prelude.<$> ownerId,
+                  (JSON..=) "PacketLength" Prelude.<$> packetLength,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "VirtualNetworkId" Prelude.<$> virtualNetworkId])))
+instance Property "Description" TrafficMirrorSession where
+  type PropertyType "Description" TrafficMirrorSession = Value Prelude.Text
+  set newValue TrafficMirrorSession {..}
+    = TrafficMirrorSession {description = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceId" TrafficMirrorSession where
+  type PropertyType "NetworkInterfaceId" TrafficMirrorSession = Value Prelude.Text
+  set newValue TrafficMirrorSession {..}
+    = TrafficMirrorSession {networkInterfaceId = newValue, ..}
+instance Property "OwnerId" TrafficMirrorSession where
+  type PropertyType "OwnerId" TrafficMirrorSession = Value Prelude.Text
+  set newValue TrafficMirrorSession {..}
+    = TrafficMirrorSession {ownerId = Prelude.pure newValue, ..}
+instance Property "PacketLength" TrafficMirrorSession where
+  type PropertyType "PacketLength" TrafficMirrorSession = Value Prelude.Integer
+  set newValue TrafficMirrorSession {..}
+    = TrafficMirrorSession {packetLength = Prelude.pure newValue, ..}
+instance Property "SessionNumber" TrafficMirrorSession where
+  type PropertyType "SessionNumber" TrafficMirrorSession = Value Prelude.Integer
+  set newValue TrafficMirrorSession {..}
+    = TrafficMirrorSession {sessionNumber = newValue, ..}
+instance Property "Tags" TrafficMirrorSession where
+  type PropertyType "Tags" TrafficMirrorSession = [Tag]
+  set newValue TrafficMirrorSession {..}
+    = TrafficMirrorSession {tags = Prelude.pure newValue, ..}
+instance Property "TrafficMirrorFilterId" TrafficMirrorSession where
+  type PropertyType "TrafficMirrorFilterId" TrafficMirrorSession = Value Prelude.Text
+  set newValue TrafficMirrorSession {..}
+    = TrafficMirrorSession {trafficMirrorFilterId = newValue, ..}
+instance Property "TrafficMirrorTargetId" TrafficMirrorSession where
+  type PropertyType "TrafficMirrorTargetId" TrafficMirrorSession = Value Prelude.Text
+  set newValue TrafficMirrorSession {..}
+    = TrafficMirrorSession {trafficMirrorTargetId = newValue, ..}
+instance Property "VirtualNetworkId" TrafficMirrorSession where
+  type PropertyType "VirtualNetworkId" TrafficMirrorSession = Value Prelude.Integer
+  set newValue TrafficMirrorSession {..}
+    = TrafficMirrorSession
+        {virtualNetworkId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TrafficMirrorTarget.hs b/gen/Stratosphere/EC2/TrafficMirrorTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TrafficMirrorTarget.hs
@@ -0,0 +1,79 @@
+module Stratosphere.EC2.TrafficMirrorTarget (
+        TrafficMirrorTarget(..), mkTrafficMirrorTarget
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TrafficMirrorTarget
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrortarget.html>
+    TrafficMirrorTarget {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrortarget.html#cfn-ec2-trafficmirrortarget-description>
+                         description :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrortarget.html#cfn-ec2-trafficmirrortarget-gatewayloadbalancerendpointid>
+                         gatewayLoadBalancerEndpointId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrortarget.html#cfn-ec2-trafficmirrortarget-networkinterfaceid>
+                         networkInterfaceId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrortarget.html#cfn-ec2-trafficmirrortarget-networkloadbalancerarn>
+                         networkLoadBalancerArn :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-trafficmirrortarget.html#cfn-ec2-trafficmirrortarget-tags>
+                         tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTrafficMirrorTarget :: TrafficMirrorTarget
+mkTrafficMirrorTarget
+  = TrafficMirrorTarget
+      {haddock_workaround_ = (), description = Prelude.Nothing,
+       gatewayLoadBalancerEndpointId = Prelude.Nothing,
+       networkInterfaceId = Prelude.Nothing,
+       networkLoadBalancerArn = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties TrafficMirrorTarget where
+  toResourceProperties TrafficMirrorTarget {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TrafficMirrorTarget",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "GatewayLoadBalancerEndpointId"
+                              Prelude.<$> gatewayLoadBalancerEndpointId,
+                            (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                            (JSON..=) "NetworkLoadBalancerArn"
+                              Prelude.<$> networkLoadBalancerArn,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON TrafficMirrorTarget where
+  toJSON TrafficMirrorTarget {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "GatewayLoadBalancerEndpointId"
+                 Prelude.<$> gatewayLoadBalancerEndpointId,
+               (JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+               (JSON..=) "NetworkLoadBalancerArn"
+                 Prelude.<$> networkLoadBalancerArn,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "Description" TrafficMirrorTarget where
+  type PropertyType "Description" TrafficMirrorTarget = Value Prelude.Text
+  set newValue TrafficMirrorTarget {..}
+    = TrafficMirrorTarget {description = Prelude.pure newValue, ..}
+instance Property "GatewayLoadBalancerEndpointId" TrafficMirrorTarget where
+  type PropertyType "GatewayLoadBalancerEndpointId" TrafficMirrorTarget = Value Prelude.Text
+  set newValue TrafficMirrorTarget {..}
+    = TrafficMirrorTarget
+        {gatewayLoadBalancerEndpointId = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceId" TrafficMirrorTarget where
+  type PropertyType "NetworkInterfaceId" TrafficMirrorTarget = Value Prelude.Text
+  set newValue TrafficMirrorTarget {..}
+    = TrafficMirrorTarget
+        {networkInterfaceId = Prelude.pure newValue, ..}
+instance Property "NetworkLoadBalancerArn" TrafficMirrorTarget where
+  type PropertyType "NetworkLoadBalancerArn" TrafficMirrorTarget = Value Prelude.Text
+  set newValue TrafficMirrorTarget {..}
+    = TrafficMirrorTarget
+        {networkLoadBalancerArn = Prelude.pure newValue, ..}
+instance Property "Tags" TrafficMirrorTarget where
+  type PropertyType "Tags" TrafficMirrorTarget = [Tag]
+  set newValue TrafficMirrorTarget {..}
+    = TrafficMirrorTarget {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGateway.hs b/gen/Stratosphere/EC2/TransitGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGateway.hs
@@ -0,0 +1,163 @@
+module Stratosphere.EC2.TransitGateway (
+        TransitGateway(..), mkTransitGateway
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TransitGateway
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html>
+    TransitGateway {haddock_workaround_ :: (),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-amazonsideasn>
+                    amazonSideAsn :: (Prelude.Maybe (Value Prelude.Integer)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-associationdefaultroutetableid>
+                    associationDefaultRouteTableId :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-autoacceptsharedattachments>
+                    autoAcceptSharedAttachments :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-defaultroutetableassociation>
+                    defaultRouteTableAssociation :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-defaultroutetablepropagation>
+                    defaultRouteTablePropagation :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-description>
+                    description :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-dnssupport>
+                    dnsSupport :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-multicastsupport>
+                    multicastSupport :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-propagationdefaultroutetableid>
+                    propagationDefaultRouteTableId :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-securitygroupreferencingsupport>
+                    securityGroupReferencingSupport :: (Prelude.Maybe (Value Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-tags>
+                    tags :: (Prelude.Maybe [Tag]),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-transitgatewaycidrblocks>
+                    transitGatewayCidrBlocks :: (Prelude.Maybe (ValueList Prelude.Text)),
+                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgateway.html#cfn-ec2-transitgateway-vpnecmpsupport>
+                    vpnEcmpSupport :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGateway :: TransitGateway
+mkTransitGateway
+  = TransitGateway
+      {haddock_workaround_ = (), amazonSideAsn = Prelude.Nothing,
+       associationDefaultRouteTableId = Prelude.Nothing,
+       autoAcceptSharedAttachments = Prelude.Nothing,
+       defaultRouteTableAssociation = Prelude.Nothing,
+       defaultRouteTablePropagation = Prelude.Nothing,
+       description = Prelude.Nothing, dnsSupport = Prelude.Nothing,
+       multicastSupport = Prelude.Nothing,
+       propagationDefaultRouteTableId = Prelude.Nothing,
+       securityGroupReferencingSupport = Prelude.Nothing,
+       tags = Prelude.Nothing, transitGatewayCidrBlocks = Prelude.Nothing,
+       vpnEcmpSupport = Prelude.Nothing}
+instance ToResourceProperties TransitGateway where
+  toResourceProperties TransitGateway {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGateway", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AmazonSideAsn" Prelude.<$> amazonSideAsn,
+                            (JSON..=) "AssociationDefaultRouteTableId"
+                              Prelude.<$> associationDefaultRouteTableId,
+                            (JSON..=) "AutoAcceptSharedAttachments"
+                              Prelude.<$> autoAcceptSharedAttachments,
+                            (JSON..=) "DefaultRouteTableAssociation"
+                              Prelude.<$> defaultRouteTableAssociation,
+                            (JSON..=) "DefaultRouteTablePropagation"
+                              Prelude.<$> defaultRouteTablePropagation,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "DnsSupport" Prelude.<$> dnsSupport,
+                            (JSON..=) "MulticastSupport" Prelude.<$> multicastSupport,
+                            (JSON..=) "PropagationDefaultRouteTableId"
+                              Prelude.<$> propagationDefaultRouteTableId,
+                            (JSON..=) "SecurityGroupReferencingSupport"
+                              Prelude.<$> securityGroupReferencingSupport,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "TransitGatewayCidrBlocks"
+                              Prelude.<$> transitGatewayCidrBlocks,
+                            (JSON..=) "VpnEcmpSupport" Prelude.<$> vpnEcmpSupport])}
+instance JSON.ToJSON TransitGateway where
+  toJSON TransitGateway {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AmazonSideAsn" Prelude.<$> amazonSideAsn,
+               (JSON..=) "AssociationDefaultRouteTableId"
+                 Prelude.<$> associationDefaultRouteTableId,
+               (JSON..=) "AutoAcceptSharedAttachments"
+                 Prelude.<$> autoAcceptSharedAttachments,
+               (JSON..=) "DefaultRouteTableAssociation"
+                 Prelude.<$> defaultRouteTableAssociation,
+               (JSON..=) "DefaultRouteTablePropagation"
+                 Prelude.<$> defaultRouteTablePropagation,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "DnsSupport" Prelude.<$> dnsSupport,
+               (JSON..=) "MulticastSupport" Prelude.<$> multicastSupport,
+               (JSON..=) "PropagationDefaultRouteTableId"
+                 Prelude.<$> propagationDefaultRouteTableId,
+               (JSON..=) "SecurityGroupReferencingSupport"
+                 Prelude.<$> securityGroupReferencingSupport,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "TransitGatewayCidrBlocks"
+                 Prelude.<$> transitGatewayCidrBlocks,
+               (JSON..=) "VpnEcmpSupport" Prelude.<$> vpnEcmpSupport]))
+instance Property "AmazonSideAsn" TransitGateway where
+  type PropertyType "AmazonSideAsn" TransitGateway = Value Prelude.Integer
+  set newValue TransitGateway {..}
+    = TransitGateway {amazonSideAsn = Prelude.pure newValue, ..}
+instance Property "AssociationDefaultRouteTableId" TransitGateway where
+  type PropertyType "AssociationDefaultRouteTableId" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway
+        {associationDefaultRouteTableId = Prelude.pure newValue, ..}
+instance Property "AutoAcceptSharedAttachments" TransitGateway where
+  type PropertyType "AutoAcceptSharedAttachments" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway
+        {autoAcceptSharedAttachments = Prelude.pure newValue, ..}
+instance Property "DefaultRouteTableAssociation" TransitGateway where
+  type PropertyType "DefaultRouteTableAssociation" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway
+        {defaultRouteTableAssociation = Prelude.pure newValue, ..}
+instance Property "DefaultRouteTablePropagation" TransitGateway where
+  type PropertyType "DefaultRouteTablePropagation" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway
+        {defaultRouteTablePropagation = Prelude.pure newValue, ..}
+instance Property "Description" TransitGateway where
+  type PropertyType "Description" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway {description = Prelude.pure newValue, ..}
+instance Property "DnsSupport" TransitGateway where
+  type PropertyType "DnsSupport" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway {dnsSupport = Prelude.pure newValue, ..}
+instance Property "MulticastSupport" TransitGateway where
+  type PropertyType "MulticastSupport" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway {multicastSupport = Prelude.pure newValue, ..}
+instance Property "PropagationDefaultRouteTableId" TransitGateway where
+  type PropertyType "PropagationDefaultRouteTableId" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway
+        {propagationDefaultRouteTableId = Prelude.pure newValue, ..}
+instance Property "SecurityGroupReferencingSupport" TransitGateway where
+  type PropertyType "SecurityGroupReferencingSupport" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway
+        {securityGroupReferencingSupport = Prelude.pure newValue, ..}
+instance Property "Tags" TransitGateway where
+  type PropertyType "Tags" TransitGateway = [Tag]
+  set newValue TransitGateway {..}
+    = TransitGateway {tags = Prelude.pure newValue, ..}
+instance Property "TransitGatewayCidrBlocks" TransitGateway where
+  type PropertyType "TransitGatewayCidrBlocks" TransitGateway = ValueList Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway
+        {transitGatewayCidrBlocks = Prelude.pure newValue, ..}
+instance Property "VpnEcmpSupport" TransitGateway where
+  type PropertyType "VpnEcmpSupport" TransitGateway = Value Prelude.Text
+  set newValue TransitGateway {..}
+    = TransitGateway {vpnEcmpSupport = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayAttachment.hs b/gen/Stratosphere/EC2/TransitGatewayAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayAttachment.hs
@@ -0,0 +1,76 @@
+module Stratosphere.EC2.TransitGatewayAttachment (
+        module Exports, TransitGatewayAttachment(..),
+        mkTransitGatewayAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.TransitGatewayAttachment.OptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TransitGatewayAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html>
+    TransitGatewayAttachment {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-options>
+                              options :: (Prelude.Maybe OptionsProperty),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-subnetids>
+                              subnetIds :: (ValueList Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-tags>
+                              tags :: (Prelude.Maybe [Tag]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-transitgatewayid>
+                              transitGatewayId :: (Value Prelude.Text),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayattachment.html#cfn-ec2-transitgatewayattachment-vpcid>
+                              vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayAttachment ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> TransitGatewayAttachment
+mkTransitGatewayAttachment subnetIds transitGatewayId vpcId
+  = TransitGatewayAttachment
+      {haddock_workaround_ = (), subnetIds = subnetIds,
+       transitGatewayId = transitGatewayId, vpcId = vpcId,
+       options = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayAttachment where
+  toResourceProperties TransitGatewayAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayAttachment",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SubnetIds" JSON..= subnetIds,
+                            "TransitGatewayId" JSON..= transitGatewayId, "VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Options" Prelude.<$> options,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TransitGatewayAttachment where
+  toJSON TransitGatewayAttachment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SubnetIds" JSON..= subnetIds,
+               "TransitGatewayId" JSON..= transitGatewayId, "VpcId" JSON..= vpcId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Options" Prelude.<$> options,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Options" TransitGatewayAttachment where
+  type PropertyType "Options" TransitGatewayAttachment = OptionsProperty
+  set newValue TransitGatewayAttachment {..}
+    = TransitGatewayAttachment {options = Prelude.pure newValue, ..}
+instance Property "SubnetIds" TransitGatewayAttachment where
+  type PropertyType "SubnetIds" TransitGatewayAttachment = ValueList Prelude.Text
+  set newValue TransitGatewayAttachment {..}
+    = TransitGatewayAttachment {subnetIds = newValue, ..}
+instance Property "Tags" TransitGatewayAttachment where
+  type PropertyType "Tags" TransitGatewayAttachment = [Tag]
+  set newValue TransitGatewayAttachment {..}
+    = TransitGatewayAttachment {tags = Prelude.pure newValue, ..}
+instance Property "TransitGatewayId" TransitGatewayAttachment where
+  type PropertyType "TransitGatewayId" TransitGatewayAttachment = Value Prelude.Text
+  set newValue TransitGatewayAttachment {..}
+    = TransitGatewayAttachment {transitGatewayId = newValue, ..}
+instance Property "VpcId" TransitGatewayAttachment where
+  type PropertyType "VpcId" TransitGatewayAttachment = Value Prelude.Text
+  set newValue TransitGatewayAttachment {..}
+    = TransitGatewayAttachment {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayAttachment/OptionsProperty.hs b/gen/Stratosphere/EC2/TransitGatewayAttachment/OptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayAttachment/OptionsProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.EC2.TransitGatewayAttachment.OptionsProperty (
+        OptionsProperty(..), mkOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayattachment-options.html>
+    OptionsProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayattachment-options.html#cfn-ec2-transitgatewayattachment-options-appliancemodesupport>
+                     applianceModeSupport :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayattachment-options.html#cfn-ec2-transitgatewayattachment-options-dnssupport>
+                     dnsSupport :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayattachment-options.html#cfn-ec2-transitgatewayattachment-options-ipv6support>
+                     ipv6Support :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayattachment-options.html#cfn-ec2-transitgatewayattachment-options-securitygroupreferencingsupport>
+                     securityGroupReferencingSupport :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOptionsProperty :: OptionsProperty
+mkOptionsProperty
+  = OptionsProperty
+      {haddock_workaround_ = (), applianceModeSupport = Prelude.Nothing,
+       dnsSupport = Prelude.Nothing, ipv6Support = Prelude.Nothing,
+       securityGroupReferencingSupport = Prelude.Nothing}
+instance ToResourceProperties OptionsProperty where
+  toResourceProperties OptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayAttachment.Options",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ApplianceModeSupport" Prelude.<$> applianceModeSupport,
+                            (JSON..=) "DnsSupport" Prelude.<$> dnsSupport,
+                            (JSON..=) "Ipv6Support" Prelude.<$> ipv6Support,
+                            (JSON..=) "SecurityGroupReferencingSupport"
+                              Prelude.<$> securityGroupReferencingSupport])}
+instance JSON.ToJSON OptionsProperty where
+  toJSON OptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ApplianceModeSupport" Prelude.<$> applianceModeSupport,
+               (JSON..=) "DnsSupport" Prelude.<$> dnsSupport,
+               (JSON..=) "Ipv6Support" Prelude.<$> ipv6Support,
+               (JSON..=) "SecurityGroupReferencingSupport"
+                 Prelude.<$> securityGroupReferencingSupport]))
+instance Property "ApplianceModeSupport" OptionsProperty where
+  type PropertyType "ApplianceModeSupport" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty
+        {applianceModeSupport = Prelude.pure newValue, ..}
+instance Property "DnsSupport" OptionsProperty where
+  type PropertyType "DnsSupport" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {dnsSupport = Prelude.pure newValue, ..}
+instance Property "Ipv6Support" OptionsProperty where
+  type PropertyType "Ipv6Support" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {ipv6Support = Prelude.pure newValue, ..}
+instance Property "SecurityGroupReferencingSupport" OptionsProperty where
+  type PropertyType "SecurityGroupReferencingSupport" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty
+        {securityGroupReferencingSupport = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayAttachment/OptionsProperty.hs-boot b/gen/Stratosphere/EC2/TransitGatewayAttachment/OptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayAttachment/OptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.TransitGatewayAttachment.OptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OptionsProperty :: Prelude.Type
+instance ToResourceProperties OptionsProperty
+instance Prelude.Eq OptionsProperty
+instance Prelude.Show OptionsProperty
+instance JSON.ToJSON OptionsProperty
diff --git a/gen/Stratosphere/EC2/TransitGatewayConnect.hs b/gen/Stratosphere/EC2/TransitGatewayConnect.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayConnect.hs
@@ -0,0 +1,61 @@
+module Stratosphere.EC2.TransitGatewayConnect (
+        module Exports, TransitGatewayConnect(..), mkTransitGatewayConnect
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.TransitGatewayConnect.TransitGatewayConnectOptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TransitGatewayConnect
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayconnect.html>
+    TransitGatewayConnect {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayconnect.html#cfn-ec2-transitgatewayconnect-options>
+                           options :: TransitGatewayConnectOptionsProperty,
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayconnect.html#cfn-ec2-transitgatewayconnect-tags>
+                           tags :: (Prelude.Maybe [Tag]),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayconnect.html#cfn-ec2-transitgatewayconnect-transporttransitgatewayattachmentid>
+                           transportTransitGatewayAttachmentId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayConnect ::
+  TransitGatewayConnectOptionsProperty
+  -> Value Prelude.Text -> TransitGatewayConnect
+mkTransitGatewayConnect options transportTransitGatewayAttachmentId
+  = TransitGatewayConnect
+      {haddock_workaround_ = (), options = options,
+       transportTransitGatewayAttachmentId = transportTransitGatewayAttachmentId,
+       tags = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayConnect where
+  toResourceProperties TransitGatewayConnect {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayConnect",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Options" JSON..= options,
+                            "TransportTransitGatewayAttachmentId"
+                              JSON..= transportTransitGatewayAttachmentId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TransitGatewayConnect where
+  toJSON TransitGatewayConnect {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Options" JSON..= options,
+               "TransportTransitGatewayAttachmentId"
+                 JSON..= transportTransitGatewayAttachmentId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Options" TransitGatewayConnect where
+  type PropertyType "Options" TransitGatewayConnect = TransitGatewayConnectOptionsProperty
+  set newValue TransitGatewayConnect {..}
+    = TransitGatewayConnect {options = newValue, ..}
+instance Property "Tags" TransitGatewayConnect where
+  type PropertyType "Tags" TransitGatewayConnect = [Tag]
+  set newValue TransitGatewayConnect {..}
+    = TransitGatewayConnect {tags = Prelude.pure newValue, ..}
+instance Property "TransportTransitGatewayAttachmentId" TransitGatewayConnect where
+  type PropertyType "TransportTransitGatewayAttachmentId" TransitGatewayConnect = Value Prelude.Text
+  set newValue TransitGatewayConnect {..}
+    = TransitGatewayConnect
+        {transportTransitGatewayAttachmentId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayConnect/TransitGatewayConnectOptionsProperty.hs b/gen/Stratosphere/EC2/TransitGatewayConnect/TransitGatewayConnectOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayConnect/TransitGatewayConnectOptionsProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.TransitGatewayConnect.TransitGatewayConnectOptionsProperty (
+        TransitGatewayConnectOptionsProperty(..),
+        mkTransitGatewayConnectOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayConnectOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnect-transitgatewayconnectoptions.html>
+    TransitGatewayConnectOptionsProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnect-transitgatewayconnectoptions.html#cfn-ec2-transitgatewayconnect-transitgatewayconnectoptions-protocol>
+                                          protocol :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayConnectOptionsProperty ::
+  TransitGatewayConnectOptionsProperty
+mkTransitGatewayConnectOptionsProperty
+  = TransitGatewayConnectOptionsProperty
+      {haddock_workaround_ = (), protocol = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayConnectOptionsProperty where
+  toResourceProperties TransitGatewayConnectOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayConnect.TransitGatewayConnectOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Protocol" Prelude.<$> protocol])}
+instance JSON.ToJSON TransitGatewayConnectOptionsProperty where
+  toJSON TransitGatewayConnectOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Protocol" Prelude.<$> protocol]))
+instance Property "Protocol" TransitGatewayConnectOptionsProperty where
+  type PropertyType "Protocol" TransitGatewayConnectOptionsProperty = Value Prelude.Text
+  set newValue TransitGatewayConnectOptionsProperty {..}
+    = TransitGatewayConnectOptionsProperty
+        {protocol = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayConnect/TransitGatewayConnectOptionsProperty.hs-boot b/gen/Stratosphere/EC2/TransitGatewayConnect/TransitGatewayConnectOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayConnect/TransitGatewayConnectOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.TransitGatewayConnect.TransitGatewayConnectOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TransitGatewayConnectOptionsProperty :: Prelude.Type
+instance ToResourceProperties TransitGatewayConnectOptionsProperty
+instance Prelude.Eq TransitGatewayConnectOptionsProperty
+instance Prelude.Show TransitGatewayConnectOptionsProperty
+instance JSON.ToJSON TransitGatewayConnectOptionsProperty
diff --git a/gen/Stratosphere/EC2/TransitGatewayConnectPeer.hs b/gen/Stratosphere/EC2/TransitGatewayConnectPeer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayConnectPeer.hs
@@ -0,0 +1,64 @@
+module Stratosphere.EC2.TransitGatewayConnectPeer (
+        module Exports, TransitGatewayConnectPeer(..),
+        mkTransitGatewayConnectPeer
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.TransitGatewayConnectPeer.TransitGatewayConnectPeerConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TransitGatewayConnectPeer
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayconnectpeer.html>
+    TransitGatewayConnectPeer {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayconnectpeer.html#cfn-ec2-transitgatewayconnectpeer-connectpeerconfiguration>
+                               connectPeerConfiguration :: TransitGatewayConnectPeerConfigurationProperty,
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayconnectpeer.html#cfn-ec2-transitgatewayconnectpeer-tags>
+                               tags :: (Prelude.Maybe [Tag]),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayconnectpeer.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayattachmentid>
+                               transitGatewayAttachmentId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayConnectPeer ::
+  TransitGatewayConnectPeerConfigurationProperty
+  -> Value Prelude.Text -> TransitGatewayConnectPeer
+mkTransitGatewayConnectPeer
+  connectPeerConfiguration
+  transitGatewayAttachmentId
+  = TransitGatewayConnectPeer
+      {haddock_workaround_ = (),
+       connectPeerConfiguration = connectPeerConfiguration,
+       transitGatewayAttachmentId = transitGatewayAttachmentId,
+       tags = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayConnectPeer where
+  toResourceProperties TransitGatewayConnectPeer {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayConnectPeer",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ConnectPeerConfiguration" JSON..= connectPeerConfiguration,
+                            "TransitGatewayAttachmentId" JSON..= transitGatewayAttachmentId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TransitGatewayConnectPeer where
+  toJSON TransitGatewayConnectPeer {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ConnectPeerConfiguration" JSON..= connectPeerConfiguration,
+               "TransitGatewayAttachmentId" JSON..= transitGatewayAttachmentId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ConnectPeerConfiguration" TransitGatewayConnectPeer where
+  type PropertyType "ConnectPeerConfiguration" TransitGatewayConnectPeer = TransitGatewayConnectPeerConfigurationProperty
+  set newValue TransitGatewayConnectPeer {..}
+    = TransitGatewayConnectPeer
+        {connectPeerConfiguration = newValue, ..}
+instance Property "Tags" TransitGatewayConnectPeer where
+  type PropertyType "Tags" TransitGatewayConnectPeer = [Tag]
+  set newValue TransitGatewayConnectPeer {..}
+    = TransitGatewayConnectPeer {tags = Prelude.pure newValue, ..}
+instance Property "TransitGatewayAttachmentId" TransitGatewayConnectPeer where
+  type PropertyType "TransitGatewayAttachmentId" TransitGatewayConnectPeer = Value Prelude.Text
+  set newValue TransitGatewayConnectPeer {..}
+    = TransitGatewayConnectPeer
+        {transitGatewayAttachmentId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayAttachmentBgpConfigurationProperty.hs b/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayAttachmentBgpConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayAttachmentBgpConfigurationProperty.hs
@@ -0,0 +1,81 @@
+module Stratosphere.EC2.TransitGatewayConnectPeer.TransitGatewayAttachmentBgpConfigurationProperty (
+        TransitGatewayAttachmentBgpConfigurationProperty(..),
+        mkTransitGatewayAttachmentBgpConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayAttachmentBgpConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration.html>
+    TransitGatewayAttachmentBgpConfigurationProperty {haddock_workaround_ :: (),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration-bgpstatus>
+                                                      bgpStatus :: (Prelude.Maybe (Value Prelude.Text)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration-peeraddress>
+                                                      peerAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration-peerasn>
+                                                      peerAsn :: (Prelude.Maybe (Value Prelude.Double)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration-transitgatewayaddress>
+                                                      transitGatewayAddress :: (Prelude.Maybe (Value Prelude.Text)),
+                                                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayattachmentbgpconfiguration-transitgatewayasn>
+                                                      transitGatewayAsn :: (Prelude.Maybe (Value Prelude.Double))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayAttachmentBgpConfigurationProperty ::
+  TransitGatewayAttachmentBgpConfigurationProperty
+mkTransitGatewayAttachmentBgpConfigurationProperty
+  = TransitGatewayAttachmentBgpConfigurationProperty
+      {haddock_workaround_ = (), bgpStatus = Prelude.Nothing,
+       peerAddress = Prelude.Nothing, peerAsn = Prelude.Nothing,
+       transitGatewayAddress = Prelude.Nothing,
+       transitGatewayAsn = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayAttachmentBgpConfigurationProperty where
+  toResourceProperties
+    TransitGatewayAttachmentBgpConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayConnectPeer.TransitGatewayAttachmentBgpConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BgpStatus" Prelude.<$> bgpStatus,
+                            (JSON..=) "PeerAddress" Prelude.<$> peerAddress,
+                            (JSON..=) "PeerAsn" Prelude.<$> peerAsn,
+                            (JSON..=) "TransitGatewayAddress"
+                              Prelude.<$> transitGatewayAddress,
+                            (JSON..=) "TransitGatewayAsn" Prelude.<$> transitGatewayAsn])}
+instance JSON.ToJSON TransitGatewayAttachmentBgpConfigurationProperty where
+  toJSON TransitGatewayAttachmentBgpConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BgpStatus" Prelude.<$> bgpStatus,
+               (JSON..=) "PeerAddress" Prelude.<$> peerAddress,
+               (JSON..=) "PeerAsn" Prelude.<$> peerAsn,
+               (JSON..=) "TransitGatewayAddress"
+                 Prelude.<$> transitGatewayAddress,
+               (JSON..=) "TransitGatewayAsn" Prelude.<$> transitGatewayAsn]))
+instance Property "BgpStatus" TransitGatewayAttachmentBgpConfigurationProperty where
+  type PropertyType "BgpStatus" TransitGatewayAttachmentBgpConfigurationProperty = Value Prelude.Text
+  set newValue TransitGatewayAttachmentBgpConfigurationProperty {..}
+    = TransitGatewayAttachmentBgpConfigurationProperty
+        {bgpStatus = Prelude.pure newValue, ..}
+instance Property "PeerAddress" TransitGatewayAttachmentBgpConfigurationProperty where
+  type PropertyType "PeerAddress" TransitGatewayAttachmentBgpConfigurationProperty = Value Prelude.Text
+  set newValue TransitGatewayAttachmentBgpConfigurationProperty {..}
+    = TransitGatewayAttachmentBgpConfigurationProperty
+        {peerAddress = Prelude.pure newValue, ..}
+instance Property "PeerAsn" TransitGatewayAttachmentBgpConfigurationProperty where
+  type PropertyType "PeerAsn" TransitGatewayAttachmentBgpConfigurationProperty = Value Prelude.Double
+  set newValue TransitGatewayAttachmentBgpConfigurationProperty {..}
+    = TransitGatewayAttachmentBgpConfigurationProperty
+        {peerAsn = Prelude.pure newValue, ..}
+instance Property "TransitGatewayAddress" TransitGatewayAttachmentBgpConfigurationProperty where
+  type PropertyType "TransitGatewayAddress" TransitGatewayAttachmentBgpConfigurationProperty = Value Prelude.Text
+  set newValue TransitGatewayAttachmentBgpConfigurationProperty {..}
+    = TransitGatewayAttachmentBgpConfigurationProperty
+        {transitGatewayAddress = Prelude.pure newValue, ..}
+instance Property "TransitGatewayAsn" TransitGatewayAttachmentBgpConfigurationProperty where
+  type PropertyType "TransitGatewayAsn" TransitGatewayAttachmentBgpConfigurationProperty = Value Prelude.Double
+  set newValue TransitGatewayAttachmentBgpConfigurationProperty {..}
+    = TransitGatewayAttachmentBgpConfigurationProperty
+        {transitGatewayAsn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayAttachmentBgpConfigurationProperty.hs-boot b/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayAttachmentBgpConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayAttachmentBgpConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.TransitGatewayConnectPeer.TransitGatewayAttachmentBgpConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TransitGatewayAttachmentBgpConfigurationProperty :: Prelude.Type
+instance ToResourceProperties TransitGatewayAttachmentBgpConfigurationProperty
+instance Prelude.Eq TransitGatewayAttachmentBgpConfigurationProperty
+instance Prelude.Show TransitGatewayAttachmentBgpConfigurationProperty
+instance JSON.ToJSON TransitGatewayAttachmentBgpConfigurationProperty
diff --git a/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayConnectPeerConfigurationProperty.hs b/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayConnectPeerConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayConnectPeerConfigurationProperty.hs
@@ -0,0 +1,88 @@
+module Stratosphere.EC2.TransitGatewayConnectPeer.TransitGatewayConnectPeerConfigurationProperty (
+        module Exports, TransitGatewayConnectPeerConfigurationProperty(..),
+        mkTransitGatewayConnectPeerConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.TransitGatewayConnectPeer.TransitGatewayAttachmentBgpConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayConnectPeerConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration.html>
+    TransitGatewayConnectPeerConfigurationProperty {haddock_workaround_ :: (),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration-bgpconfigurations>
+                                                    bgpConfigurations :: (Prelude.Maybe [TransitGatewayAttachmentBgpConfigurationProperty]),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration-insidecidrblocks>
+                                                    insideCidrBlocks :: (ValueList Prelude.Text),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration-peeraddress>
+                                                    peerAddress :: (Value Prelude.Text),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration-protocol>
+                                                    protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                                                    -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration.html#cfn-ec2-transitgatewayconnectpeer-transitgatewayconnectpeerconfiguration-transitgatewayaddress>
+                                                    transitGatewayAddress :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayConnectPeerConfigurationProperty ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text
+     -> TransitGatewayConnectPeerConfigurationProperty
+mkTransitGatewayConnectPeerConfigurationProperty
+  insideCidrBlocks
+  peerAddress
+  = TransitGatewayConnectPeerConfigurationProperty
+      {haddock_workaround_ = (), insideCidrBlocks = insideCidrBlocks,
+       peerAddress = peerAddress, bgpConfigurations = Prelude.Nothing,
+       protocol = Prelude.Nothing,
+       transitGatewayAddress = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayConnectPeerConfigurationProperty where
+  toResourceProperties
+    TransitGatewayConnectPeerConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayConnectPeer.TransitGatewayConnectPeerConfiguration",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InsideCidrBlocks" JSON..= insideCidrBlocks,
+                            "PeerAddress" JSON..= peerAddress]
+                           (Prelude.catMaybes
+                              [(JSON..=) "BgpConfigurations" Prelude.<$> bgpConfigurations,
+                               (JSON..=) "Protocol" Prelude.<$> protocol,
+                               (JSON..=) "TransitGatewayAddress"
+                                 Prelude.<$> transitGatewayAddress]))}
+instance JSON.ToJSON TransitGatewayConnectPeerConfigurationProperty where
+  toJSON TransitGatewayConnectPeerConfigurationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InsideCidrBlocks" JSON..= insideCidrBlocks,
+               "PeerAddress" JSON..= peerAddress]
+              (Prelude.catMaybes
+                 [(JSON..=) "BgpConfigurations" Prelude.<$> bgpConfigurations,
+                  (JSON..=) "Protocol" Prelude.<$> protocol,
+                  (JSON..=) "TransitGatewayAddress"
+                    Prelude.<$> transitGatewayAddress])))
+instance Property "BgpConfigurations" TransitGatewayConnectPeerConfigurationProperty where
+  type PropertyType "BgpConfigurations" TransitGatewayConnectPeerConfigurationProperty = [TransitGatewayAttachmentBgpConfigurationProperty]
+  set newValue TransitGatewayConnectPeerConfigurationProperty {..}
+    = TransitGatewayConnectPeerConfigurationProperty
+        {bgpConfigurations = Prelude.pure newValue, ..}
+instance Property "InsideCidrBlocks" TransitGatewayConnectPeerConfigurationProperty where
+  type PropertyType "InsideCidrBlocks" TransitGatewayConnectPeerConfigurationProperty = ValueList Prelude.Text
+  set newValue TransitGatewayConnectPeerConfigurationProperty {..}
+    = TransitGatewayConnectPeerConfigurationProperty
+        {insideCidrBlocks = newValue, ..}
+instance Property "PeerAddress" TransitGatewayConnectPeerConfigurationProperty where
+  type PropertyType "PeerAddress" TransitGatewayConnectPeerConfigurationProperty = Value Prelude.Text
+  set newValue TransitGatewayConnectPeerConfigurationProperty {..}
+    = TransitGatewayConnectPeerConfigurationProperty
+        {peerAddress = newValue, ..}
+instance Property "Protocol" TransitGatewayConnectPeerConfigurationProperty where
+  type PropertyType "Protocol" TransitGatewayConnectPeerConfigurationProperty = Value Prelude.Text
+  set newValue TransitGatewayConnectPeerConfigurationProperty {..}
+    = TransitGatewayConnectPeerConfigurationProperty
+        {protocol = Prelude.pure newValue, ..}
+instance Property "TransitGatewayAddress" TransitGatewayConnectPeerConfigurationProperty where
+  type PropertyType "TransitGatewayAddress" TransitGatewayConnectPeerConfigurationProperty = Value Prelude.Text
+  set newValue TransitGatewayConnectPeerConfigurationProperty {..}
+    = TransitGatewayConnectPeerConfigurationProperty
+        {transitGatewayAddress = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayConnectPeerConfigurationProperty.hs-boot b/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayConnectPeerConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayConnectPeer/TransitGatewayConnectPeerConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.TransitGatewayConnectPeer.TransitGatewayConnectPeerConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data TransitGatewayConnectPeerConfigurationProperty :: Prelude.Type
+instance ToResourceProperties TransitGatewayConnectPeerConfigurationProperty
+instance Prelude.Eq TransitGatewayConnectPeerConfigurationProperty
+instance Prelude.Show TransitGatewayConnectPeerConfigurationProperty
+instance JSON.ToJSON TransitGatewayConnectPeerConfigurationProperty
diff --git a/gen/Stratosphere/EC2/TransitGatewayMulticastDomain.hs b/gen/Stratosphere/EC2/TransitGatewayMulticastDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayMulticastDomain.hs
@@ -0,0 +1,60 @@
+module Stratosphere.EC2.TransitGatewayMulticastDomain (
+        module Exports, TransitGatewayMulticastDomain(..),
+        mkTransitGatewayMulticastDomain
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.TransitGatewayMulticastDomain.OptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TransitGatewayMulticastDomain
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomain.html>
+    TransitGatewayMulticastDomain {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomain.html#cfn-ec2-transitgatewaymulticastdomain-options>
+                                   options :: (Prelude.Maybe OptionsProperty),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomain.html#cfn-ec2-transitgatewaymulticastdomain-tags>
+                                   tags :: (Prelude.Maybe [Tag]),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomain.html#cfn-ec2-transitgatewaymulticastdomain-transitgatewayid>
+                                   transitGatewayId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayMulticastDomain ::
+  Value Prelude.Text -> TransitGatewayMulticastDomain
+mkTransitGatewayMulticastDomain transitGatewayId
+  = TransitGatewayMulticastDomain
+      {haddock_workaround_ = (), transitGatewayId = transitGatewayId,
+       options = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayMulticastDomain where
+  toResourceProperties TransitGatewayMulticastDomain {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayMulticastDomain",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["TransitGatewayId" JSON..= transitGatewayId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Options" Prelude.<$> options,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TransitGatewayMulticastDomain where
+  toJSON TransitGatewayMulticastDomain {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["TransitGatewayId" JSON..= transitGatewayId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Options" Prelude.<$> options,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Options" TransitGatewayMulticastDomain where
+  type PropertyType "Options" TransitGatewayMulticastDomain = OptionsProperty
+  set newValue TransitGatewayMulticastDomain {..}
+    = TransitGatewayMulticastDomain
+        {options = Prelude.pure newValue, ..}
+instance Property "Tags" TransitGatewayMulticastDomain where
+  type PropertyType "Tags" TransitGatewayMulticastDomain = [Tag]
+  set newValue TransitGatewayMulticastDomain {..}
+    = TransitGatewayMulticastDomain {tags = Prelude.pure newValue, ..}
+instance Property "TransitGatewayId" TransitGatewayMulticastDomain where
+  type PropertyType "TransitGatewayId" TransitGatewayMulticastDomain = Value Prelude.Text
+  set newValue TransitGatewayMulticastDomain {..}
+    = TransitGatewayMulticastDomain {transitGatewayId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayMulticastDomain/OptionsProperty.hs b/gen/Stratosphere/EC2/TransitGatewayMulticastDomain/OptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayMulticastDomain/OptionsProperty.hs
@@ -0,0 +1,61 @@
+module Stratosphere.EC2.TransitGatewayMulticastDomain.OptionsProperty (
+        OptionsProperty(..), mkOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaymulticastdomain-options.html>
+    OptionsProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaymulticastdomain-options.html#cfn-ec2-transitgatewaymulticastdomain-options-autoacceptsharedassociations>
+                     autoAcceptSharedAssociations :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaymulticastdomain-options.html#cfn-ec2-transitgatewaymulticastdomain-options-igmpv2support>
+                     igmpv2Support :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaymulticastdomain-options.html#cfn-ec2-transitgatewaymulticastdomain-options-staticsourcessupport>
+                     staticSourcesSupport :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOptionsProperty :: OptionsProperty
+mkOptionsProperty
+  = OptionsProperty
+      {haddock_workaround_ = (),
+       autoAcceptSharedAssociations = Prelude.Nothing,
+       igmpv2Support = Prelude.Nothing,
+       staticSourcesSupport = Prelude.Nothing}
+instance ToResourceProperties OptionsProperty where
+  toResourceProperties OptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayMulticastDomain.Options",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AutoAcceptSharedAssociations"
+                              Prelude.<$> autoAcceptSharedAssociations,
+                            (JSON..=) "Igmpv2Support" Prelude.<$> igmpv2Support,
+                            (JSON..=) "StaticSourcesSupport"
+                              Prelude.<$> staticSourcesSupport])}
+instance JSON.ToJSON OptionsProperty where
+  toJSON OptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AutoAcceptSharedAssociations"
+                 Prelude.<$> autoAcceptSharedAssociations,
+               (JSON..=) "Igmpv2Support" Prelude.<$> igmpv2Support,
+               (JSON..=) "StaticSourcesSupport"
+                 Prelude.<$> staticSourcesSupport]))
+instance Property "AutoAcceptSharedAssociations" OptionsProperty where
+  type PropertyType "AutoAcceptSharedAssociations" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty
+        {autoAcceptSharedAssociations = Prelude.pure newValue, ..}
+instance Property "Igmpv2Support" OptionsProperty where
+  type PropertyType "Igmpv2Support" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {igmpv2Support = Prelude.pure newValue, ..}
+instance Property "StaticSourcesSupport" OptionsProperty where
+  type PropertyType "StaticSourcesSupport" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty
+        {staticSourcesSupport = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayMulticastDomain/OptionsProperty.hs-boot b/gen/Stratosphere/EC2/TransitGatewayMulticastDomain/OptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayMulticastDomain/OptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.TransitGatewayMulticastDomain.OptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OptionsProperty :: Prelude.Type
+instance ToResourceProperties OptionsProperty
+instance Prelude.Eq OptionsProperty
+instance Prelude.Show OptionsProperty
+instance JSON.ToJSON OptionsProperty
diff --git a/gen/Stratosphere/EC2/TransitGatewayMulticastDomainAssociation.hs b/gen/Stratosphere/EC2/TransitGatewayMulticastDomainAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayMulticastDomainAssociation.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EC2.TransitGatewayMulticastDomainAssociation (
+        TransitGatewayMulticastDomainAssociation(..),
+        mkTransitGatewayMulticastDomainAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayMulticastDomainAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomainassociation.html>
+    TransitGatewayMulticastDomainAssociation {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomainassociation.html#cfn-ec2-transitgatewaymulticastdomainassociation-subnetid>
+                                              subnetId :: (Value Prelude.Text),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomainassociation.html#cfn-ec2-transitgatewaymulticastdomainassociation-transitgatewayattachmentid>
+                                              transitGatewayAttachmentId :: (Value Prelude.Text),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastdomainassociation.html#cfn-ec2-transitgatewaymulticastdomainassociation-transitgatewaymulticastdomainid>
+                                              transitGatewayMulticastDomainId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayMulticastDomainAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> TransitGatewayMulticastDomainAssociation
+mkTransitGatewayMulticastDomainAssociation
+  subnetId
+  transitGatewayAttachmentId
+  transitGatewayMulticastDomainId
+  = TransitGatewayMulticastDomainAssociation
+      {haddock_workaround_ = (), subnetId = subnetId,
+       transitGatewayAttachmentId = transitGatewayAttachmentId,
+       transitGatewayMulticastDomainId = transitGatewayMulticastDomainId}
+instance ToResourceProperties TransitGatewayMulticastDomainAssociation where
+  toResourceProperties TransitGatewayMulticastDomainAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayMulticastDomainAssociation",
+         supportsTags = Prelude.False,
+         properties = ["SubnetId" JSON..= subnetId,
+                       "TransitGatewayAttachmentId" JSON..= transitGatewayAttachmentId,
+                       "TransitGatewayMulticastDomainId"
+                         JSON..= transitGatewayMulticastDomainId]}
+instance JSON.ToJSON TransitGatewayMulticastDomainAssociation where
+  toJSON TransitGatewayMulticastDomainAssociation {..}
+    = JSON.object
+        ["SubnetId" JSON..= subnetId,
+         "TransitGatewayAttachmentId" JSON..= transitGatewayAttachmentId,
+         "TransitGatewayMulticastDomainId"
+           JSON..= transitGatewayMulticastDomainId]
+instance Property "SubnetId" TransitGatewayMulticastDomainAssociation where
+  type PropertyType "SubnetId" TransitGatewayMulticastDomainAssociation = Value Prelude.Text
+  set newValue TransitGatewayMulticastDomainAssociation {..}
+    = TransitGatewayMulticastDomainAssociation
+        {subnetId = newValue, ..}
+instance Property "TransitGatewayAttachmentId" TransitGatewayMulticastDomainAssociation where
+  type PropertyType "TransitGatewayAttachmentId" TransitGatewayMulticastDomainAssociation = Value Prelude.Text
+  set newValue TransitGatewayMulticastDomainAssociation {..}
+    = TransitGatewayMulticastDomainAssociation
+        {transitGatewayAttachmentId = newValue, ..}
+instance Property "TransitGatewayMulticastDomainId" TransitGatewayMulticastDomainAssociation where
+  type PropertyType "TransitGatewayMulticastDomainId" TransitGatewayMulticastDomainAssociation = Value Prelude.Text
+  set newValue TransitGatewayMulticastDomainAssociation {..}
+    = TransitGatewayMulticastDomainAssociation
+        {transitGatewayMulticastDomainId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayMulticastGroupMember.hs b/gen/Stratosphere/EC2/TransitGatewayMulticastGroupMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayMulticastGroupMember.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EC2.TransitGatewayMulticastGroupMember (
+        TransitGatewayMulticastGroupMember(..),
+        mkTransitGatewayMulticastGroupMember
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayMulticastGroupMember
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastgroupmember.html>
+    TransitGatewayMulticastGroupMember {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastgroupmember.html#cfn-ec2-transitgatewaymulticastgroupmember-groupipaddress>
+                                        groupIpAddress :: (Value Prelude.Text),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastgroupmember.html#cfn-ec2-transitgatewaymulticastgroupmember-networkinterfaceid>
+                                        networkInterfaceId :: (Value Prelude.Text),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastgroupmember.html#cfn-ec2-transitgatewaymulticastgroupmember-transitgatewaymulticastdomainid>
+                                        transitGatewayMulticastDomainId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayMulticastGroupMember ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> TransitGatewayMulticastGroupMember
+mkTransitGatewayMulticastGroupMember
+  groupIpAddress
+  networkInterfaceId
+  transitGatewayMulticastDomainId
+  = TransitGatewayMulticastGroupMember
+      {haddock_workaround_ = (), groupIpAddress = groupIpAddress,
+       networkInterfaceId = networkInterfaceId,
+       transitGatewayMulticastDomainId = transitGatewayMulticastDomainId}
+instance ToResourceProperties TransitGatewayMulticastGroupMember where
+  toResourceProperties TransitGatewayMulticastGroupMember {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayMulticastGroupMember",
+         supportsTags = Prelude.False,
+         properties = ["GroupIpAddress" JSON..= groupIpAddress,
+                       "NetworkInterfaceId" JSON..= networkInterfaceId,
+                       "TransitGatewayMulticastDomainId"
+                         JSON..= transitGatewayMulticastDomainId]}
+instance JSON.ToJSON TransitGatewayMulticastGroupMember where
+  toJSON TransitGatewayMulticastGroupMember {..}
+    = JSON.object
+        ["GroupIpAddress" JSON..= groupIpAddress,
+         "NetworkInterfaceId" JSON..= networkInterfaceId,
+         "TransitGatewayMulticastDomainId"
+           JSON..= transitGatewayMulticastDomainId]
+instance Property "GroupIpAddress" TransitGatewayMulticastGroupMember where
+  type PropertyType "GroupIpAddress" TransitGatewayMulticastGroupMember = Value Prelude.Text
+  set newValue TransitGatewayMulticastGroupMember {..}
+    = TransitGatewayMulticastGroupMember
+        {groupIpAddress = newValue, ..}
+instance Property "NetworkInterfaceId" TransitGatewayMulticastGroupMember where
+  type PropertyType "NetworkInterfaceId" TransitGatewayMulticastGroupMember = Value Prelude.Text
+  set newValue TransitGatewayMulticastGroupMember {..}
+    = TransitGatewayMulticastGroupMember
+        {networkInterfaceId = newValue, ..}
+instance Property "TransitGatewayMulticastDomainId" TransitGatewayMulticastGroupMember where
+  type PropertyType "TransitGatewayMulticastDomainId" TransitGatewayMulticastGroupMember = Value Prelude.Text
+  set newValue TransitGatewayMulticastGroupMember {..}
+    = TransitGatewayMulticastGroupMember
+        {transitGatewayMulticastDomainId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayMulticastGroupSource.hs b/gen/Stratosphere/EC2/TransitGatewayMulticastGroupSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayMulticastGroupSource.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EC2.TransitGatewayMulticastGroupSource (
+        TransitGatewayMulticastGroupSource(..),
+        mkTransitGatewayMulticastGroupSource
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayMulticastGroupSource
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastgroupsource.html>
+    TransitGatewayMulticastGroupSource {haddock_workaround_ :: (),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastgroupsource.html#cfn-ec2-transitgatewaymulticastgroupsource-groupipaddress>
+                                        groupIpAddress :: (Value Prelude.Text),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastgroupsource.html#cfn-ec2-transitgatewaymulticastgroupsource-networkinterfaceid>
+                                        networkInterfaceId :: (Value Prelude.Text),
+                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaymulticastgroupsource.html#cfn-ec2-transitgatewaymulticastgroupsource-transitgatewaymulticastdomainid>
+                                        transitGatewayMulticastDomainId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayMulticastGroupSource ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> TransitGatewayMulticastGroupSource
+mkTransitGatewayMulticastGroupSource
+  groupIpAddress
+  networkInterfaceId
+  transitGatewayMulticastDomainId
+  = TransitGatewayMulticastGroupSource
+      {haddock_workaround_ = (), groupIpAddress = groupIpAddress,
+       networkInterfaceId = networkInterfaceId,
+       transitGatewayMulticastDomainId = transitGatewayMulticastDomainId}
+instance ToResourceProperties TransitGatewayMulticastGroupSource where
+  toResourceProperties TransitGatewayMulticastGroupSource {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayMulticastGroupSource",
+         supportsTags = Prelude.False,
+         properties = ["GroupIpAddress" JSON..= groupIpAddress,
+                       "NetworkInterfaceId" JSON..= networkInterfaceId,
+                       "TransitGatewayMulticastDomainId"
+                         JSON..= transitGatewayMulticastDomainId]}
+instance JSON.ToJSON TransitGatewayMulticastGroupSource where
+  toJSON TransitGatewayMulticastGroupSource {..}
+    = JSON.object
+        ["GroupIpAddress" JSON..= groupIpAddress,
+         "NetworkInterfaceId" JSON..= networkInterfaceId,
+         "TransitGatewayMulticastDomainId"
+           JSON..= transitGatewayMulticastDomainId]
+instance Property "GroupIpAddress" TransitGatewayMulticastGroupSource where
+  type PropertyType "GroupIpAddress" TransitGatewayMulticastGroupSource = Value Prelude.Text
+  set newValue TransitGatewayMulticastGroupSource {..}
+    = TransitGatewayMulticastGroupSource
+        {groupIpAddress = newValue, ..}
+instance Property "NetworkInterfaceId" TransitGatewayMulticastGroupSource where
+  type PropertyType "NetworkInterfaceId" TransitGatewayMulticastGroupSource = Value Prelude.Text
+  set newValue TransitGatewayMulticastGroupSource {..}
+    = TransitGatewayMulticastGroupSource
+        {networkInterfaceId = newValue, ..}
+instance Property "TransitGatewayMulticastDomainId" TransitGatewayMulticastGroupSource where
+  type PropertyType "TransitGatewayMulticastDomainId" TransitGatewayMulticastGroupSource = Value Prelude.Text
+  set newValue TransitGatewayMulticastGroupSource {..}
+    = TransitGatewayMulticastGroupSource
+        {transitGatewayMulticastDomainId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayPeeringAttachment.hs b/gen/Stratosphere/EC2/TransitGatewayPeeringAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayPeeringAttachment.hs
@@ -0,0 +1,83 @@
+module Stratosphere.EC2.TransitGatewayPeeringAttachment (
+        TransitGatewayPeeringAttachment(..),
+        mkTransitGatewayPeeringAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TransitGatewayPeeringAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaypeeringattachment.html>
+    TransitGatewayPeeringAttachment {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaypeeringattachment.html#cfn-ec2-transitgatewaypeeringattachment-peeraccountid>
+                                     peerAccountId :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaypeeringattachment.html#cfn-ec2-transitgatewaypeeringattachment-peerregion>
+                                     peerRegion :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaypeeringattachment.html#cfn-ec2-transitgatewaypeeringattachment-peertransitgatewayid>
+                                     peerTransitGatewayId :: (Value Prelude.Text),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaypeeringattachment.html#cfn-ec2-transitgatewaypeeringattachment-tags>
+                                     tags :: (Prelude.Maybe [Tag]),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewaypeeringattachment.html#cfn-ec2-transitgatewaypeeringattachment-transitgatewayid>
+                                     transitGatewayId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayPeeringAttachment ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text
+        -> Value Prelude.Text -> TransitGatewayPeeringAttachment
+mkTransitGatewayPeeringAttachment
+  peerAccountId
+  peerRegion
+  peerTransitGatewayId
+  transitGatewayId
+  = TransitGatewayPeeringAttachment
+      {haddock_workaround_ = (), peerAccountId = peerAccountId,
+       peerRegion = peerRegion,
+       peerTransitGatewayId = peerTransitGatewayId,
+       transitGatewayId = transitGatewayId, tags = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayPeeringAttachment where
+  toResourceProperties TransitGatewayPeeringAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayPeeringAttachment",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["PeerAccountId" JSON..= peerAccountId,
+                            "PeerRegion" JSON..= peerRegion,
+                            "PeerTransitGatewayId" JSON..= peerTransitGatewayId,
+                            "TransitGatewayId" JSON..= transitGatewayId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TransitGatewayPeeringAttachment where
+  toJSON TransitGatewayPeeringAttachment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["PeerAccountId" JSON..= peerAccountId,
+               "PeerRegion" JSON..= peerRegion,
+               "PeerTransitGatewayId" JSON..= peerTransitGatewayId,
+               "TransitGatewayId" JSON..= transitGatewayId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "PeerAccountId" TransitGatewayPeeringAttachment where
+  type PropertyType "PeerAccountId" TransitGatewayPeeringAttachment = Value Prelude.Text
+  set newValue TransitGatewayPeeringAttachment {..}
+    = TransitGatewayPeeringAttachment {peerAccountId = newValue, ..}
+instance Property "PeerRegion" TransitGatewayPeeringAttachment where
+  type PropertyType "PeerRegion" TransitGatewayPeeringAttachment = Value Prelude.Text
+  set newValue TransitGatewayPeeringAttachment {..}
+    = TransitGatewayPeeringAttachment {peerRegion = newValue, ..}
+instance Property "PeerTransitGatewayId" TransitGatewayPeeringAttachment where
+  type PropertyType "PeerTransitGatewayId" TransitGatewayPeeringAttachment = Value Prelude.Text
+  set newValue TransitGatewayPeeringAttachment {..}
+    = TransitGatewayPeeringAttachment
+        {peerTransitGatewayId = newValue, ..}
+instance Property "Tags" TransitGatewayPeeringAttachment where
+  type PropertyType "Tags" TransitGatewayPeeringAttachment = [Tag]
+  set newValue TransitGatewayPeeringAttachment {..}
+    = TransitGatewayPeeringAttachment
+        {tags = Prelude.pure newValue, ..}
+instance Property "TransitGatewayId" TransitGatewayPeeringAttachment where
+  type PropertyType "TransitGatewayId" TransitGatewayPeeringAttachment = Value Prelude.Text
+  set newValue TransitGatewayPeeringAttachment {..}
+    = TransitGatewayPeeringAttachment {transitGatewayId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayPeeringAttachment/PeeringAttachmentStatusProperty.hs b/gen/Stratosphere/EC2/TransitGatewayPeeringAttachment/PeeringAttachmentStatusProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayPeeringAttachment/PeeringAttachmentStatusProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.TransitGatewayPeeringAttachment.PeeringAttachmentStatusProperty (
+        PeeringAttachmentStatusProperty(..),
+        mkPeeringAttachmentStatusProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PeeringAttachmentStatusProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaypeeringattachment-peeringattachmentstatus.html>
+    PeeringAttachmentStatusProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaypeeringattachment-peeringattachmentstatus.html#cfn-ec2-transitgatewaypeeringattachment-peeringattachmentstatus-code>
+                                     code :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewaypeeringattachment-peeringattachmentstatus.html#cfn-ec2-transitgatewaypeeringattachment-peeringattachmentstatus-message>
+                                     message :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPeeringAttachmentStatusProperty ::
+  PeeringAttachmentStatusProperty
+mkPeeringAttachmentStatusProperty
+  = PeeringAttachmentStatusProperty
+      {haddock_workaround_ = (), code = Prelude.Nothing,
+       message = Prelude.Nothing}
+instance ToResourceProperties PeeringAttachmentStatusProperty where
+  toResourceProperties PeeringAttachmentStatusProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayPeeringAttachment.PeeringAttachmentStatus",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Code" Prelude.<$> code,
+                            (JSON..=) "Message" Prelude.<$> message])}
+instance JSON.ToJSON PeeringAttachmentStatusProperty where
+  toJSON PeeringAttachmentStatusProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Code" Prelude.<$> code,
+               (JSON..=) "Message" Prelude.<$> message]))
+instance Property "Code" PeeringAttachmentStatusProperty where
+  type PropertyType "Code" PeeringAttachmentStatusProperty = Value Prelude.Text
+  set newValue PeeringAttachmentStatusProperty {..}
+    = PeeringAttachmentStatusProperty
+        {code = Prelude.pure newValue, ..}
+instance Property "Message" PeeringAttachmentStatusProperty where
+  type PropertyType "Message" PeeringAttachmentStatusProperty = Value Prelude.Text
+  set newValue PeeringAttachmentStatusProperty {..}
+    = PeeringAttachmentStatusProperty
+        {message = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayPeeringAttachment/PeeringAttachmentStatusProperty.hs-boot b/gen/Stratosphere/EC2/TransitGatewayPeeringAttachment/PeeringAttachmentStatusProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayPeeringAttachment/PeeringAttachmentStatusProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.TransitGatewayPeeringAttachment.PeeringAttachmentStatusProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PeeringAttachmentStatusProperty :: Prelude.Type
+instance ToResourceProperties PeeringAttachmentStatusProperty
+instance Prelude.Eq PeeringAttachmentStatusProperty
+instance Prelude.Show PeeringAttachmentStatusProperty
+instance JSON.ToJSON PeeringAttachmentStatusProperty
diff --git a/gen/Stratosphere/EC2/TransitGatewayRoute.hs b/gen/Stratosphere/EC2/TransitGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayRoute.hs
@@ -0,0 +1,72 @@
+module Stratosphere.EC2.TransitGatewayRoute (
+        TransitGatewayRoute(..), mkTransitGatewayRoute
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayRoute
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html>
+    TransitGatewayRoute {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html#cfn-ec2-transitgatewayroute-blackhole>
+                         blackhole :: (Prelude.Maybe (Value Prelude.Bool)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html#cfn-ec2-transitgatewayroute-destinationcidrblock>
+                         destinationCidrBlock :: (Value Prelude.Text),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html#cfn-ec2-transitgatewayroute-transitgatewayattachmentid>
+                         transitGatewayAttachmentId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroute.html#cfn-ec2-transitgatewayroute-transitgatewayroutetableid>
+                         transitGatewayRouteTableId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayRoute ::
+  Value Prelude.Text -> Value Prelude.Text -> TransitGatewayRoute
+mkTransitGatewayRoute
+  destinationCidrBlock
+  transitGatewayRouteTableId
+  = TransitGatewayRoute
+      {haddock_workaround_ = (),
+       destinationCidrBlock = destinationCidrBlock,
+       transitGatewayRouteTableId = transitGatewayRouteTableId,
+       blackhole = Prelude.Nothing,
+       transitGatewayAttachmentId = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayRoute where
+  toResourceProperties TransitGatewayRoute {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayRoute",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DestinationCidrBlock" JSON..= destinationCidrBlock,
+                            "TransitGatewayRouteTableId" JSON..= transitGatewayRouteTableId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Blackhole" Prelude.<$> blackhole,
+                               (JSON..=) "TransitGatewayAttachmentId"
+                                 Prelude.<$> transitGatewayAttachmentId]))}
+instance JSON.ToJSON TransitGatewayRoute where
+  toJSON TransitGatewayRoute {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DestinationCidrBlock" JSON..= destinationCidrBlock,
+               "TransitGatewayRouteTableId" JSON..= transitGatewayRouteTableId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Blackhole" Prelude.<$> blackhole,
+                  (JSON..=) "TransitGatewayAttachmentId"
+                    Prelude.<$> transitGatewayAttachmentId])))
+instance Property "Blackhole" TransitGatewayRoute where
+  type PropertyType "Blackhole" TransitGatewayRoute = Value Prelude.Bool
+  set newValue TransitGatewayRoute {..}
+    = TransitGatewayRoute {blackhole = Prelude.pure newValue, ..}
+instance Property "DestinationCidrBlock" TransitGatewayRoute where
+  type PropertyType "DestinationCidrBlock" TransitGatewayRoute = Value Prelude.Text
+  set newValue TransitGatewayRoute {..}
+    = TransitGatewayRoute {destinationCidrBlock = newValue, ..}
+instance Property "TransitGatewayAttachmentId" TransitGatewayRoute where
+  type PropertyType "TransitGatewayAttachmentId" TransitGatewayRoute = Value Prelude.Text
+  set newValue TransitGatewayRoute {..}
+    = TransitGatewayRoute
+        {transitGatewayAttachmentId = Prelude.pure newValue, ..}
+instance Property "TransitGatewayRouteTableId" TransitGatewayRoute where
+  type PropertyType "TransitGatewayRouteTableId" TransitGatewayRoute = Value Prelude.Text
+  set newValue TransitGatewayRoute {..}
+    = TransitGatewayRoute {transitGatewayRouteTableId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayRouteTable.hs b/gen/Stratosphere/EC2/TransitGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayRouteTable.hs
@@ -0,0 +1,47 @@
+module Stratosphere.EC2.TransitGatewayRouteTable (
+        TransitGatewayRouteTable(..), mkTransitGatewayRouteTable
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TransitGatewayRouteTable
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetable.html>
+    TransitGatewayRouteTable {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetable.html#cfn-ec2-transitgatewayroutetable-tags>
+                              tags :: (Prelude.Maybe [Tag]),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetable.html#cfn-ec2-transitgatewayroutetable-transitgatewayid>
+                              transitGatewayId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayRouteTable ::
+  Value Prelude.Text -> TransitGatewayRouteTable
+mkTransitGatewayRouteTable transitGatewayId
+  = TransitGatewayRouteTable
+      {haddock_workaround_ = (), transitGatewayId = transitGatewayId,
+       tags = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayRouteTable where
+  toResourceProperties TransitGatewayRouteTable {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayRouteTable",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["TransitGatewayId" JSON..= transitGatewayId]
+                           (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TransitGatewayRouteTable where
+  toJSON TransitGatewayRouteTable {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["TransitGatewayId" JSON..= transitGatewayId]
+              (Prelude.catMaybes [(JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Tags" TransitGatewayRouteTable where
+  type PropertyType "Tags" TransitGatewayRouteTable = [Tag]
+  set newValue TransitGatewayRouteTable {..}
+    = TransitGatewayRouteTable {tags = Prelude.pure newValue, ..}
+instance Property "TransitGatewayId" TransitGatewayRouteTable where
+  type PropertyType "TransitGatewayId" TransitGatewayRouteTable = Value Prelude.Text
+  set newValue TransitGatewayRouteTable {..}
+    = TransitGatewayRouteTable {transitGatewayId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayRouteTableAssociation.hs b/gen/Stratosphere/EC2/TransitGatewayRouteTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayRouteTableAssociation.hs
@@ -0,0 +1,50 @@
+module Stratosphere.EC2.TransitGatewayRouteTableAssociation (
+        TransitGatewayRouteTableAssociation(..),
+        mkTransitGatewayRouteTableAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayRouteTableAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetableassociation.html>
+    TransitGatewayRouteTableAssociation {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetableassociation.html#cfn-ec2-transitgatewayroutetableassociation-transitgatewayattachmentid>
+                                         transitGatewayAttachmentId :: (Value Prelude.Text),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetableassociation.html#cfn-ec2-transitgatewayroutetableassociation-transitgatewayroutetableid>
+                                         transitGatewayRouteTableId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayRouteTableAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> TransitGatewayRouteTableAssociation
+mkTransitGatewayRouteTableAssociation
+  transitGatewayAttachmentId
+  transitGatewayRouteTableId
+  = TransitGatewayRouteTableAssociation
+      {haddock_workaround_ = (),
+       transitGatewayAttachmentId = transitGatewayAttachmentId,
+       transitGatewayRouteTableId = transitGatewayRouteTableId}
+instance ToResourceProperties TransitGatewayRouteTableAssociation where
+  toResourceProperties TransitGatewayRouteTableAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayRouteTableAssociation",
+         supportsTags = Prelude.False,
+         properties = ["TransitGatewayAttachmentId"
+                         JSON..= transitGatewayAttachmentId,
+                       "TransitGatewayRouteTableId" JSON..= transitGatewayRouteTableId]}
+instance JSON.ToJSON TransitGatewayRouteTableAssociation where
+  toJSON TransitGatewayRouteTableAssociation {..}
+    = JSON.object
+        ["TransitGatewayAttachmentId" JSON..= transitGatewayAttachmentId,
+         "TransitGatewayRouteTableId" JSON..= transitGatewayRouteTableId]
+instance Property "TransitGatewayAttachmentId" TransitGatewayRouteTableAssociation where
+  type PropertyType "TransitGatewayAttachmentId" TransitGatewayRouteTableAssociation = Value Prelude.Text
+  set newValue TransitGatewayRouteTableAssociation {..}
+    = TransitGatewayRouteTableAssociation
+        {transitGatewayAttachmentId = newValue, ..}
+instance Property "TransitGatewayRouteTableId" TransitGatewayRouteTableAssociation where
+  type PropertyType "TransitGatewayRouteTableId" TransitGatewayRouteTableAssociation = Value Prelude.Text
+  set newValue TransitGatewayRouteTableAssociation {..}
+    = TransitGatewayRouteTableAssociation
+        {transitGatewayRouteTableId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayRouteTablePropagation.hs b/gen/Stratosphere/EC2/TransitGatewayRouteTablePropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayRouteTablePropagation.hs
@@ -0,0 +1,50 @@
+module Stratosphere.EC2.TransitGatewayRouteTablePropagation (
+        TransitGatewayRouteTablePropagation(..),
+        mkTransitGatewayRouteTablePropagation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data TransitGatewayRouteTablePropagation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetablepropagation.html>
+    TransitGatewayRouteTablePropagation {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetablepropagation.html#cfn-ec2-transitgatewayroutetablepropagation-transitgatewayattachmentid>
+                                         transitGatewayAttachmentId :: (Value Prelude.Text),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayroutetablepropagation.html#cfn-ec2-transitgatewayroutetablepropagation-transitgatewayroutetableid>
+                                         transitGatewayRouteTableId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayRouteTablePropagation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> TransitGatewayRouteTablePropagation
+mkTransitGatewayRouteTablePropagation
+  transitGatewayAttachmentId
+  transitGatewayRouteTableId
+  = TransitGatewayRouteTablePropagation
+      {haddock_workaround_ = (),
+       transitGatewayAttachmentId = transitGatewayAttachmentId,
+       transitGatewayRouteTableId = transitGatewayRouteTableId}
+instance ToResourceProperties TransitGatewayRouteTablePropagation where
+  toResourceProperties TransitGatewayRouteTablePropagation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayRouteTablePropagation",
+         supportsTags = Prelude.False,
+         properties = ["TransitGatewayAttachmentId"
+                         JSON..= transitGatewayAttachmentId,
+                       "TransitGatewayRouteTableId" JSON..= transitGatewayRouteTableId]}
+instance JSON.ToJSON TransitGatewayRouteTablePropagation where
+  toJSON TransitGatewayRouteTablePropagation {..}
+    = JSON.object
+        ["TransitGatewayAttachmentId" JSON..= transitGatewayAttachmentId,
+         "TransitGatewayRouteTableId" JSON..= transitGatewayRouteTableId]
+instance Property "TransitGatewayAttachmentId" TransitGatewayRouteTablePropagation where
+  type PropertyType "TransitGatewayAttachmentId" TransitGatewayRouteTablePropagation = Value Prelude.Text
+  set newValue TransitGatewayRouteTablePropagation {..}
+    = TransitGatewayRouteTablePropagation
+        {transitGatewayAttachmentId = newValue, ..}
+instance Property "TransitGatewayRouteTableId" TransitGatewayRouteTablePropagation where
+  type PropertyType "TransitGatewayRouteTableId" TransitGatewayRouteTablePropagation = Value Prelude.Text
+  set newValue TransitGatewayRouteTablePropagation {..}
+    = TransitGatewayRouteTablePropagation
+        {transitGatewayRouteTableId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayVpcAttachment.hs b/gen/Stratosphere/EC2/TransitGatewayVpcAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayVpcAttachment.hs
@@ -0,0 +1,95 @@
+module Stratosphere.EC2.TransitGatewayVpcAttachment (
+        module Exports, TransitGatewayVpcAttachment(..),
+        mkTransitGatewayVpcAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.TransitGatewayVpcAttachment.OptionsProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data TransitGatewayVpcAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayvpcattachment.html>
+    TransitGatewayVpcAttachment {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayvpcattachment.html#cfn-ec2-transitgatewayvpcattachment-addsubnetids>
+                                 addSubnetIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayvpcattachment.html#cfn-ec2-transitgatewayvpcattachment-options>
+                                 options :: (Prelude.Maybe OptionsProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayvpcattachment.html#cfn-ec2-transitgatewayvpcattachment-removesubnetids>
+                                 removeSubnetIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayvpcattachment.html#cfn-ec2-transitgatewayvpcattachment-subnetids>
+                                 subnetIds :: (ValueList Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayvpcattachment.html#cfn-ec2-transitgatewayvpcattachment-tags>
+                                 tags :: (Prelude.Maybe [Tag]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayvpcattachment.html#cfn-ec2-transitgatewayvpcattachment-transitgatewayid>
+                                 transitGatewayId :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-transitgatewayvpcattachment.html#cfn-ec2-transitgatewayvpcattachment-vpcid>
+                                 vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkTransitGatewayVpcAttachment ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> TransitGatewayVpcAttachment
+mkTransitGatewayVpcAttachment subnetIds transitGatewayId vpcId
+  = TransitGatewayVpcAttachment
+      {haddock_workaround_ = (), subnetIds = subnetIds,
+       transitGatewayId = transitGatewayId, vpcId = vpcId,
+       addSubnetIds = Prelude.Nothing, options = Prelude.Nothing,
+       removeSubnetIds = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties TransitGatewayVpcAttachment where
+  toResourceProperties TransitGatewayVpcAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayVpcAttachment",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["SubnetIds" JSON..= subnetIds,
+                            "TransitGatewayId" JSON..= transitGatewayId, "VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AddSubnetIds" Prelude.<$> addSubnetIds,
+                               (JSON..=) "Options" Prelude.<$> options,
+                               (JSON..=) "RemoveSubnetIds" Prelude.<$> removeSubnetIds,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON TransitGatewayVpcAttachment where
+  toJSON TransitGatewayVpcAttachment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["SubnetIds" JSON..= subnetIds,
+               "TransitGatewayId" JSON..= transitGatewayId, "VpcId" JSON..= vpcId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AddSubnetIds" Prelude.<$> addSubnetIds,
+                  (JSON..=) "Options" Prelude.<$> options,
+                  (JSON..=) "RemoveSubnetIds" Prelude.<$> removeSubnetIds,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AddSubnetIds" TransitGatewayVpcAttachment where
+  type PropertyType "AddSubnetIds" TransitGatewayVpcAttachment = ValueList Prelude.Text
+  set newValue TransitGatewayVpcAttachment {..}
+    = TransitGatewayVpcAttachment
+        {addSubnetIds = Prelude.pure newValue, ..}
+instance Property "Options" TransitGatewayVpcAttachment where
+  type PropertyType "Options" TransitGatewayVpcAttachment = OptionsProperty
+  set newValue TransitGatewayVpcAttachment {..}
+    = TransitGatewayVpcAttachment {options = Prelude.pure newValue, ..}
+instance Property "RemoveSubnetIds" TransitGatewayVpcAttachment where
+  type PropertyType "RemoveSubnetIds" TransitGatewayVpcAttachment = ValueList Prelude.Text
+  set newValue TransitGatewayVpcAttachment {..}
+    = TransitGatewayVpcAttachment
+        {removeSubnetIds = Prelude.pure newValue, ..}
+instance Property "SubnetIds" TransitGatewayVpcAttachment where
+  type PropertyType "SubnetIds" TransitGatewayVpcAttachment = ValueList Prelude.Text
+  set newValue TransitGatewayVpcAttachment {..}
+    = TransitGatewayVpcAttachment {subnetIds = newValue, ..}
+instance Property "Tags" TransitGatewayVpcAttachment where
+  type PropertyType "Tags" TransitGatewayVpcAttachment = [Tag]
+  set newValue TransitGatewayVpcAttachment {..}
+    = TransitGatewayVpcAttachment {tags = Prelude.pure newValue, ..}
+instance Property "TransitGatewayId" TransitGatewayVpcAttachment where
+  type PropertyType "TransitGatewayId" TransitGatewayVpcAttachment = Value Prelude.Text
+  set newValue TransitGatewayVpcAttachment {..}
+    = TransitGatewayVpcAttachment {transitGatewayId = newValue, ..}
+instance Property "VpcId" TransitGatewayVpcAttachment where
+  type PropertyType "VpcId" TransitGatewayVpcAttachment = Value Prelude.Text
+  set newValue TransitGatewayVpcAttachment {..}
+    = TransitGatewayVpcAttachment {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayVpcAttachment/OptionsProperty.hs b/gen/Stratosphere/EC2/TransitGatewayVpcAttachment/OptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayVpcAttachment/OptionsProperty.hs
@@ -0,0 +1,66 @@
+module Stratosphere.EC2.TransitGatewayVpcAttachment.OptionsProperty (
+        OptionsProperty(..), mkOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayvpcattachment-options.html>
+    OptionsProperty {haddock_workaround_ :: (),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayvpcattachment-options.html#cfn-ec2-transitgatewayvpcattachment-options-appliancemodesupport>
+                     applianceModeSupport :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayvpcattachment-options.html#cfn-ec2-transitgatewayvpcattachment-options-dnssupport>
+                     dnsSupport :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayvpcattachment-options.html#cfn-ec2-transitgatewayvpcattachment-options-ipv6support>
+                     ipv6Support :: (Prelude.Maybe (Value Prelude.Text)),
+                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-transitgatewayvpcattachment-options.html#cfn-ec2-transitgatewayvpcattachment-options-securitygroupreferencingsupport>
+                     securityGroupReferencingSupport :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOptionsProperty :: OptionsProperty
+mkOptionsProperty
+  = OptionsProperty
+      {haddock_workaround_ = (), applianceModeSupport = Prelude.Nothing,
+       dnsSupport = Prelude.Nothing, ipv6Support = Prelude.Nothing,
+       securityGroupReferencingSupport = Prelude.Nothing}
+instance ToResourceProperties OptionsProperty where
+  toResourceProperties OptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::TransitGatewayVpcAttachment.Options",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ApplianceModeSupport" Prelude.<$> applianceModeSupport,
+                            (JSON..=) "DnsSupport" Prelude.<$> dnsSupport,
+                            (JSON..=) "Ipv6Support" Prelude.<$> ipv6Support,
+                            (JSON..=) "SecurityGroupReferencingSupport"
+                              Prelude.<$> securityGroupReferencingSupport])}
+instance JSON.ToJSON OptionsProperty where
+  toJSON OptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ApplianceModeSupport" Prelude.<$> applianceModeSupport,
+               (JSON..=) "DnsSupport" Prelude.<$> dnsSupport,
+               (JSON..=) "Ipv6Support" Prelude.<$> ipv6Support,
+               (JSON..=) "SecurityGroupReferencingSupport"
+                 Prelude.<$> securityGroupReferencingSupport]))
+instance Property "ApplianceModeSupport" OptionsProperty where
+  type PropertyType "ApplianceModeSupport" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty
+        {applianceModeSupport = Prelude.pure newValue, ..}
+instance Property "DnsSupport" OptionsProperty where
+  type PropertyType "DnsSupport" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {dnsSupport = Prelude.pure newValue, ..}
+instance Property "Ipv6Support" OptionsProperty where
+  type PropertyType "Ipv6Support" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty {ipv6Support = Prelude.pure newValue, ..}
+instance Property "SecurityGroupReferencingSupport" OptionsProperty where
+  type PropertyType "SecurityGroupReferencingSupport" OptionsProperty = Value Prelude.Text
+  set newValue OptionsProperty {..}
+    = OptionsProperty
+        {securityGroupReferencingSupport = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/TransitGatewayVpcAttachment/OptionsProperty.hs-boot b/gen/Stratosphere/EC2/TransitGatewayVpcAttachment/OptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/TransitGatewayVpcAttachment/OptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.TransitGatewayVpcAttachment.OptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OptionsProperty :: Prelude.Type
+instance ToResourceProperties OptionsProperty
+instance Prelude.Eq OptionsProperty
+instance Prelude.Show OptionsProperty
+instance JSON.ToJSON OptionsProperty
diff --git a/gen/Stratosphere/EC2/VPC.hs b/gen/Stratosphere/EC2/VPC.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPC.hs
@@ -0,0 +1,87 @@
+module Stratosphere.EC2.VPC (
+        VPC(..), mkVPC
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VPC
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html>
+    VPC {haddock_workaround_ :: (),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-cidrblock>
+         cidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-enablednshostnames>
+         enableDnsHostnames :: (Prelude.Maybe (Value Prelude.Bool)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-enablednssupport>
+         enableDnsSupport :: (Prelude.Maybe (Value Prelude.Bool)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-instancetenancy>
+         instanceTenancy :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-ipv4ipampoolid>
+         ipv4IpamPoolId :: (Prelude.Maybe (Value Prelude.Text)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-ipv4netmasklength>
+         ipv4NetmaskLength :: (Prelude.Maybe (Value Prelude.Integer)),
+         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#cfn-ec2-vpc-tags>
+         tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPC :: VPC
+mkVPC
+  = VPC
+      {haddock_workaround_ = (), cidrBlock = Prelude.Nothing,
+       enableDnsHostnames = Prelude.Nothing,
+       enableDnsSupport = Prelude.Nothing,
+       instanceTenancy = Prelude.Nothing,
+       ipv4IpamPoolId = Prelude.Nothing,
+       ipv4NetmaskLength = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties VPC where
+  toResourceProperties VPC {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPC", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CidrBlock" Prelude.<$> cidrBlock,
+                            (JSON..=) "EnableDnsHostnames" Prelude.<$> enableDnsHostnames,
+                            (JSON..=) "EnableDnsSupport" Prelude.<$> enableDnsSupport,
+                            (JSON..=) "InstanceTenancy" Prelude.<$> instanceTenancy,
+                            (JSON..=) "Ipv4IpamPoolId" Prelude.<$> ipv4IpamPoolId,
+                            (JSON..=) "Ipv4NetmaskLength" Prelude.<$> ipv4NetmaskLength,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON VPC where
+  toJSON VPC {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CidrBlock" Prelude.<$> cidrBlock,
+               (JSON..=) "EnableDnsHostnames" Prelude.<$> enableDnsHostnames,
+               (JSON..=) "EnableDnsSupport" Prelude.<$> enableDnsSupport,
+               (JSON..=) "InstanceTenancy" Prelude.<$> instanceTenancy,
+               (JSON..=) "Ipv4IpamPoolId" Prelude.<$> ipv4IpamPoolId,
+               (JSON..=) "Ipv4NetmaskLength" Prelude.<$> ipv4NetmaskLength,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "CidrBlock" VPC where
+  type PropertyType "CidrBlock" VPC = Value Prelude.Text
+  set newValue VPC {..} = VPC {cidrBlock = Prelude.pure newValue, ..}
+instance Property "EnableDnsHostnames" VPC where
+  type PropertyType "EnableDnsHostnames" VPC = Value Prelude.Bool
+  set newValue VPC {..}
+    = VPC {enableDnsHostnames = Prelude.pure newValue, ..}
+instance Property "EnableDnsSupport" VPC where
+  type PropertyType "EnableDnsSupport" VPC = Value Prelude.Bool
+  set newValue VPC {..}
+    = VPC {enableDnsSupport = Prelude.pure newValue, ..}
+instance Property "InstanceTenancy" VPC where
+  type PropertyType "InstanceTenancy" VPC = Value Prelude.Text
+  set newValue VPC {..}
+    = VPC {instanceTenancy = Prelude.pure newValue, ..}
+instance Property "Ipv4IpamPoolId" VPC where
+  type PropertyType "Ipv4IpamPoolId" VPC = Value Prelude.Text
+  set newValue VPC {..}
+    = VPC {ipv4IpamPoolId = Prelude.pure newValue, ..}
+instance Property "Ipv4NetmaskLength" VPC where
+  type PropertyType "Ipv4NetmaskLength" VPC = Value Prelude.Integer
+  set newValue VPC {..}
+    = VPC {ipv4NetmaskLength = Prelude.pure newValue, ..}
+instance Property "Tags" VPC where
+  type PropertyType "Tags" VPC = [Tag]
+  set newValue VPC {..} = VPC {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCBlockPublicAccessExclusion.hs b/gen/Stratosphere/EC2/VPCBlockPublicAccessExclusion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCBlockPublicAccessExclusion.hs
@@ -0,0 +1,71 @@
+module Stratosphere.EC2.VPCBlockPublicAccessExclusion (
+        VPCBlockPublicAccessExclusion(..), mkVPCBlockPublicAccessExclusion
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VPCBlockPublicAccessExclusion
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcblockpublicaccessexclusion.html>
+    VPCBlockPublicAccessExclusion {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcblockpublicaccessexclusion.html#cfn-ec2-vpcblockpublicaccessexclusion-internetgatewayexclusionmode>
+                                   internetGatewayExclusionMode :: (Value Prelude.Text),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcblockpublicaccessexclusion.html#cfn-ec2-vpcblockpublicaccessexclusion-subnetid>
+                                   subnetId :: (Prelude.Maybe (Value Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcblockpublicaccessexclusion.html#cfn-ec2-vpcblockpublicaccessexclusion-tags>
+                                   tags :: (Prelude.Maybe [Tag]),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcblockpublicaccessexclusion.html#cfn-ec2-vpcblockpublicaccessexclusion-vpcid>
+                                   vpcId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCBlockPublicAccessExclusion ::
+  Value Prelude.Text -> VPCBlockPublicAccessExclusion
+mkVPCBlockPublicAccessExclusion internetGatewayExclusionMode
+  = VPCBlockPublicAccessExclusion
+      {haddock_workaround_ = (),
+       internetGatewayExclusionMode = internetGatewayExclusionMode,
+       subnetId = Prelude.Nothing, tags = Prelude.Nothing,
+       vpcId = Prelude.Nothing}
+instance ToResourceProperties VPCBlockPublicAccessExclusion where
+  toResourceProperties VPCBlockPublicAccessExclusion {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCBlockPublicAccessExclusion",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InternetGatewayExclusionMode"
+                              JSON..= internetGatewayExclusionMode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "SubnetId" Prelude.<$> subnetId,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "VpcId" Prelude.<$> vpcId]))}
+instance JSON.ToJSON VPCBlockPublicAccessExclusion where
+  toJSON VPCBlockPublicAccessExclusion {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InternetGatewayExclusionMode"
+                 JSON..= internetGatewayExclusionMode]
+              (Prelude.catMaybes
+                 [(JSON..=) "SubnetId" Prelude.<$> subnetId,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "VpcId" Prelude.<$> vpcId])))
+instance Property "InternetGatewayExclusionMode" VPCBlockPublicAccessExclusion where
+  type PropertyType "InternetGatewayExclusionMode" VPCBlockPublicAccessExclusion = Value Prelude.Text
+  set newValue VPCBlockPublicAccessExclusion {..}
+    = VPCBlockPublicAccessExclusion
+        {internetGatewayExclusionMode = newValue, ..}
+instance Property "SubnetId" VPCBlockPublicAccessExclusion where
+  type PropertyType "SubnetId" VPCBlockPublicAccessExclusion = Value Prelude.Text
+  set newValue VPCBlockPublicAccessExclusion {..}
+    = VPCBlockPublicAccessExclusion
+        {subnetId = Prelude.pure newValue, ..}
+instance Property "Tags" VPCBlockPublicAccessExclusion where
+  type PropertyType "Tags" VPCBlockPublicAccessExclusion = [Tag]
+  set newValue VPCBlockPublicAccessExclusion {..}
+    = VPCBlockPublicAccessExclusion {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" VPCBlockPublicAccessExclusion where
+  type PropertyType "VpcId" VPCBlockPublicAccessExclusion = Value Prelude.Text
+  set newValue VPCBlockPublicAccessExclusion {..}
+    = VPCBlockPublicAccessExclusion {vpcId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCBlockPublicAccessOptions.hs b/gen/Stratosphere/EC2/VPCBlockPublicAccessOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCBlockPublicAccessOptions.hs
@@ -0,0 +1,36 @@
+module Stratosphere.EC2.VPCBlockPublicAccessOptions (
+        VPCBlockPublicAccessOptions(..), mkVPCBlockPublicAccessOptions
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VPCBlockPublicAccessOptions
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcblockpublicaccessoptions.html>
+    VPCBlockPublicAccessOptions {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcblockpublicaccessoptions.html#cfn-ec2-vpcblockpublicaccessoptions-internetgatewayblockmode>
+                                 internetGatewayBlockMode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCBlockPublicAccessOptions ::
+  Value Prelude.Text -> VPCBlockPublicAccessOptions
+mkVPCBlockPublicAccessOptions internetGatewayBlockMode
+  = VPCBlockPublicAccessOptions
+      {haddock_workaround_ = (),
+       internetGatewayBlockMode = internetGatewayBlockMode}
+instance ToResourceProperties VPCBlockPublicAccessOptions where
+  toResourceProperties VPCBlockPublicAccessOptions {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCBlockPublicAccessOptions",
+         supportsTags = Prelude.False,
+         properties = ["InternetGatewayBlockMode"
+                         JSON..= internetGatewayBlockMode]}
+instance JSON.ToJSON VPCBlockPublicAccessOptions where
+  toJSON VPCBlockPublicAccessOptions {..}
+    = JSON.object
+        ["InternetGatewayBlockMode" JSON..= internetGatewayBlockMode]
+instance Property "InternetGatewayBlockMode" VPCBlockPublicAccessOptions where
+  type PropertyType "InternetGatewayBlockMode" VPCBlockPublicAccessOptions = Value Prelude.Text
+  set newValue VPCBlockPublicAccessOptions {..}
+    = VPCBlockPublicAccessOptions
+        {internetGatewayBlockMode = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCCidrBlock.hs b/gen/Stratosphere/EC2/VPCCidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCCidrBlock.hs
@@ -0,0 +1,122 @@
+module Stratosphere.EC2.VPCCidrBlock (
+        VPCCidrBlock(..), mkVPCCidrBlock
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VPCCidrBlock
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html>
+    VPCCidrBlock {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-amazonprovidedipv6cidrblock>
+                  amazonProvidedIpv6CidrBlock :: (Prelude.Maybe (Value Prelude.Bool)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-cidrblock>
+                  cidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-ipv4ipampoolid>
+                  ipv4IpamPoolId :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-ipv4netmasklength>
+                  ipv4NetmaskLength :: (Prelude.Maybe (Value Prelude.Integer)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-ipv6cidrblock>
+                  ipv6CidrBlock :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-ipv6cidrblocknetworkbordergroup>
+                  ipv6CidrBlockNetworkBorderGroup :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-ipv6ipampoolid>
+                  ipv6IpamPoolId :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-ipv6netmasklength>
+                  ipv6NetmaskLength :: (Prelude.Maybe (Value Prelude.Integer)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-ipv6pool>
+                  ipv6Pool :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpccidrblock.html#cfn-ec2-vpccidrblock-vpcid>
+                  vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCCidrBlock :: Value Prelude.Text -> VPCCidrBlock
+mkVPCCidrBlock vpcId
+  = VPCCidrBlock
+      {haddock_workaround_ = (), vpcId = vpcId,
+       amazonProvidedIpv6CidrBlock = Prelude.Nothing,
+       cidrBlock = Prelude.Nothing, ipv4IpamPoolId = Prelude.Nothing,
+       ipv4NetmaskLength = Prelude.Nothing,
+       ipv6CidrBlock = Prelude.Nothing,
+       ipv6CidrBlockNetworkBorderGroup = Prelude.Nothing,
+       ipv6IpamPoolId = Prelude.Nothing,
+       ipv6NetmaskLength = Prelude.Nothing, ipv6Pool = Prelude.Nothing}
+instance ToResourceProperties VPCCidrBlock where
+  toResourceProperties VPCCidrBlock {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCCidrBlock", supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AmazonProvidedIpv6CidrBlock"
+                                 Prelude.<$> amazonProvidedIpv6CidrBlock,
+                               (JSON..=) "CidrBlock" Prelude.<$> cidrBlock,
+                               (JSON..=) "Ipv4IpamPoolId" Prelude.<$> ipv4IpamPoolId,
+                               (JSON..=) "Ipv4NetmaskLength" Prelude.<$> ipv4NetmaskLength,
+                               (JSON..=) "Ipv6CidrBlock" Prelude.<$> ipv6CidrBlock,
+                               (JSON..=) "Ipv6CidrBlockNetworkBorderGroup"
+                                 Prelude.<$> ipv6CidrBlockNetworkBorderGroup,
+                               (JSON..=) "Ipv6IpamPoolId" Prelude.<$> ipv6IpamPoolId,
+                               (JSON..=) "Ipv6NetmaskLength" Prelude.<$> ipv6NetmaskLength,
+                               (JSON..=) "Ipv6Pool" Prelude.<$> ipv6Pool]))}
+instance JSON.ToJSON VPCCidrBlock where
+  toJSON VPCCidrBlock {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcId" JSON..= vpcId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AmazonProvidedIpv6CidrBlock"
+                    Prelude.<$> amazonProvidedIpv6CidrBlock,
+                  (JSON..=) "CidrBlock" Prelude.<$> cidrBlock,
+                  (JSON..=) "Ipv4IpamPoolId" Prelude.<$> ipv4IpamPoolId,
+                  (JSON..=) "Ipv4NetmaskLength" Prelude.<$> ipv4NetmaskLength,
+                  (JSON..=) "Ipv6CidrBlock" Prelude.<$> ipv6CidrBlock,
+                  (JSON..=) "Ipv6CidrBlockNetworkBorderGroup"
+                    Prelude.<$> ipv6CidrBlockNetworkBorderGroup,
+                  (JSON..=) "Ipv6IpamPoolId" Prelude.<$> ipv6IpamPoolId,
+                  (JSON..=) "Ipv6NetmaskLength" Prelude.<$> ipv6NetmaskLength,
+                  (JSON..=) "Ipv6Pool" Prelude.<$> ipv6Pool])))
+instance Property "AmazonProvidedIpv6CidrBlock" VPCCidrBlock where
+  type PropertyType "AmazonProvidedIpv6CidrBlock" VPCCidrBlock = Value Prelude.Bool
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock
+        {amazonProvidedIpv6CidrBlock = Prelude.pure newValue, ..}
+instance Property "CidrBlock" VPCCidrBlock where
+  type PropertyType "CidrBlock" VPCCidrBlock = Value Prelude.Text
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock {cidrBlock = Prelude.pure newValue, ..}
+instance Property "Ipv4IpamPoolId" VPCCidrBlock where
+  type PropertyType "Ipv4IpamPoolId" VPCCidrBlock = Value Prelude.Text
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock {ipv4IpamPoolId = Prelude.pure newValue, ..}
+instance Property "Ipv4NetmaskLength" VPCCidrBlock where
+  type PropertyType "Ipv4NetmaskLength" VPCCidrBlock = Value Prelude.Integer
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock {ipv4NetmaskLength = Prelude.pure newValue, ..}
+instance Property "Ipv6CidrBlock" VPCCidrBlock where
+  type PropertyType "Ipv6CidrBlock" VPCCidrBlock = Value Prelude.Text
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock {ipv6CidrBlock = Prelude.pure newValue, ..}
+instance Property "Ipv6CidrBlockNetworkBorderGroup" VPCCidrBlock where
+  type PropertyType "Ipv6CidrBlockNetworkBorderGroup" VPCCidrBlock = Value Prelude.Text
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock
+        {ipv6CidrBlockNetworkBorderGroup = Prelude.pure newValue, ..}
+instance Property "Ipv6IpamPoolId" VPCCidrBlock where
+  type PropertyType "Ipv6IpamPoolId" VPCCidrBlock = Value Prelude.Text
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock {ipv6IpamPoolId = Prelude.pure newValue, ..}
+instance Property "Ipv6NetmaskLength" VPCCidrBlock where
+  type PropertyType "Ipv6NetmaskLength" VPCCidrBlock = Value Prelude.Integer
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock {ipv6NetmaskLength = Prelude.pure newValue, ..}
+instance Property "Ipv6Pool" VPCCidrBlock where
+  type PropertyType "Ipv6Pool" VPCCidrBlock = Value Prelude.Text
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock {ipv6Pool = Prelude.pure newValue, ..}
+instance Property "VpcId" VPCCidrBlock where
+  type PropertyType "VpcId" VPCCidrBlock = Value Prelude.Text
+  set newValue VPCCidrBlock {..}
+    = VPCCidrBlock {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCDHCPOptionsAssociation.hs b/gen/Stratosphere/EC2/VPCDHCPOptionsAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCDHCPOptionsAssociation.hs
@@ -0,0 +1,42 @@
+module Stratosphere.EC2.VPCDHCPOptionsAssociation (
+        VPCDHCPOptionsAssociation(..), mkVPCDHCPOptionsAssociation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VPCDHCPOptionsAssociation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcdhcpoptionsassociation.html>
+    VPCDHCPOptionsAssociation {haddock_workaround_ :: (),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcdhcpoptionsassociation.html#cfn-ec2-vpcdhcpoptionsassociation-dhcpoptionsid>
+                               dhcpOptionsId :: (Value Prelude.Text),
+                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcdhcpoptionsassociation.html#cfn-ec2-vpcdhcpoptionsassociation-vpcid>
+                               vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCDHCPOptionsAssociation ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> VPCDHCPOptionsAssociation
+mkVPCDHCPOptionsAssociation dhcpOptionsId vpcId
+  = VPCDHCPOptionsAssociation
+      {haddock_workaround_ = (), dhcpOptionsId = dhcpOptionsId,
+       vpcId = vpcId}
+instance ToResourceProperties VPCDHCPOptionsAssociation where
+  toResourceProperties VPCDHCPOptionsAssociation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCDHCPOptionsAssociation",
+         supportsTags = Prelude.False,
+         properties = ["DhcpOptionsId" JSON..= dhcpOptionsId,
+                       "VpcId" JSON..= vpcId]}
+instance JSON.ToJSON VPCDHCPOptionsAssociation where
+  toJSON VPCDHCPOptionsAssociation {..}
+    = JSON.object
+        ["DhcpOptionsId" JSON..= dhcpOptionsId, "VpcId" JSON..= vpcId]
+instance Property "DhcpOptionsId" VPCDHCPOptionsAssociation where
+  type PropertyType "DhcpOptionsId" VPCDHCPOptionsAssociation = Value Prelude.Text
+  set newValue VPCDHCPOptionsAssociation {..}
+    = VPCDHCPOptionsAssociation {dhcpOptionsId = newValue, ..}
+instance Property "VpcId" VPCDHCPOptionsAssociation where
+  type PropertyType "VpcId" VPCDHCPOptionsAssociation = Value Prelude.Text
+  set newValue VPCDHCPOptionsAssociation {..}
+    = VPCDHCPOptionsAssociation {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCEndpoint.hs b/gen/Stratosphere/EC2/VPCEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCEndpoint.hs
@@ -0,0 +1,154 @@
+module Stratosphere.EC2.VPCEndpoint (
+        module Exports, VPCEndpoint(..), mkVPCEndpoint
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VPCEndpoint.DnsOptionsSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VPCEndpoint
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html>
+    VPCEndpoint {haddock_workaround_ :: (),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-dnsoptions>
+                 dnsOptions :: (Prelude.Maybe DnsOptionsSpecificationProperty),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-ipaddresstype>
+                 ipAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-policydocument>
+                 policyDocument :: (Prelude.Maybe JSON.Object),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-privatednsenabled>
+                 privateDnsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-resourceconfigurationarn>
+                 resourceConfigurationArn :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-routetableids>
+                 routeTableIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-securitygroupids>
+                 securityGroupIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-servicename>
+                 serviceName :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-servicenetworkarn>
+                 serviceNetworkArn :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-serviceregion>
+                 serviceRegion :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-subnetids>
+                 subnetIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-tags>
+                 tags :: (Prelude.Maybe [Tag]),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-vpcendpointtype>
+                 vpcEndpointType :: (Prelude.Maybe (Value Prelude.Text)),
+                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpoint.html#cfn-ec2-vpcendpoint-vpcid>
+                 vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCEndpoint :: Value Prelude.Text -> VPCEndpoint
+mkVPCEndpoint vpcId
+  = VPCEndpoint
+      {haddock_workaround_ = (), vpcId = vpcId,
+       dnsOptions = Prelude.Nothing, ipAddressType = Prelude.Nothing,
+       policyDocument = Prelude.Nothing,
+       privateDnsEnabled = Prelude.Nothing,
+       resourceConfigurationArn = Prelude.Nothing,
+       routeTableIds = Prelude.Nothing,
+       securityGroupIds = Prelude.Nothing, serviceName = Prelude.Nothing,
+       serviceNetworkArn = Prelude.Nothing,
+       serviceRegion = Prelude.Nothing, subnetIds = Prelude.Nothing,
+       tags = Prelude.Nothing, vpcEndpointType = Prelude.Nothing}
+instance ToResourceProperties VPCEndpoint where
+  toResourceProperties VPCEndpoint {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCEndpoint", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "DnsOptions" Prelude.<$> dnsOptions,
+                               (JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                               (JSON..=) "PolicyDocument" Prelude.<$> policyDocument,
+                               (JSON..=) "PrivateDnsEnabled" Prelude.<$> privateDnsEnabled,
+                               (JSON..=) "ResourceConfigurationArn"
+                                 Prelude.<$> resourceConfigurationArn,
+                               (JSON..=) "RouteTableIds" Prelude.<$> routeTableIds,
+                               (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                               (JSON..=) "ServiceName" Prelude.<$> serviceName,
+                               (JSON..=) "ServiceNetworkArn" Prelude.<$> serviceNetworkArn,
+                               (JSON..=) "ServiceRegion" Prelude.<$> serviceRegion,
+                               (JSON..=) "SubnetIds" Prelude.<$> subnetIds,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "VpcEndpointType" Prelude.<$> vpcEndpointType]))}
+instance JSON.ToJSON VPCEndpoint where
+  toJSON VPCEndpoint {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcId" JSON..= vpcId]
+              (Prelude.catMaybes
+                 [(JSON..=) "DnsOptions" Prelude.<$> dnsOptions,
+                  (JSON..=) "IpAddressType" Prelude.<$> ipAddressType,
+                  (JSON..=) "PolicyDocument" Prelude.<$> policyDocument,
+                  (JSON..=) "PrivateDnsEnabled" Prelude.<$> privateDnsEnabled,
+                  (JSON..=) "ResourceConfigurationArn"
+                    Prelude.<$> resourceConfigurationArn,
+                  (JSON..=) "RouteTableIds" Prelude.<$> routeTableIds,
+                  (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                  (JSON..=) "ServiceName" Prelude.<$> serviceName,
+                  (JSON..=) "ServiceNetworkArn" Prelude.<$> serviceNetworkArn,
+                  (JSON..=) "ServiceRegion" Prelude.<$> serviceRegion,
+                  (JSON..=) "SubnetIds" Prelude.<$> subnetIds,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "VpcEndpointType" Prelude.<$> vpcEndpointType])))
+instance Property "DnsOptions" VPCEndpoint where
+  type PropertyType "DnsOptions" VPCEndpoint = DnsOptionsSpecificationProperty
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {dnsOptions = Prelude.pure newValue, ..}
+instance Property "IpAddressType" VPCEndpoint where
+  type PropertyType "IpAddressType" VPCEndpoint = Value Prelude.Text
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {ipAddressType = Prelude.pure newValue, ..}
+instance Property "PolicyDocument" VPCEndpoint where
+  type PropertyType "PolicyDocument" VPCEndpoint = JSON.Object
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {policyDocument = Prelude.pure newValue, ..}
+instance Property "PrivateDnsEnabled" VPCEndpoint where
+  type PropertyType "PrivateDnsEnabled" VPCEndpoint = Value Prelude.Bool
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {privateDnsEnabled = Prelude.pure newValue, ..}
+instance Property "ResourceConfigurationArn" VPCEndpoint where
+  type PropertyType "ResourceConfigurationArn" VPCEndpoint = Value Prelude.Text
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint
+        {resourceConfigurationArn = Prelude.pure newValue, ..}
+instance Property "RouteTableIds" VPCEndpoint where
+  type PropertyType "RouteTableIds" VPCEndpoint = ValueList Prelude.Text
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {routeTableIds = Prelude.pure newValue, ..}
+instance Property "SecurityGroupIds" VPCEndpoint where
+  type PropertyType "SecurityGroupIds" VPCEndpoint = ValueList Prelude.Text
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {securityGroupIds = Prelude.pure newValue, ..}
+instance Property "ServiceName" VPCEndpoint where
+  type PropertyType "ServiceName" VPCEndpoint = Value Prelude.Text
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {serviceName = Prelude.pure newValue, ..}
+instance Property "ServiceNetworkArn" VPCEndpoint where
+  type PropertyType "ServiceNetworkArn" VPCEndpoint = Value Prelude.Text
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {serviceNetworkArn = Prelude.pure newValue, ..}
+instance Property "ServiceRegion" VPCEndpoint where
+  type PropertyType "ServiceRegion" VPCEndpoint = Value Prelude.Text
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {serviceRegion = Prelude.pure newValue, ..}
+instance Property "SubnetIds" VPCEndpoint where
+  type PropertyType "SubnetIds" VPCEndpoint = ValueList Prelude.Text
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {subnetIds = Prelude.pure newValue, ..}
+instance Property "Tags" VPCEndpoint where
+  type PropertyType "Tags" VPCEndpoint = [Tag]
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {tags = Prelude.pure newValue, ..}
+instance Property "VpcEndpointType" VPCEndpoint where
+  type PropertyType "VpcEndpointType" VPCEndpoint = Value Prelude.Text
+  set newValue VPCEndpoint {..}
+    = VPCEndpoint {vpcEndpointType = Prelude.pure newValue, ..}
+instance Property "VpcId" VPCEndpoint where
+  type PropertyType "VpcId" VPCEndpoint = Value Prelude.Text
+  set newValue VPCEndpoint {..} = VPCEndpoint {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCEndpoint/DnsOptionsSpecificationProperty.hs b/gen/Stratosphere/EC2/VPCEndpoint/DnsOptionsSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCEndpoint/DnsOptionsSpecificationProperty.hs
@@ -0,0 +1,52 @@
+module Stratosphere.EC2.VPCEndpoint.DnsOptionsSpecificationProperty (
+        DnsOptionsSpecificationProperty(..),
+        mkDnsOptionsSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DnsOptionsSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpcendpoint-dnsoptionsspecification.html>
+    DnsOptionsSpecificationProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpcendpoint-dnsoptionsspecification.html#cfn-ec2-vpcendpoint-dnsoptionsspecification-dnsrecordiptype>
+                                     dnsRecordIpType :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpcendpoint-dnsoptionsspecification.html#cfn-ec2-vpcendpoint-dnsoptionsspecification-privatednsonlyforinboundresolverendpoint>
+                                     privateDnsOnlyForInboundResolverEndpoint :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDnsOptionsSpecificationProperty ::
+  DnsOptionsSpecificationProperty
+mkDnsOptionsSpecificationProperty
+  = DnsOptionsSpecificationProperty
+      {haddock_workaround_ = (), dnsRecordIpType = Prelude.Nothing,
+       privateDnsOnlyForInboundResolverEndpoint = Prelude.Nothing}
+instance ToResourceProperties DnsOptionsSpecificationProperty where
+  toResourceProperties DnsOptionsSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCEndpoint.DnsOptionsSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DnsRecordIpType" Prelude.<$> dnsRecordIpType,
+                            (JSON..=) "PrivateDnsOnlyForInboundResolverEndpoint"
+                              Prelude.<$> privateDnsOnlyForInboundResolverEndpoint])}
+instance JSON.ToJSON DnsOptionsSpecificationProperty where
+  toJSON DnsOptionsSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DnsRecordIpType" Prelude.<$> dnsRecordIpType,
+               (JSON..=) "PrivateDnsOnlyForInboundResolverEndpoint"
+                 Prelude.<$> privateDnsOnlyForInboundResolverEndpoint]))
+instance Property "DnsRecordIpType" DnsOptionsSpecificationProperty where
+  type PropertyType "DnsRecordIpType" DnsOptionsSpecificationProperty = Value Prelude.Text
+  set newValue DnsOptionsSpecificationProperty {..}
+    = DnsOptionsSpecificationProperty
+        {dnsRecordIpType = Prelude.pure newValue, ..}
+instance Property "PrivateDnsOnlyForInboundResolverEndpoint" DnsOptionsSpecificationProperty where
+  type PropertyType "PrivateDnsOnlyForInboundResolverEndpoint" DnsOptionsSpecificationProperty = Value Prelude.Text
+  set newValue DnsOptionsSpecificationProperty {..}
+    = DnsOptionsSpecificationProperty
+        {privateDnsOnlyForInboundResolverEndpoint = Prelude.pure newValue,
+         ..}
diff --git a/gen/Stratosphere/EC2/VPCEndpoint/DnsOptionsSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/VPCEndpoint/DnsOptionsSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCEndpoint/DnsOptionsSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPCEndpoint.DnsOptionsSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DnsOptionsSpecificationProperty :: Prelude.Type
+instance ToResourceProperties DnsOptionsSpecificationProperty
+instance Prelude.Eq DnsOptionsSpecificationProperty
+instance Prelude.Show DnsOptionsSpecificationProperty
+instance JSON.ToJSON DnsOptionsSpecificationProperty
diff --git a/gen/Stratosphere/EC2/VPCEndpointConnectionNotification.hs b/gen/Stratosphere/EC2/VPCEndpointConnectionNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCEndpointConnectionNotification.hs
@@ -0,0 +1,73 @@
+module Stratosphere.EC2.VPCEndpointConnectionNotification (
+        VPCEndpointConnectionNotification(..),
+        mkVPCEndpointConnectionNotification
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VPCEndpointConnectionNotification
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointconnectionnotification.html>
+    VPCEndpointConnectionNotification {haddock_workaround_ :: (),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointconnectionnotification.html#cfn-ec2-vpcendpointconnectionnotification-connectionevents>
+                                       connectionEvents :: (ValueList Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointconnectionnotification.html#cfn-ec2-vpcendpointconnectionnotification-connectionnotificationarn>
+                                       connectionNotificationArn :: (Value Prelude.Text),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointconnectionnotification.html#cfn-ec2-vpcendpointconnectionnotification-serviceid>
+                                       serviceId :: (Prelude.Maybe (Value Prelude.Text)),
+                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointconnectionnotification.html#cfn-ec2-vpcendpointconnectionnotification-vpcendpointid>
+                                       vPCEndpointId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCEndpointConnectionNotification ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> VPCEndpointConnectionNotification
+mkVPCEndpointConnectionNotification
+  connectionEvents
+  connectionNotificationArn
+  = VPCEndpointConnectionNotification
+      {haddock_workaround_ = (), connectionEvents = connectionEvents,
+       connectionNotificationArn = connectionNotificationArn,
+       serviceId = Prelude.Nothing, vPCEndpointId = Prelude.Nothing}
+instance ToResourceProperties VPCEndpointConnectionNotification where
+  toResourceProperties VPCEndpointConnectionNotification {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCEndpointConnectionNotification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ConnectionEvents" JSON..= connectionEvents,
+                            "ConnectionNotificationArn" JSON..= connectionNotificationArn]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ServiceId" Prelude.<$> serviceId,
+                               (JSON..=) "VPCEndpointId" Prelude.<$> vPCEndpointId]))}
+instance JSON.ToJSON VPCEndpointConnectionNotification where
+  toJSON VPCEndpointConnectionNotification {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ConnectionEvents" JSON..= connectionEvents,
+               "ConnectionNotificationArn" JSON..= connectionNotificationArn]
+              (Prelude.catMaybes
+                 [(JSON..=) "ServiceId" Prelude.<$> serviceId,
+                  (JSON..=) "VPCEndpointId" Prelude.<$> vPCEndpointId])))
+instance Property "ConnectionEvents" VPCEndpointConnectionNotification where
+  type PropertyType "ConnectionEvents" VPCEndpointConnectionNotification = ValueList Prelude.Text
+  set newValue VPCEndpointConnectionNotification {..}
+    = VPCEndpointConnectionNotification
+        {connectionEvents = newValue, ..}
+instance Property "ConnectionNotificationArn" VPCEndpointConnectionNotification where
+  type PropertyType "ConnectionNotificationArn" VPCEndpointConnectionNotification = Value Prelude.Text
+  set newValue VPCEndpointConnectionNotification {..}
+    = VPCEndpointConnectionNotification
+        {connectionNotificationArn = newValue, ..}
+instance Property "ServiceId" VPCEndpointConnectionNotification where
+  type PropertyType "ServiceId" VPCEndpointConnectionNotification = Value Prelude.Text
+  set newValue VPCEndpointConnectionNotification {..}
+    = VPCEndpointConnectionNotification
+        {serviceId = Prelude.pure newValue, ..}
+instance Property "VPCEndpointId" VPCEndpointConnectionNotification where
+  type PropertyType "VPCEndpointId" VPCEndpointConnectionNotification = Value Prelude.Text
+  set newValue VPCEndpointConnectionNotification {..}
+    = VPCEndpointConnectionNotification
+        {vPCEndpointId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCEndpointService.hs b/gen/Stratosphere/EC2/VPCEndpointService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCEndpointService.hs
@@ -0,0 +1,113 @@
+module Stratosphere.EC2.VPCEndpointService (
+        VPCEndpointService(..), mkVPCEndpointService
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VPCEndpointService
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html>
+    VPCEndpointService {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-acceptancerequired>
+                        acceptanceRequired :: (Prelude.Maybe (Value Prelude.Bool)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-contributorinsightsenabled>
+                        contributorInsightsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-gatewayloadbalancerarns>
+                        gatewayLoadBalancerArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-networkloadbalancerarns>
+                        networkLoadBalancerArns :: (Prelude.Maybe (ValueList Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-payerresponsibility>
+                        payerResponsibility :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-supportedipaddresstypes>
+                        supportedIpAddressTypes :: (Prelude.Maybe (ValueList Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-supportedregions>
+                        supportedRegions :: (Prelude.Maybe (ValueList Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservice.html#cfn-ec2-vpcendpointservice-tags>
+                        tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCEndpointService :: VPCEndpointService
+mkVPCEndpointService
+  = VPCEndpointService
+      {haddock_workaround_ = (), acceptanceRequired = Prelude.Nothing,
+       contributorInsightsEnabled = Prelude.Nothing,
+       gatewayLoadBalancerArns = Prelude.Nothing,
+       networkLoadBalancerArns = Prelude.Nothing,
+       payerResponsibility = Prelude.Nothing,
+       supportedIpAddressTypes = Prelude.Nothing,
+       supportedRegions = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties VPCEndpointService where
+  toResourceProperties VPCEndpointService {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCEndpointService",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AcceptanceRequired" Prelude.<$> acceptanceRequired,
+                            (JSON..=) "ContributorInsightsEnabled"
+                              Prelude.<$> contributorInsightsEnabled,
+                            (JSON..=) "GatewayLoadBalancerArns"
+                              Prelude.<$> gatewayLoadBalancerArns,
+                            (JSON..=) "NetworkLoadBalancerArns"
+                              Prelude.<$> networkLoadBalancerArns,
+                            (JSON..=) "PayerResponsibility" Prelude.<$> payerResponsibility,
+                            (JSON..=) "SupportedIpAddressTypes"
+                              Prelude.<$> supportedIpAddressTypes,
+                            (JSON..=) "SupportedRegions" Prelude.<$> supportedRegions,
+                            (JSON..=) "Tags" Prelude.<$> tags])}
+instance JSON.ToJSON VPCEndpointService where
+  toJSON VPCEndpointService {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AcceptanceRequired" Prelude.<$> acceptanceRequired,
+               (JSON..=) "ContributorInsightsEnabled"
+                 Prelude.<$> contributorInsightsEnabled,
+               (JSON..=) "GatewayLoadBalancerArns"
+                 Prelude.<$> gatewayLoadBalancerArns,
+               (JSON..=) "NetworkLoadBalancerArns"
+                 Prelude.<$> networkLoadBalancerArns,
+               (JSON..=) "PayerResponsibility" Prelude.<$> payerResponsibility,
+               (JSON..=) "SupportedIpAddressTypes"
+                 Prelude.<$> supportedIpAddressTypes,
+               (JSON..=) "SupportedRegions" Prelude.<$> supportedRegions,
+               (JSON..=) "Tags" Prelude.<$> tags]))
+instance Property "AcceptanceRequired" VPCEndpointService where
+  type PropertyType "AcceptanceRequired" VPCEndpointService = Value Prelude.Bool
+  set newValue VPCEndpointService {..}
+    = VPCEndpointService
+        {acceptanceRequired = Prelude.pure newValue, ..}
+instance Property "ContributorInsightsEnabled" VPCEndpointService where
+  type PropertyType "ContributorInsightsEnabled" VPCEndpointService = Value Prelude.Bool
+  set newValue VPCEndpointService {..}
+    = VPCEndpointService
+        {contributorInsightsEnabled = Prelude.pure newValue, ..}
+instance Property "GatewayLoadBalancerArns" VPCEndpointService where
+  type PropertyType "GatewayLoadBalancerArns" VPCEndpointService = ValueList Prelude.Text
+  set newValue VPCEndpointService {..}
+    = VPCEndpointService
+        {gatewayLoadBalancerArns = Prelude.pure newValue, ..}
+instance Property "NetworkLoadBalancerArns" VPCEndpointService where
+  type PropertyType "NetworkLoadBalancerArns" VPCEndpointService = ValueList Prelude.Text
+  set newValue VPCEndpointService {..}
+    = VPCEndpointService
+        {networkLoadBalancerArns = Prelude.pure newValue, ..}
+instance Property "PayerResponsibility" VPCEndpointService where
+  type PropertyType "PayerResponsibility" VPCEndpointService = Value Prelude.Text
+  set newValue VPCEndpointService {..}
+    = VPCEndpointService
+        {payerResponsibility = Prelude.pure newValue, ..}
+instance Property "SupportedIpAddressTypes" VPCEndpointService where
+  type PropertyType "SupportedIpAddressTypes" VPCEndpointService = ValueList Prelude.Text
+  set newValue VPCEndpointService {..}
+    = VPCEndpointService
+        {supportedIpAddressTypes = Prelude.pure newValue, ..}
+instance Property "SupportedRegions" VPCEndpointService where
+  type PropertyType "SupportedRegions" VPCEndpointService = ValueList Prelude.Text
+  set newValue VPCEndpointService {..}
+    = VPCEndpointService {supportedRegions = Prelude.pure newValue, ..}
+instance Property "Tags" VPCEndpointService where
+  type PropertyType "Tags" VPCEndpointService = [Tag]
+  set newValue VPCEndpointService {..}
+    = VPCEndpointService {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCEndpointServicePermissions.hs b/gen/Stratosphere/EC2/VPCEndpointServicePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCEndpointServicePermissions.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.VPCEndpointServicePermissions (
+        VPCEndpointServicePermissions(..), mkVPCEndpointServicePermissions
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VPCEndpointServicePermissions
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservicepermissions.html>
+    VPCEndpointServicePermissions {haddock_workaround_ :: (),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservicepermissions.html#cfn-ec2-vpcendpointservicepermissions-allowedprincipals>
+                                   allowedPrincipals :: (Prelude.Maybe (ValueList Prelude.Text)),
+                                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcendpointservicepermissions.html#cfn-ec2-vpcendpointservicepermissions-serviceid>
+                                   serviceId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCEndpointServicePermissions ::
+  Value Prelude.Text -> VPCEndpointServicePermissions
+mkVPCEndpointServicePermissions serviceId
+  = VPCEndpointServicePermissions
+      {haddock_workaround_ = (), serviceId = serviceId,
+       allowedPrincipals = Prelude.Nothing}
+instance ToResourceProperties VPCEndpointServicePermissions where
+  toResourceProperties VPCEndpointServicePermissions {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCEndpointServicePermissions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["ServiceId" JSON..= serviceId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AllowedPrincipals" Prelude.<$> allowedPrincipals]))}
+instance JSON.ToJSON VPCEndpointServicePermissions where
+  toJSON VPCEndpointServicePermissions {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["ServiceId" JSON..= serviceId]
+              (Prelude.catMaybes
+                 [(JSON..=) "AllowedPrincipals" Prelude.<$> allowedPrincipals])))
+instance Property "AllowedPrincipals" VPCEndpointServicePermissions where
+  type PropertyType "AllowedPrincipals" VPCEndpointServicePermissions = ValueList Prelude.Text
+  set newValue VPCEndpointServicePermissions {..}
+    = VPCEndpointServicePermissions
+        {allowedPrincipals = Prelude.pure newValue, ..}
+instance Property "ServiceId" VPCEndpointServicePermissions where
+  type PropertyType "ServiceId" VPCEndpointServicePermissions = Value Prelude.Text
+  set newValue VPCEndpointServicePermissions {..}
+    = VPCEndpointServicePermissions {serviceId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCGatewayAttachment.hs b/gen/Stratosphere/EC2/VPCGatewayAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCGatewayAttachment.hs
@@ -0,0 +1,58 @@
+module Stratosphere.EC2.VPCGatewayAttachment (
+        VPCGatewayAttachment(..), mkVPCGatewayAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VPCGatewayAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcgatewayattachment.html>
+    VPCGatewayAttachment {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcgatewayattachment.html#cfn-ec2-vpcgatewayattachment-internetgatewayid>
+                          internetGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcgatewayattachment.html#cfn-ec2-vpcgatewayattachment-vpcid>
+                          vpcId :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcgatewayattachment.html#cfn-ec2-vpcgatewayattachment-vpngatewayid>
+                          vpnGatewayId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCGatewayAttachment ::
+  Value Prelude.Text -> VPCGatewayAttachment
+mkVPCGatewayAttachment vpcId
+  = VPCGatewayAttachment
+      {haddock_workaround_ = (), vpcId = vpcId,
+       internetGatewayId = Prelude.Nothing,
+       vpnGatewayId = Prelude.Nothing}
+instance ToResourceProperties VPCGatewayAttachment where
+  toResourceProperties VPCGatewayAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCGatewayAttachment",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "InternetGatewayId" Prelude.<$> internetGatewayId,
+                               (JSON..=) "VpnGatewayId" Prelude.<$> vpnGatewayId]))}
+instance JSON.ToJSON VPCGatewayAttachment where
+  toJSON VPCGatewayAttachment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VpcId" JSON..= vpcId]
+              (Prelude.catMaybes
+                 [(JSON..=) "InternetGatewayId" Prelude.<$> internetGatewayId,
+                  (JSON..=) "VpnGatewayId" Prelude.<$> vpnGatewayId])))
+instance Property "InternetGatewayId" VPCGatewayAttachment where
+  type PropertyType "InternetGatewayId" VPCGatewayAttachment = Value Prelude.Text
+  set newValue VPCGatewayAttachment {..}
+    = VPCGatewayAttachment
+        {internetGatewayId = Prelude.pure newValue, ..}
+instance Property "VpcId" VPCGatewayAttachment where
+  type PropertyType "VpcId" VPCGatewayAttachment = Value Prelude.Text
+  set newValue VPCGatewayAttachment {..}
+    = VPCGatewayAttachment {vpcId = newValue, ..}
+instance Property "VpnGatewayId" VPCGatewayAttachment where
+  type PropertyType "VpnGatewayId" VPCGatewayAttachment = Value Prelude.Text
+  set newValue VPCGatewayAttachment {..}
+    = VPCGatewayAttachment {vpnGatewayId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPCPeeringConnection.hs b/gen/Stratosphere/EC2/VPCPeeringConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPCPeeringConnection.hs
@@ -0,0 +1,80 @@
+module Stratosphere.EC2.VPCPeeringConnection (
+        VPCPeeringConnection(..), mkVPCPeeringConnection
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VPCPeeringConnection
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html>
+    VPCPeeringConnection {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html#cfn-ec2-vpcpeeringconnection-peerownerid>
+                          peerOwnerId :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html#cfn-ec2-vpcpeeringconnection-peerregion>
+                          peerRegion :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html#cfn-ec2-vpcpeeringconnection-peerrolearn>
+                          peerRoleArn :: (Prelude.Maybe (Value Prelude.Text)),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html#cfn-ec2-vpcpeeringconnection-peervpcid>
+                          peerVpcId :: (Value Prelude.Text),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html#cfn-ec2-vpcpeeringconnection-tags>
+                          tags :: (Prelude.Maybe [Tag]),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpcpeeringconnection.html#cfn-ec2-vpcpeeringconnection-vpcid>
+                          vpcId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPCPeeringConnection ::
+  Value Prelude.Text -> Value Prelude.Text -> VPCPeeringConnection
+mkVPCPeeringConnection peerVpcId vpcId
+  = VPCPeeringConnection
+      {haddock_workaround_ = (), peerVpcId = peerVpcId, vpcId = vpcId,
+       peerOwnerId = Prelude.Nothing, peerRegion = Prelude.Nothing,
+       peerRoleArn = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties VPCPeeringConnection where
+  toResourceProperties VPCPeeringConnection {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPCPeeringConnection",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["PeerVpcId" JSON..= peerVpcId, "VpcId" JSON..= vpcId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "PeerOwnerId" Prelude.<$> peerOwnerId,
+                               (JSON..=) "PeerRegion" Prelude.<$> peerRegion,
+                               (JSON..=) "PeerRoleArn" Prelude.<$> peerRoleArn,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON VPCPeeringConnection where
+  toJSON VPCPeeringConnection {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["PeerVpcId" JSON..= peerVpcId, "VpcId" JSON..= vpcId]
+              (Prelude.catMaybes
+                 [(JSON..=) "PeerOwnerId" Prelude.<$> peerOwnerId,
+                  (JSON..=) "PeerRegion" Prelude.<$> peerRegion,
+                  (JSON..=) "PeerRoleArn" Prelude.<$> peerRoleArn,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "PeerOwnerId" VPCPeeringConnection where
+  type PropertyType "PeerOwnerId" VPCPeeringConnection = Value Prelude.Text
+  set newValue VPCPeeringConnection {..}
+    = VPCPeeringConnection {peerOwnerId = Prelude.pure newValue, ..}
+instance Property "PeerRegion" VPCPeeringConnection where
+  type PropertyType "PeerRegion" VPCPeeringConnection = Value Prelude.Text
+  set newValue VPCPeeringConnection {..}
+    = VPCPeeringConnection {peerRegion = Prelude.pure newValue, ..}
+instance Property "PeerRoleArn" VPCPeeringConnection where
+  type PropertyType "PeerRoleArn" VPCPeeringConnection = Value Prelude.Text
+  set newValue VPCPeeringConnection {..}
+    = VPCPeeringConnection {peerRoleArn = Prelude.pure newValue, ..}
+instance Property "PeerVpcId" VPCPeeringConnection where
+  type PropertyType "PeerVpcId" VPCPeeringConnection = Value Prelude.Text
+  set newValue VPCPeeringConnection {..}
+    = VPCPeeringConnection {peerVpcId = newValue, ..}
+instance Property "Tags" VPCPeeringConnection where
+  type PropertyType "Tags" VPCPeeringConnection = [Tag]
+  set newValue VPCPeeringConnection {..}
+    = VPCPeeringConnection {tags = Prelude.pure newValue, ..}
+instance Property "VpcId" VPCPeeringConnection where
+  type PropertyType "VpcId" VPCPeeringConnection = Value Prelude.Text
+  set newValue VPCPeeringConnection {..}
+    = VPCPeeringConnection {vpcId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection.hs b/gen/Stratosphere/EC2/VPNConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection.hs
@@ -0,0 +1,185 @@
+module Stratosphere.EC2.VPNConnection (
+        module Exports, VPNConnection(..), mkVPNConnection
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.VpnTunnelOptionsSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VPNConnection
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html>
+    VPNConnection {haddock_workaround_ :: (),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-customergatewayid>
+                   customerGatewayId :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-enableacceleration>
+                   enableAcceleration :: (Prelude.Maybe (Value Prelude.Bool)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-localipv4networkcidr>
+                   localIpv4NetworkCidr :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-localipv6networkcidr>
+                   localIpv6NetworkCidr :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-outsideipaddresstype>
+                   outsideIpAddressType :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-presharedkeystorage>
+                   preSharedKeyStorage :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-remoteipv4networkcidr>
+                   remoteIpv4NetworkCidr :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-remoteipv6networkcidr>
+                   remoteIpv6NetworkCidr :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-staticroutesonly>
+                   staticRoutesOnly :: (Prelude.Maybe (Value Prelude.Bool)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-tags>
+                   tags :: (Prelude.Maybe [Tag]),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-transitgatewayid>
+                   transitGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-transporttransitgatewayattachmentid>
+                   transportTransitGatewayAttachmentId :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-tunnelinsideipversion>
+                   tunnelInsideIpVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-type>
+                   type' :: (Value Prelude.Text),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-vpngatewayid>
+                   vpnGatewayId :: (Prelude.Maybe (Value Prelude.Text)),
+                   -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnection.html#cfn-ec2-vpnconnection-vpntunneloptionsspecifications>
+                   vpnTunnelOptionsSpecifications :: (Prelude.Maybe [VpnTunnelOptionsSpecificationProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPNConnection ::
+  Value Prelude.Text -> Value Prelude.Text -> VPNConnection
+mkVPNConnection customerGatewayId type'
+  = VPNConnection
+      {haddock_workaround_ = (), customerGatewayId = customerGatewayId,
+       type' = type', enableAcceleration = Prelude.Nothing,
+       localIpv4NetworkCidr = Prelude.Nothing,
+       localIpv6NetworkCidr = Prelude.Nothing,
+       outsideIpAddressType = Prelude.Nothing,
+       preSharedKeyStorage = Prelude.Nothing,
+       remoteIpv4NetworkCidr = Prelude.Nothing,
+       remoteIpv6NetworkCidr = Prelude.Nothing,
+       staticRoutesOnly = Prelude.Nothing, tags = Prelude.Nothing,
+       transitGatewayId = Prelude.Nothing,
+       transportTransitGatewayAttachmentId = Prelude.Nothing,
+       tunnelInsideIpVersion = Prelude.Nothing,
+       vpnGatewayId = Prelude.Nothing,
+       vpnTunnelOptionsSpecifications = Prelude.Nothing}
+instance ToResourceProperties VPNConnection where
+  toResourceProperties VPNConnection {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["CustomerGatewayId" JSON..= customerGatewayId,
+                            "Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "EnableAcceleration" Prelude.<$> enableAcceleration,
+                               (JSON..=) "LocalIpv4NetworkCidr" Prelude.<$> localIpv4NetworkCidr,
+                               (JSON..=) "LocalIpv6NetworkCidr" Prelude.<$> localIpv6NetworkCidr,
+                               (JSON..=) "OutsideIpAddressType" Prelude.<$> outsideIpAddressType,
+                               (JSON..=) "PreSharedKeyStorage" Prelude.<$> preSharedKeyStorage,
+                               (JSON..=) "RemoteIpv4NetworkCidr"
+                                 Prelude.<$> remoteIpv4NetworkCidr,
+                               (JSON..=) "RemoteIpv6NetworkCidr"
+                                 Prelude.<$> remoteIpv6NetworkCidr,
+                               (JSON..=) "StaticRoutesOnly" Prelude.<$> staticRoutesOnly,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "TransitGatewayId" Prelude.<$> transitGatewayId,
+                               (JSON..=) "TransportTransitGatewayAttachmentId"
+                                 Prelude.<$> transportTransitGatewayAttachmentId,
+                               (JSON..=) "TunnelInsideIpVersion"
+                                 Prelude.<$> tunnelInsideIpVersion,
+                               (JSON..=) "VpnGatewayId" Prelude.<$> vpnGatewayId,
+                               (JSON..=) "VpnTunnelOptionsSpecifications"
+                                 Prelude.<$> vpnTunnelOptionsSpecifications]))}
+instance JSON.ToJSON VPNConnection where
+  toJSON VPNConnection {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["CustomerGatewayId" JSON..= customerGatewayId,
+               "Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "EnableAcceleration" Prelude.<$> enableAcceleration,
+                  (JSON..=) "LocalIpv4NetworkCidr" Prelude.<$> localIpv4NetworkCidr,
+                  (JSON..=) "LocalIpv6NetworkCidr" Prelude.<$> localIpv6NetworkCidr,
+                  (JSON..=) "OutsideIpAddressType" Prelude.<$> outsideIpAddressType,
+                  (JSON..=) "PreSharedKeyStorage" Prelude.<$> preSharedKeyStorage,
+                  (JSON..=) "RemoteIpv4NetworkCidr"
+                    Prelude.<$> remoteIpv4NetworkCidr,
+                  (JSON..=) "RemoteIpv6NetworkCidr"
+                    Prelude.<$> remoteIpv6NetworkCidr,
+                  (JSON..=) "StaticRoutesOnly" Prelude.<$> staticRoutesOnly,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "TransitGatewayId" Prelude.<$> transitGatewayId,
+                  (JSON..=) "TransportTransitGatewayAttachmentId"
+                    Prelude.<$> transportTransitGatewayAttachmentId,
+                  (JSON..=) "TunnelInsideIpVersion"
+                    Prelude.<$> tunnelInsideIpVersion,
+                  (JSON..=) "VpnGatewayId" Prelude.<$> vpnGatewayId,
+                  (JSON..=) "VpnTunnelOptionsSpecifications"
+                    Prelude.<$> vpnTunnelOptionsSpecifications])))
+instance Property "CustomerGatewayId" VPNConnection where
+  type PropertyType "CustomerGatewayId" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {customerGatewayId = newValue, ..}
+instance Property "EnableAcceleration" VPNConnection where
+  type PropertyType "EnableAcceleration" VPNConnection = Value Prelude.Bool
+  set newValue VPNConnection {..}
+    = VPNConnection {enableAcceleration = Prelude.pure newValue, ..}
+instance Property "LocalIpv4NetworkCidr" VPNConnection where
+  type PropertyType "LocalIpv4NetworkCidr" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {localIpv4NetworkCidr = Prelude.pure newValue, ..}
+instance Property "LocalIpv6NetworkCidr" VPNConnection where
+  type PropertyType "LocalIpv6NetworkCidr" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {localIpv6NetworkCidr = Prelude.pure newValue, ..}
+instance Property "OutsideIpAddressType" VPNConnection where
+  type PropertyType "OutsideIpAddressType" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {outsideIpAddressType = Prelude.pure newValue, ..}
+instance Property "PreSharedKeyStorage" VPNConnection where
+  type PropertyType "PreSharedKeyStorage" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {preSharedKeyStorage = Prelude.pure newValue, ..}
+instance Property "RemoteIpv4NetworkCidr" VPNConnection where
+  type PropertyType "RemoteIpv4NetworkCidr" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {remoteIpv4NetworkCidr = Prelude.pure newValue, ..}
+instance Property "RemoteIpv6NetworkCidr" VPNConnection where
+  type PropertyType "RemoteIpv6NetworkCidr" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {remoteIpv6NetworkCidr = Prelude.pure newValue, ..}
+instance Property "StaticRoutesOnly" VPNConnection where
+  type PropertyType "StaticRoutesOnly" VPNConnection = Value Prelude.Bool
+  set newValue VPNConnection {..}
+    = VPNConnection {staticRoutesOnly = Prelude.pure newValue, ..}
+instance Property "Tags" VPNConnection where
+  type PropertyType "Tags" VPNConnection = [Tag]
+  set newValue VPNConnection {..}
+    = VPNConnection {tags = Prelude.pure newValue, ..}
+instance Property "TransitGatewayId" VPNConnection where
+  type PropertyType "TransitGatewayId" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {transitGatewayId = Prelude.pure newValue, ..}
+instance Property "TransportTransitGatewayAttachmentId" VPNConnection where
+  type PropertyType "TransportTransitGatewayAttachmentId" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection
+        {transportTransitGatewayAttachmentId = Prelude.pure newValue, ..}
+instance Property "TunnelInsideIpVersion" VPNConnection where
+  type PropertyType "TunnelInsideIpVersion" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {tunnelInsideIpVersion = Prelude.pure newValue, ..}
+instance Property "Type" VPNConnection where
+  type PropertyType "Type" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {type' = newValue, ..}
+instance Property "VpnGatewayId" VPNConnection where
+  type PropertyType "VpnGatewayId" VPNConnection = Value Prelude.Text
+  set newValue VPNConnection {..}
+    = VPNConnection {vpnGatewayId = Prelude.pure newValue, ..}
+instance Property "VpnTunnelOptionsSpecifications" VPNConnection where
+  type PropertyType "VpnTunnelOptionsSpecifications" VPNConnection = [VpnTunnelOptionsSpecificationProperty]
+  set newValue VPNConnection {..}
+    = VPNConnection
+        {vpnTunnelOptionsSpecifications = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/CloudwatchLogOptionsSpecificationProperty.hs b/gen/Stratosphere/EC2/VPNConnection/CloudwatchLogOptionsSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/CloudwatchLogOptionsSpecificationProperty.hs
@@ -0,0 +1,58 @@
+module Stratosphere.EC2.VPNConnection.CloudwatchLogOptionsSpecificationProperty (
+        CloudwatchLogOptionsSpecificationProperty(..),
+        mkCloudwatchLogOptionsSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CloudwatchLogOptionsSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-cloudwatchlogoptionsspecification.html>
+    CloudwatchLogOptionsSpecificationProperty {haddock_workaround_ :: (),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-cloudwatchlogoptionsspecification.html#cfn-ec2-vpnconnection-cloudwatchlogoptionsspecification-logenabled>
+                                               logEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-cloudwatchlogoptionsspecification.html#cfn-ec2-vpnconnection-cloudwatchlogoptionsspecification-loggrouparn>
+                                               logGroupArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                               -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-cloudwatchlogoptionsspecification.html#cfn-ec2-vpnconnection-cloudwatchlogoptionsspecification-logoutputformat>
+                                               logOutputFormat :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCloudwatchLogOptionsSpecificationProperty ::
+  CloudwatchLogOptionsSpecificationProperty
+mkCloudwatchLogOptionsSpecificationProperty
+  = CloudwatchLogOptionsSpecificationProperty
+      {haddock_workaround_ = (), logEnabled = Prelude.Nothing,
+       logGroupArn = Prelude.Nothing, logOutputFormat = Prelude.Nothing}
+instance ToResourceProperties CloudwatchLogOptionsSpecificationProperty where
+  toResourceProperties CloudwatchLogOptionsSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.CloudwatchLogOptionsSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LogEnabled" Prelude.<$> logEnabled,
+                            (JSON..=) "LogGroupArn" Prelude.<$> logGroupArn,
+                            (JSON..=) "LogOutputFormat" Prelude.<$> logOutputFormat])}
+instance JSON.ToJSON CloudwatchLogOptionsSpecificationProperty where
+  toJSON CloudwatchLogOptionsSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LogEnabled" Prelude.<$> logEnabled,
+               (JSON..=) "LogGroupArn" Prelude.<$> logGroupArn,
+               (JSON..=) "LogOutputFormat" Prelude.<$> logOutputFormat]))
+instance Property "LogEnabled" CloudwatchLogOptionsSpecificationProperty where
+  type PropertyType "LogEnabled" CloudwatchLogOptionsSpecificationProperty = Value Prelude.Bool
+  set newValue CloudwatchLogOptionsSpecificationProperty {..}
+    = CloudwatchLogOptionsSpecificationProperty
+        {logEnabled = Prelude.pure newValue, ..}
+instance Property "LogGroupArn" CloudwatchLogOptionsSpecificationProperty where
+  type PropertyType "LogGroupArn" CloudwatchLogOptionsSpecificationProperty = Value Prelude.Text
+  set newValue CloudwatchLogOptionsSpecificationProperty {..}
+    = CloudwatchLogOptionsSpecificationProperty
+        {logGroupArn = Prelude.pure newValue, ..}
+instance Property "LogOutputFormat" CloudwatchLogOptionsSpecificationProperty where
+  type PropertyType "LogOutputFormat" CloudwatchLogOptionsSpecificationProperty = Value Prelude.Text
+  set newValue CloudwatchLogOptionsSpecificationProperty {..}
+    = CloudwatchLogOptionsSpecificationProperty
+        {logOutputFormat = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/CloudwatchLogOptionsSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/CloudwatchLogOptionsSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/CloudwatchLogOptionsSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.CloudwatchLogOptionsSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CloudwatchLogOptionsSpecificationProperty :: Prelude.Type
+instance ToResourceProperties CloudwatchLogOptionsSpecificationProperty
+instance Prelude.Eq CloudwatchLogOptionsSpecificationProperty
+instance Prelude.Show CloudwatchLogOptionsSpecificationProperty
+instance JSON.ToJSON CloudwatchLogOptionsSpecificationProperty
diff --git a/gen/Stratosphere/EC2/VPNConnection/IKEVersionsRequestListValueProperty.hs b/gen/Stratosphere/EC2/VPNConnection/IKEVersionsRequestListValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/IKEVersionsRequestListValueProperty.hs
@@ -0,0 +1,37 @@
+module Stratosphere.EC2.VPNConnection.IKEVersionsRequestListValueProperty (
+        IKEVersionsRequestListValueProperty(..),
+        mkIKEVersionsRequestListValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data IKEVersionsRequestListValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-ikeversionsrequestlistvalue.html>
+    IKEVersionsRequestListValueProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-ikeversionsrequestlistvalue.html#cfn-ec2-vpnconnection-ikeversionsrequestlistvalue-value>
+                                         value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkIKEVersionsRequestListValueProperty ::
+  IKEVersionsRequestListValueProperty
+mkIKEVersionsRequestListValueProperty
+  = IKEVersionsRequestListValueProperty
+      {haddock_workaround_ = (), value = Prelude.Nothing}
+instance ToResourceProperties IKEVersionsRequestListValueProperty where
+  toResourceProperties IKEVersionsRequestListValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.IKEVersionsRequestListValue",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON IKEVersionsRequestListValueProperty where
+  toJSON IKEVersionsRequestListValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value]))
+instance Property "Value" IKEVersionsRequestListValueProperty where
+  type PropertyType "Value" IKEVersionsRequestListValueProperty = Value Prelude.Text
+  set newValue IKEVersionsRequestListValueProperty {..}
+    = IKEVersionsRequestListValueProperty
+        {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/IKEVersionsRequestListValueProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/IKEVersionsRequestListValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/IKEVersionsRequestListValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.IKEVersionsRequestListValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data IKEVersionsRequestListValueProperty :: Prelude.Type
+instance ToResourceProperties IKEVersionsRequestListValueProperty
+instance Prelude.Eq IKEVersionsRequestListValueProperty
+instance Prelude.Show IKEVersionsRequestListValueProperty
+instance JSON.ToJSON IKEVersionsRequestListValueProperty
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase1DHGroupNumbersRequestListValueProperty.hs b/gen/Stratosphere/EC2/VPNConnection/Phase1DHGroupNumbersRequestListValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase1DHGroupNumbersRequestListValueProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EC2.VPNConnection.Phase1DHGroupNumbersRequestListValueProperty (
+        Phase1DHGroupNumbersRequestListValueProperty(..),
+        mkPhase1DHGroupNumbersRequestListValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Phase1DHGroupNumbersRequestListValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase1dhgroupnumbersrequestlistvalue.html>
+    Phase1DHGroupNumbersRequestListValueProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase1dhgroupnumbersrequestlistvalue.html#cfn-ec2-vpnconnection-phase1dhgroupnumbersrequestlistvalue-value>
+                                                  value :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPhase1DHGroupNumbersRequestListValueProperty ::
+  Phase1DHGroupNumbersRequestListValueProperty
+mkPhase1DHGroupNumbersRequestListValueProperty
+  = Phase1DHGroupNumbersRequestListValueProperty
+      {haddock_workaround_ = (), value = Prelude.Nothing}
+instance ToResourceProperties Phase1DHGroupNumbersRequestListValueProperty where
+  toResourceProperties
+    Phase1DHGroupNumbersRequestListValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.Phase1DHGroupNumbersRequestListValue",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON Phase1DHGroupNumbersRequestListValueProperty where
+  toJSON Phase1DHGroupNumbersRequestListValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value]))
+instance Property "Value" Phase1DHGroupNumbersRequestListValueProperty where
+  type PropertyType "Value" Phase1DHGroupNumbersRequestListValueProperty = Value Prelude.Integer
+  set newValue Phase1DHGroupNumbersRequestListValueProperty {..}
+    = Phase1DHGroupNumbersRequestListValueProperty
+        {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase1DHGroupNumbersRequestListValueProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/Phase1DHGroupNumbersRequestListValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase1DHGroupNumbersRequestListValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.Phase1DHGroupNumbersRequestListValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Phase1DHGroupNumbersRequestListValueProperty :: Prelude.Type
+instance ToResourceProperties Phase1DHGroupNumbersRequestListValueProperty
+instance Prelude.Eq Phase1DHGroupNumbersRequestListValueProperty
+instance Prelude.Show Phase1DHGroupNumbersRequestListValueProperty
+instance JSON.ToJSON Phase1DHGroupNumbersRequestListValueProperty
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase1EncryptionAlgorithmsRequestListValueProperty.hs b/gen/Stratosphere/EC2/VPNConnection/Phase1EncryptionAlgorithmsRequestListValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase1EncryptionAlgorithmsRequestListValueProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.EC2.VPNConnection.Phase1EncryptionAlgorithmsRequestListValueProperty (
+        Phase1EncryptionAlgorithmsRequestListValueProperty(..),
+        mkPhase1EncryptionAlgorithmsRequestListValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Phase1EncryptionAlgorithmsRequestListValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase1encryptionalgorithmsrequestlistvalue.html>
+    Phase1EncryptionAlgorithmsRequestListValueProperty {haddock_workaround_ :: (),
+                                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase1encryptionalgorithmsrequestlistvalue.html#cfn-ec2-vpnconnection-phase1encryptionalgorithmsrequestlistvalue-value>
+                                                        value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPhase1EncryptionAlgorithmsRequestListValueProperty ::
+  Phase1EncryptionAlgorithmsRequestListValueProperty
+mkPhase1EncryptionAlgorithmsRequestListValueProperty
+  = Phase1EncryptionAlgorithmsRequestListValueProperty
+      {haddock_workaround_ = (), value = Prelude.Nothing}
+instance ToResourceProperties Phase1EncryptionAlgorithmsRequestListValueProperty where
+  toResourceProperties
+    Phase1EncryptionAlgorithmsRequestListValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.Phase1EncryptionAlgorithmsRequestListValue",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON Phase1EncryptionAlgorithmsRequestListValueProperty where
+  toJSON Phase1EncryptionAlgorithmsRequestListValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value]))
+instance Property "Value" Phase1EncryptionAlgorithmsRequestListValueProperty where
+  type PropertyType "Value" Phase1EncryptionAlgorithmsRequestListValueProperty = Value Prelude.Text
+  set
+    newValue
+    Phase1EncryptionAlgorithmsRequestListValueProperty {..}
+    = Phase1EncryptionAlgorithmsRequestListValueProperty
+        {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase1EncryptionAlgorithmsRequestListValueProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/Phase1EncryptionAlgorithmsRequestListValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase1EncryptionAlgorithmsRequestListValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.Phase1EncryptionAlgorithmsRequestListValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Phase1EncryptionAlgorithmsRequestListValueProperty :: Prelude.Type
+instance ToResourceProperties Phase1EncryptionAlgorithmsRequestListValueProperty
+instance Prelude.Eq Phase1EncryptionAlgorithmsRequestListValueProperty
+instance Prelude.Show Phase1EncryptionAlgorithmsRequestListValueProperty
+instance JSON.ToJSON Phase1EncryptionAlgorithmsRequestListValueProperty
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase1IntegrityAlgorithmsRequestListValueProperty.hs b/gen/Stratosphere/EC2/VPNConnection/Phase1IntegrityAlgorithmsRequestListValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase1IntegrityAlgorithmsRequestListValueProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EC2.VPNConnection.Phase1IntegrityAlgorithmsRequestListValueProperty (
+        Phase1IntegrityAlgorithmsRequestListValueProperty(..),
+        mkPhase1IntegrityAlgorithmsRequestListValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Phase1IntegrityAlgorithmsRequestListValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase1integrityalgorithmsrequestlistvalue.html>
+    Phase1IntegrityAlgorithmsRequestListValueProperty {haddock_workaround_ :: (),
+                                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase1integrityalgorithmsrequestlistvalue.html#cfn-ec2-vpnconnection-phase1integrityalgorithmsrequestlistvalue-value>
+                                                       value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPhase1IntegrityAlgorithmsRequestListValueProperty ::
+  Phase1IntegrityAlgorithmsRequestListValueProperty
+mkPhase1IntegrityAlgorithmsRequestListValueProperty
+  = Phase1IntegrityAlgorithmsRequestListValueProperty
+      {haddock_workaround_ = (), value = Prelude.Nothing}
+instance ToResourceProperties Phase1IntegrityAlgorithmsRequestListValueProperty where
+  toResourceProperties
+    Phase1IntegrityAlgorithmsRequestListValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.Phase1IntegrityAlgorithmsRequestListValue",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON Phase1IntegrityAlgorithmsRequestListValueProperty where
+  toJSON Phase1IntegrityAlgorithmsRequestListValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value]))
+instance Property "Value" Phase1IntegrityAlgorithmsRequestListValueProperty where
+  type PropertyType "Value" Phase1IntegrityAlgorithmsRequestListValueProperty = Value Prelude.Text
+  set newValue Phase1IntegrityAlgorithmsRequestListValueProperty {..}
+    = Phase1IntegrityAlgorithmsRequestListValueProperty
+        {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase1IntegrityAlgorithmsRequestListValueProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/Phase1IntegrityAlgorithmsRequestListValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase1IntegrityAlgorithmsRequestListValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.Phase1IntegrityAlgorithmsRequestListValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Phase1IntegrityAlgorithmsRequestListValueProperty :: Prelude.Type
+instance ToResourceProperties Phase1IntegrityAlgorithmsRequestListValueProperty
+instance Prelude.Eq Phase1IntegrityAlgorithmsRequestListValueProperty
+instance Prelude.Show Phase1IntegrityAlgorithmsRequestListValueProperty
+instance JSON.ToJSON Phase1IntegrityAlgorithmsRequestListValueProperty
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase2DHGroupNumbersRequestListValueProperty.hs b/gen/Stratosphere/EC2/VPNConnection/Phase2DHGroupNumbersRequestListValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase2DHGroupNumbersRequestListValueProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EC2.VPNConnection.Phase2DHGroupNumbersRequestListValueProperty (
+        Phase2DHGroupNumbersRequestListValueProperty(..),
+        mkPhase2DHGroupNumbersRequestListValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Phase2DHGroupNumbersRequestListValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase2dhgroupnumbersrequestlistvalue.html>
+    Phase2DHGroupNumbersRequestListValueProperty {haddock_workaround_ :: (),
+                                                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase2dhgroupnumbersrequestlistvalue.html#cfn-ec2-vpnconnection-phase2dhgroupnumbersrequestlistvalue-value>
+                                                  value :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPhase2DHGroupNumbersRequestListValueProperty ::
+  Phase2DHGroupNumbersRequestListValueProperty
+mkPhase2DHGroupNumbersRequestListValueProperty
+  = Phase2DHGroupNumbersRequestListValueProperty
+      {haddock_workaround_ = (), value = Prelude.Nothing}
+instance ToResourceProperties Phase2DHGroupNumbersRequestListValueProperty where
+  toResourceProperties
+    Phase2DHGroupNumbersRequestListValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.Phase2DHGroupNumbersRequestListValue",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON Phase2DHGroupNumbersRequestListValueProperty where
+  toJSON Phase2DHGroupNumbersRequestListValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value]))
+instance Property "Value" Phase2DHGroupNumbersRequestListValueProperty where
+  type PropertyType "Value" Phase2DHGroupNumbersRequestListValueProperty = Value Prelude.Integer
+  set newValue Phase2DHGroupNumbersRequestListValueProperty {..}
+    = Phase2DHGroupNumbersRequestListValueProperty
+        {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase2DHGroupNumbersRequestListValueProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/Phase2DHGroupNumbersRequestListValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase2DHGroupNumbersRequestListValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.Phase2DHGroupNumbersRequestListValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Phase2DHGroupNumbersRequestListValueProperty :: Prelude.Type
+instance ToResourceProperties Phase2DHGroupNumbersRequestListValueProperty
+instance Prelude.Eq Phase2DHGroupNumbersRequestListValueProperty
+instance Prelude.Show Phase2DHGroupNumbersRequestListValueProperty
+instance JSON.ToJSON Phase2DHGroupNumbersRequestListValueProperty
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase2EncryptionAlgorithmsRequestListValueProperty.hs b/gen/Stratosphere/EC2/VPNConnection/Phase2EncryptionAlgorithmsRequestListValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase2EncryptionAlgorithmsRequestListValueProperty.hs
@@ -0,0 +1,40 @@
+module Stratosphere.EC2.VPNConnection.Phase2EncryptionAlgorithmsRequestListValueProperty (
+        Phase2EncryptionAlgorithmsRequestListValueProperty(..),
+        mkPhase2EncryptionAlgorithmsRequestListValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Phase2EncryptionAlgorithmsRequestListValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase2encryptionalgorithmsrequestlistvalue.html>
+    Phase2EncryptionAlgorithmsRequestListValueProperty {haddock_workaround_ :: (),
+                                                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase2encryptionalgorithmsrequestlistvalue.html#cfn-ec2-vpnconnection-phase2encryptionalgorithmsrequestlistvalue-value>
+                                                        value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPhase2EncryptionAlgorithmsRequestListValueProperty ::
+  Phase2EncryptionAlgorithmsRequestListValueProperty
+mkPhase2EncryptionAlgorithmsRequestListValueProperty
+  = Phase2EncryptionAlgorithmsRequestListValueProperty
+      {haddock_workaround_ = (), value = Prelude.Nothing}
+instance ToResourceProperties Phase2EncryptionAlgorithmsRequestListValueProperty where
+  toResourceProperties
+    Phase2EncryptionAlgorithmsRequestListValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.Phase2EncryptionAlgorithmsRequestListValue",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON Phase2EncryptionAlgorithmsRequestListValueProperty where
+  toJSON Phase2EncryptionAlgorithmsRequestListValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value]))
+instance Property "Value" Phase2EncryptionAlgorithmsRequestListValueProperty where
+  type PropertyType "Value" Phase2EncryptionAlgorithmsRequestListValueProperty = Value Prelude.Text
+  set
+    newValue
+    Phase2EncryptionAlgorithmsRequestListValueProperty {..}
+    = Phase2EncryptionAlgorithmsRequestListValueProperty
+        {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase2EncryptionAlgorithmsRequestListValueProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/Phase2EncryptionAlgorithmsRequestListValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase2EncryptionAlgorithmsRequestListValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.Phase2EncryptionAlgorithmsRequestListValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Phase2EncryptionAlgorithmsRequestListValueProperty :: Prelude.Type
+instance ToResourceProperties Phase2EncryptionAlgorithmsRequestListValueProperty
+instance Prelude.Eq Phase2EncryptionAlgorithmsRequestListValueProperty
+instance Prelude.Show Phase2EncryptionAlgorithmsRequestListValueProperty
+instance JSON.ToJSON Phase2EncryptionAlgorithmsRequestListValueProperty
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase2IntegrityAlgorithmsRequestListValueProperty.hs b/gen/Stratosphere/EC2/VPNConnection/Phase2IntegrityAlgorithmsRequestListValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase2IntegrityAlgorithmsRequestListValueProperty.hs
@@ -0,0 +1,38 @@
+module Stratosphere.EC2.VPNConnection.Phase2IntegrityAlgorithmsRequestListValueProperty (
+        Phase2IntegrityAlgorithmsRequestListValueProperty(..),
+        mkPhase2IntegrityAlgorithmsRequestListValueProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data Phase2IntegrityAlgorithmsRequestListValueProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase2integrityalgorithmsrequestlistvalue.html>
+    Phase2IntegrityAlgorithmsRequestListValueProperty {haddock_workaround_ :: (),
+                                                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-phase2integrityalgorithmsrequestlistvalue.html#cfn-ec2-vpnconnection-phase2integrityalgorithmsrequestlistvalue-value>
+                                                       value :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPhase2IntegrityAlgorithmsRequestListValueProperty ::
+  Phase2IntegrityAlgorithmsRequestListValueProperty
+mkPhase2IntegrityAlgorithmsRequestListValueProperty
+  = Phase2IntegrityAlgorithmsRequestListValueProperty
+      {haddock_workaround_ = (), value = Prelude.Nothing}
+instance ToResourceProperties Phase2IntegrityAlgorithmsRequestListValueProperty where
+  toResourceProperties
+    Phase2IntegrityAlgorithmsRequestListValueProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.Phase2IntegrityAlgorithmsRequestListValue",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value])}
+instance JSON.ToJSON Phase2IntegrityAlgorithmsRequestListValueProperty where
+  toJSON Phase2IntegrityAlgorithmsRequestListValueProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes [(JSON..=) "Value" Prelude.<$> value]))
+instance Property "Value" Phase2IntegrityAlgorithmsRequestListValueProperty where
+  type PropertyType "Value" Phase2IntegrityAlgorithmsRequestListValueProperty = Value Prelude.Text
+  set newValue Phase2IntegrityAlgorithmsRequestListValueProperty {..}
+    = Phase2IntegrityAlgorithmsRequestListValueProperty
+        {value = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/Phase2IntegrityAlgorithmsRequestListValueProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/Phase2IntegrityAlgorithmsRequestListValueProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/Phase2IntegrityAlgorithmsRequestListValueProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.Phase2IntegrityAlgorithmsRequestListValueProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data Phase2IntegrityAlgorithmsRequestListValueProperty :: Prelude.Type
+instance ToResourceProperties Phase2IntegrityAlgorithmsRequestListValueProperty
+instance Prelude.Eq Phase2IntegrityAlgorithmsRequestListValueProperty
+instance Prelude.Show Phase2IntegrityAlgorithmsRequestListValueProperty
+instance JSON.ToJSON Phase2IntegrityAlgorithmsRequestListValueProperty
diff --git a/gen/Stratosphere/EC2/VPNConnection/VpnTunnelLogOptionsSpecificationProperty.hs b/gen/Stratosphere/EC2/VPNConnection/VpnTunnelLogOptionsSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/VpnTunnelLogOptionsSpecificationProperty.hs
@@ -0,0 +1,41 @@
+module Stratosphere.EC2.VPNConnection.VpnTunnelLogOptionsSpecificationProperty (
+        module Exports, VpnTunnelLogOptionsSpecificationProperty(..),
+        mkVpnTunnelLogOptionsSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.CloudwatchLogOptionsSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+data VpnTunnelLogOptionsSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunnellogoptionsspecification.html>
+    VpnTunnelLogOptionsSpecificationProperty {haddock_workaround_ :: (),
+                                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunnellogoptionsspecification.html#cfn-ec2-vpnconnection-vpntunnellogoptionsspecification-cloudwatchlogoptions>
+                                              cloudwatchLogOptions :: (Prelude.Maybe CloudwatchLogOptionsSpecificationProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVpnTunnelLogOptionsSpecificationProperty ::
+  VpnTunnelLogOptionsSpecificationProperty
+mkVpnTunnelLogOptionsSpecificationProperty
+  = VpnTunnelLogOptionsSpecificationProperty
+      {haddock_workaround_ = (), cloudwatchLogOptions = Prelude.Nothing}
+instance ToResourceProperties VpnTunnelLogOptionsSpecificationProperty where
+  toResourceProperties VpnTunnelLogOptionsSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.VpnTunnelLogOptionsSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CloudwatchLogOptions"
+                              Prelude.<$> cloudwatchLogOptions])}
+instance JSON.ToJSON VpnTunnelLogOptionsSpecificationProperty where
+  toJSON VpnTunnelLogOptionsSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CloudwatchLogOptions"
+                 Prelude.<$> cloudwatchLogOptions]))
+instance Property "CloudwatchLogOptions" VpnTunnelLogOptionsSpecificationProperty where
+  type PropertyType "CloudwatchLogOptions" VpnTunnelLogOptionsSpecificationProperty = CloudwatchLogOptionsSpecificationProperty
+  set newValue VpnTunnelLogOptionsSpecificationProperty {..}
+    = VpnTunnelLogOptionsSpecificationProperty
+        {cloudwatchLogOptions = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/VpnTunnelLogOptionsSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/VpnTunnelLogOptionsSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/VpnTunnelLogOptionsSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.VpnTunnelLogOptionsSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VpnTunnelLogOptionsSpecificationProperty :: Prelude.Type
+instance ToResourceProperties VpnTunnelLogOptionsSpecificationProperty
+instance Prelude.Eq VpnTunnelLogOptionsSpecificationProperty
+instance Prelude.Show VpnTunnelLogOptionsSpecificationProperty
+instance JSON.ToJSON VpnTunnelLogOptionsSpecificationProperty
diff --git a/gen/Stratosphere/EC2/VPNConnection/VpnTunnelOptionsSpecificationProperty.hs b/gen/Stratosphere/EC2/VPNConnection/VpnTunnelOptionsSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/VpnTunnelOptionsSpecificationProperty.hs
@@ -0,0 +1,254 @@
+module Stratosphere.EC2.VPNConnection.VpnTunnelOptionsSpecificationProperty (
+        module Exports, VpnTunnelOptionsSpecificationProperty(..),
+        mkVpnTunnelOptionsSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.IKEVersionsRequestListValueProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.Phase1DHGroupNumbersRequestListValueProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.Phase1EncryptionAlgorithmsRequestListValueProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.Phase1IntegrityAlgorithmsRequestListValueProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.Phase2DHGroupNumbersRequestListValueProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.Phase2EncryptionAlgorithmsRequestListValueProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.Phase2IntegrityAlgorithmsRequestListValueProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VPNConnection.VpnTunnelLogOptionsSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VpnTunnelOptionsSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html>
+    VpnTunnelOptionsSpecificationProperty {haddock_workaround_ :: (),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-dpdtimeoutaction>
+                                           dPDTimeoutAction :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-dpdtimeoutseconds>
+                                           dPDTimeoutSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-enabletunnellifecyclecontrol>
+                                           enableTunnelLifecycleControl :: (Prelude.Maybe (Value Prelude.Bool)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-ikeversions>
+                                           iKEVersions :: (Prelude.Maybe [IKEVersionsRequestListValueProperty]),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-logoptions>
+                                           logOptions :: (Prelude.Maybe VpnTunnelLogOptionsSpecificationProperty),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-phase1dhgroupnumbers>
+                                           phase1DHGroupNumbers :: (Prelude.Maybe [Phase1DHGroupNumbersRequestListValueProperty]),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-phase1encryptionalgorithms>
+                                           phase1EncryptionAlgorithms :: (Prelude.Maybe [Phase1EncryptionAlgorithmsRequestListValueProperty]),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-phase1integrityalgorithms>
+                                           phase1IntegrityAlgorithms :: (Prelude.Maybe [Phase1IntegrityAlgorithmsRequestListValueProperty]),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-phase1lifetimeseconds>
+                                           phase1LifetimeSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-phase2dhgroupnumbers>
+                                           phase2DHGroupNumbers :: (Prelude.Maybe [Phase2DHGroupNumbersRequestListValueProperty]),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-phase2encryptionalgorithms>
+                                           phase2EncryptionAlgorithms :: (Prelude.Maybe [Phase2EncryptionAlgorithmsRequestListValueProperty]),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-phase2integrityalgorithms>
+                                           phase2IntegrityAlgorithms :: (Prelude.Maybe [Phase2IntegrityAlgorithmsRequestListValueProperty]),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-phase2lifetimeseconds>
+                                           phase2LifetimeSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-presharedkey>
+                                           preSharedKey :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-rekeyfuzzpercentage>
+                                           rekeyFuzzPercentage :: (Prelude.Maybe (Value Prelude.Integer)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-rekeymargintimeseconds>
+                                           rekeyMarginTimeSeconds :: (Prelude.Maybe (Value Prelude.Integer)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-replaywindowsize>
+                                           replayWindowSize :: (Prelude.Maybe (Value Prelude.Integer)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-startupaction>
+                                           startupAction :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-tunnelinsidecidr>
+                                           tunnelInsideCidr :: (Prelude.Maybe (Value Prelude.Text)),
+                                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-vpnconnection-vpntunneloptionsspecification.html#cfn-ec2-vpnconnection-vpntunneloptionsspecification-tunnelinsideipv6cidr>
+                                           tunnelInsideIpv6Cidr :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVpnTunnelOptionsSpecificationProperty ::
+  VpnTunnelOptionsSpecificationProperty
+mkVpnTunnelOptionsSpecificationProperty
+  = VpnTunnelOptionsSpecificationProperty
+      {haddock_workaround_ = (), dPDTimeoutAction = Prelude.Nothing,
+       dPDTimeoutSeconds = Prelude.Nothing,
+       enableTunnelLifecycleControl = Prelude.Nothing,
+       iKEVersions = Prelude.Nothing, logOptions = Prelude.Nothing,
+       phase1DHGroupNumbers = Prelude.Nothing,
+       phase1EncryptionAlgorithms = Prelude.Nothing,
+       phase1IntegrityAlgorithms = Prelude.Nothing,
+       phase1LifetimeSeconds = Prelude.Nothing,
+       phase2DHGroupNumbers = Prelude.Nothing,
+       phase2EncryptionAlgorithms = Prelude.Nothing,
+       phase2IntegrityAlgorithms = Prelude.Nothing,
+       phase2LifetimeSeconds = Prelude.Nothing,
+       preSharedKey = Prelude.Nothing,
+       rekeyFuzzPercentage = Prelude.Nothing,
+       rekeyMarginTimeSeconds = Prelude.Nothing,
+       replayWindowSize = Prelude.Nothing,
+       startupAction = Prelude.Nothing,
+       tunnelInsideCidr = Prelude.Nothing,
+       tunnelInsideIpv6Cidr = Prelude.Nothing}
+instance ToResourceProperties VpnTunnelOptionsSpecificationProperty where
+  toResourceProperties VpnTunnelOptionsSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnection.VpnTunnelOptionsSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DPDTimeoutAction" Prelude.<$> dPDTimeoutAction,
+                            (JSON..=) "DPDTimeoutSeconds" Prelude.<$> dPDTimeoutSeconds,
+                            (JSON..=) "EnableTunnelLifecycleControl"
+                              Prelude.<$> enableTunnelLifecycleControl,
+                            (JSON..=) "IKEVersions" Prelude.<$> iKEVersions,
+                            (JSON..=) "LogOptions" Prelude.<$> logOptions,
+                            (JSON..=) "Phase1DHGroupNumbers" Prelude.<$> phase1DHGroupNumbers,
+                            (JSON..=) "Phase1EncryptionAlgorithms"
+                              Prelude.<$> phase1EncryptionAlgorithms,
+                            (JSON..=) "Phase1IntegrityAlgorithms"
+                              Prelude.<$> phase1IntegrityAlgorithms,
+                            (JSON..=) "Phase1LifetimeSeconds"
+                              Prelude.<$> phase1LifetimeSeconds,
+                            (JSON..=) "Phase2DHGroupNumbers" Prelude.<$> phase2DHGroupNumbers,
+                            (JSON..=) "Phase2EncryptionAlgorithms"
+                              Prelude.<$> phase2EncryptionAlgorithms,
+                            (JSON..=) "Phase2IntegrityAlgorithms"
+                              Prelude.<$> phase2IntegrityAlgorithms,
+                            (JSON..=) "Phase2LifetimeSeconds"
+                              Prelude.<$> phase2LifetimeSeconds,
+                            (JSON..=) "PreSharedKey" Prelude.<$> preSharedKey,
+                            (JSON..=) "RekeyFuzzPercentage" Prelude.<$> rekeyFuzzPercentage,
+                            (JSON..=) "RekeyMarginTimeSeconds"
+                              Prelude.<$> rekeyMarginTimeSeconds,
+                            (JSON..=) "ReplayWindowSize" Prelude.<$> replayWindowSize,
+                            (JSON..=) "StartupAction" Prelude.<$> startupAction,
+                            (JSON..=) "TunnelInsideCidr" Prelude.<$> tunnelInsideCidr,
+                            (JSON..=) "TunnelInsideIpv6Cidr"
+                              Prelude.<$> tunnelInsideIpv6Cidr])}
+instance JSON.ToJSON VpnTunnelOptionsSpecificationProperty where
+  toJSON VpnTunnelOptionsSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DPDTimeoutAction" Prelude.<$> dPDTimeoutAction,
+               (JSON..=) "DPDTimeoutSeconds" Prelude.<$> dPDTimeoutSeconds,
+               (JSON..=) "EnableTunnelLifecycleControl"
+                 Prelude.<$> enableTunnelLifecycleControl,
+               (JSON..=) "IKEVersions" Prelude.<$> iKEVersions,
+               (JSON..=) "LogOptions" Prelude.<$> logOptions,
+               (JSON..=) "Phase1DHGroupNumbers" Prelude.<$> phase1DHGroupNumbers,
+               (JSON..=) "Phase1EncryptionAlgorithms"
+                 Prelude.<$> phase1EncryptionAlgorithms,
+               (JSON..=) "Phase1IntegrityAlgorithms"
+                 Prelude.<$> phase1IntegrityAlgorithms,
+               (JSON..=) "Phase1LifetimeSeconds"
+                 Prelude.<$> phase1LifetimeSeconds,
+               (JSON..=) "Phase2DHGroupNumbers" Prelude.<$> phase2DHGroupNumbers,
+               (JSON..=) "Phase2EncryptionAlgorithms"
+                 Prelude.<$> phase2EncryptionAlgorithms,
+               (JSON..=) "Phase2IntegrityAlgorithms"
+                 Prelude.<$> phase2IntegrityAlgorithms,
+               (JSON..=) "Phase2LifetimeSeconds"
+                 Prelude.<$> phase2LifetimeSeconds,
+               (JSON..=) "PreSharedKey" Prelude.<$> preSharedKey,
+               (JSON..=) "RekeyFuzzPercentage" Prelude.<$> rekeyFuzzPercentage,
+               (JSON..=) "RekeyMarginTimeSeconds"
+                 Prelude.<$> rekeyMarginTimeSeconds,
+               (JSON..=) "ReplayWindowSize" Prelude.<$> replayWindowSize,
+               (JSON..=) "StartupAction" Prelude.<$> startupAction,
+               (JSON..=) "TunnelInsideCidr" Prelude.<$> tunnelInsideCidr,
+               (JSON..=) "TunnelInsideIpv6Cidr"
+                 Prelude.<$> tunnelInsideIpv6Cidr]))
+instance Property "DPDTimeoutAction" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "DPDTimeoutAction" VpnTunnelOptionsSpecificationProperty = Value Prelude.Text
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {dPDTimeoutAction = Prelude.pure newValue, ..}
+instance Property "DPDTimeoutSeconds" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "DPDTimeoutSeconds" VpnTunnelOptionsSpecificationProperty = Value Prelude.Integer
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {dPDTimeoutSeconds = Prelude.pure newValue, ..}
+instance Property "EnableTunnelLifecycleControl" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "EnableTunnelLifecycleControl" VpnTunnelOptionsSpecificationProperty = Value Prelude.Bool
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {enableTunnelLifecycleControl = Prelude.pure newValue, ..}
+instance Property "IKEVersions" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "IKEVersions" VpnTunnelOptionsSpecificationProperty = [IKEVersionsRequestListValueProperty]
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {iKEVersions = Prelude.pure newValue, ..}
+instance Property "LogOptions" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "LogOptions" VpnTunnelOptionsSpecificationProperty = VpnTunnelLogOptionsSpecificationProperty
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {logOptions = Prelude.pure newValue, ..}
+instance Property "Phase1DHGroupNumbers" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "Phase1DHGroupNumbers" VpnTunnelOptionsSpecificationProperty = [Phase1DHGroupNumbersRequestListValueProperty]
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {phase1DHGroupNumbers = Prelude.pure newValue, ..}
+instance Property "Phase1EncryptionAlgorithms" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "Phase1EncryptionAlgorithms" VpnTunnelOptionsSpecificationProperty = [Phase1EncryptionAlgorithmsRequestListValueProperty]
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {phase1EncryptionAlgorithms = Prelude.pure newValue, ..}
+instance Property "Phase1IntegrityAlgorithms" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "Phase1IntegrityAlgorithms" VpnTunnelOptionsSpecificationProperty = [Phase1IntegrityAlgorithmsRequestListValueProperty]
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {phase1IntegrityAlgorithms = Prelude.pure newValue, ..}
+instance Property "Phase1LifetimeSeconds" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "Phase1LifetimeSeconds" VpnTunnelOptionsSpecificationProperty = Value Prelude.Integer
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {phase1LifetimeSeconds = Prelude.pure newValue, ..}
+instance Property "Phase2DHGroupNumbers" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "Phase2DHGroupNumbers" VpnTunnelOptionsSpecificationProperty = [Phase2DHGroupNumbersRequestListValueProperty]
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {phase2DHGroupNumbers = Prelude.pure newValue, ..}
+instance Property "Phase2EncryptionAlgorithms" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "Phase2EncryptionAlgorithms" VpnTunnelOptionsSpecificationProperty = [Phase2EncryptionAlgorithmsRequestListValueProperty]
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {phase2EncryptionAlgorithms = Prelude.pure newValue, ..}
+instance Property "Phase2IntegrityAlgorithms" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "Phase2IntegrityAlgorithms" VpnTunnelOptionsSpecificationProperty = [Phase2IntegrityAlgorithmsRequestListValueProperty]
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {phase2IntegrityAlgorithms = Prelude.pure newValue, ..}
+instance Property "Phase2LifetimeSeconds" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "Phase2LifetimeSeconds" VpnTunnelOptionsSpecificationProperty = Value Prelude.Integer
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {phase2LifetimeSeconds = Prelude.pure newValue, ..}
+instance Property "PreSharedKey" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "PreSharedKey" VpnTunnelOptionsSpecificationProperty = Value Prelude.Text
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {preSharedKey = Prelude.pure newValue, ..}
+instance Property "RekeyFuzzPercentage" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "RekeyFuzzPercentage" VpnTunnelOptionsSpecificationProperty = Value Prelude.Integer
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {rekeyFuzzPercentage = Prelude.pure newValue, ..}
+instance Property "RekeyMarginTimeSeconds" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "RekeyMarginTimeSeconds" VpnTunnelOptionsSpecificationProperty = Value Prelude.Integer
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {rekeyMarginTimeSeconds = Prelude.pure newValue, ..}
+instance Property "ReplayWindowSize" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "ReplayWindowSize" VpnTunnelOptionsSpecificationProperty = Value Prelude.Integer
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {replayWindowSize = Prelude.pure newValue, ..}
+instance Property "StartupAction" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "StartupAction" VpnTunnelOptionsSpecificationProperty = Value Prelude.Text
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {startupAction = Prelude.pure newValue, ..}
+instance Property "TunnelInsideCidr" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "TunnelInsideCidr" VpnTunnelOptionsSpecificationProperty = Value Prelude.Text
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {tunnelInsideCidr = Prelude.pure newValue, ..}
+instance Property "TunnelInsideIpv6Cidr" VpnTunnelOptionsSpecificationProperty where
+  type PropertyType "TunnelInsideIpv6Cidr" VpnTunnelOptionsSpecificationProperty = Value Prelude.Text
+  set newValue VpnTunnelOptionsSpecificationProperty {..}
+    = VpnTunnelOptionsSpecificationProperty
+        {tunnelInsideIpv6Cidr = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNConnection/VpnTunnelOptionsSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/VPNConnection/VpnTunnelOptionsSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnection/VpnTunnelOptionsSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VPNConnection.VpnTunnelOptionsSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VpnTunnelOptionsSpecificationProperty :: Prelude.Type
+instance ToResourceProperties VpnTunnelOptionsSpecificationProperty
+instance Prelude.Eq VpnTunnelOptionsSpecificationProperty
+instance Prelude.Show VpnTunnelOptionsSpecificationProperty
+instance JSON.ToJSON VpnTunnelOptionsSpecificationProperty
diff --git a/gen/Stratosphere/EC2/VPNConnectionRoute.hs b/gen/Stratosphere/EC2/VPNConnectionRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNConnectionRoute.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EC2.VPNConnectionRoute (
+        VPNConnectionRoute(..), mkVPNConnectionRoute
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VPNConnectionRoute
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnectionroute.html>
+    VPNConnectionRoute {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnectionroute.html#cfn-ec2-vpnconnectionroute-destinationcidrblock>
+                        destinationCidrBlock :: (Value Prelude.Text),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpnconnectionroute.html#cfn-ec2-vpnconnectionroute-vpnconnectionid>
+                        vpnConnectionId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPNConnectionRoute ::
+  Value Prelude.Text -> Value Prelude.Text -> VPNConnectionRoute
+mkVPNConnectionRoute destinationCidrBlock vpnConnectionId
+  = VPNConnectionRoute
+      {haddock_workaround_ = (),
+       destinationCidrBlock = destinationCidrBlock,
+       vpnConnectionId = vpnConnectionId}
+instance ToResourceProperties VPNConnectionRoute where
+  toResourceProperties VPNConnectionRoute {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNConnectionRoute",
+         supportsTags = Prelude.False,
+         properties = ["DestinationCidrBlock" JSON..= destinationCidrBlock,
+                       "VpnConnectionId" JSON..= vpnConnectionId]}
+instance JSON.ToJSON VPNConnectionRoute where
+  toJSON VPNConnectionRoute {..}
+    = JSON.object
+        ["DestinationCidrBlock" JSON..= destinationCidrBlock,
+         "VpnConnectionId" JSON..= vpnConnectionId]
+instance Property "DestinationCidrBlock" VPNConnectionRoute where
+  type PropertyType "DestinationCidrBlock" VPNConnectionRoute = Value Prelude.Text
+  set newValue VPNConnectionRoute {..}
+    = VPNConnectionRoute {destinationCidrBlock = newValue, ..}
+instance Property "VpnConnectionId" VPNConnectionRoute where
+  type PropertyType "VpnConnectionId" VPNConnectionRoute = Value Prelude.Text
+  set newValue VPNConnectionRoute {..}
+    = VPNConnectionRoute {vpnConnectionId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNGateway.hs b/gen/Stratosphere/EC2/VPNGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNGateway.hs
@@ -0,0 +1,54 @@
+module Stratosphere.EC2.VPNGateway (
+        VPNGateway(..), mkVPNGateway
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VPNGateway
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpngateway.html>
+    VPNGateway {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpngateway.html#cfn-ec2-vpngateway-amazonsideasn>
+                amazonSideAsn :: (Prelude.Maybe (Value Prelude.Integer)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpngateway.html#cfn-ec2-vpngateway-tags>
+                tags :: (Prelude.Maybe [Tag]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpngateway.html#cfn-ec2-vpngateway-type>
+                type' :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPNGateway :: Value Prelude.Text -> VPNGateway
+mkVPNGateway type'
+  = VPNGateway
+      {haddock_workaround_ = (), type' = type',
+       amazonSideAsn = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties VPNGateway where
+  toResourceProperties VPNGateway {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNGateway", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["Type" JSON..= type']
+                           (Prelude.catMaybes
+                              [(JSON..=) "AmazonSideAsn" Prelude.<$> amazonSideAsn,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON VPNGateway where
+  toJSON VPNGateway {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["Type" JSON..= type']
+              (Prelude.catMaybes
+                 [(JSON..=) "AmazonSideAsn" Prelude.<$> amazonSideAsn,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "AmazonSideAsn" VPNGateway where
+  type PropertyType "AmazonSideAsn" VPNGateway = Value Prelude.Integer
+  set newValue VPNGateway {..}
+    = VPNGateway {amazonSideAsn = Prelude.pure newValue, ..}
+instance Property "Tags" VPNGateway where
+  type PropertyType "Tags" VPNGateway = [Tag]
+  set newValue VPNGateway {..}
+    = VPNGateway {tags = Prelude.pure newValue, ..}
+instance Property "Type" VPNGateway where
+  type PropertyType "Type" VPNGateway = Value Prelude.Text
+  set newValue VPNGateway {..} = VPNGateway {type' = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VPNGatewayRoutePropagation.hs b/gen/Stratosphere/EC2/VPNGatewayRoutePropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VPNGatewayRoutePropagation.hs
@@ -0,0 +1,43 @@
+module Stratosphere.EC2.VPNGatewayRoutePropagation (
+        VPNGatewayRoutePropagation(..), mkVPNGatewayRoutePropagation
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VPNGatewayRoutePropagation
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpngatewayroutepropagation.html>
+    VPNGatewayRoutePropagation {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpngatewayroutepropagation.html#cfn-ec2-vpngatewayroutepropagation-routetableids>
+                                routeTableIds :: (ValueList Prelude.Text),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpngatewayroutepropagation.html#cfn-ec2-vpngatewayroutepropagation-vpngatewayid>
+                                vpnGatewayId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVPNGatewayRoutePropagation ::
+  ValueList Prelude.Text
+  -> Value Prelude.Text -> VPNGatewayRoutePropagation
+mkVPNGatewayRoutePropagation routeTableIds vpnGatewayId
+  = VPNGatewayRoutePropagation
+      {haddock_workaround_ = (), routeTableIds = routeTableIds,
+       vpnGatewayId = vpnGatewayId}
+instance ToResourceProperties VPNGatewayRoutePropagation where
+  toResourceProperties VPNGatewayRoutePropagation {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VPNGatewayRoutePropagation",
+         supportsTags = Prelude.False,
+         properties = ["RouteTableIds" JSON..= routeTableIds,
+                       "VpnGatewayId" JSON..= vpnGatewayId]}
+instance JSON.ToJSON VPNGatewayRoutePropagation where
+  toJSON VPNGatewayRoutePropagation {..}
+    = JSON.object
+        ["RouteTableIds" JSON..= routeTableIds,
+         "VpnGatewayId" JSON..= vpnGatewayId]
+instance Property "RouteTableIds" VPNGatewayRoutePropagation where
+  type PropertyType "RouteTableIds" VPNGatewayRoutePropagation = ValueList Prelude.Text
+  set newValue VPNGatewayRoutePropagation {..}
+    = VPNGatewayRoutePropagation {routeTableIds = newValue, ..}
+instance Property "VpnGatewayId" VPNGatewayRoutePropagation where
+  type PropertyType "VpnGatewayId" VPNGatewayRoutePropagation = Value Prelude.Text
+  set newValue VPNGatewayRoutePropagation {..}
+    = VPNGatewayRoutePropagation {vpnGatewayId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint.hs b/gen/Stratosphere/EC2/VerifiedAccessEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint.hs
@@ -0,0 +1,193 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint (
+        module Exports, VerifiedAccessEndpoint(..),
+        mkVerifiedAccessEndpoint
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessEndpoint.CidrOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessEndpoint.LoadBalancerOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessEndpoint.NetworkInterfaceOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessEndpoint.RdsOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessEndpoint.SseSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VerifiedAccessEndpoint
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html>
+    VerifiedAccessEndpoint {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-applicationdomain>
+                            applicationDomain :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-attachmenttype>
+                            attachmentType :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-cidroptions>
+                            cidrOptions :: (Prelude.Maybe CidrOptionsProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-description>
+                            description :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-domaincertificatearn>
+                            domainCertificateArn :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-endpointdomainprefix>
+                            endpointDomainPrefix :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-endpointtype>
+                            endpointType :: (Value Prelude.Text),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-loadbalanceroptions>
+                            loadBalancerOptions :: (Prelude.Maybe LoadBalancerOptionsProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-networkinterfaceoptions>
+                            networkInterfaceOptions :: (Prelude.Maybe NetworkInterfaceOptionsProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-policydocument>
+                            policyDocument :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-policyenabled>
+                            policyEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-rdsoptions>
+                            rdsOptions :: (Prelude.Maybe RdsOptionsProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-securitygroupids>
+                            securityGroupIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-ssespecification>
+                            sseSpecification :: (Prelude.Maybe SseSpecificationProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-tags>
+                            tags :: (Prelude.Maybe [Tag]),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessendpoint.html#cfn-ec2-verifiedaccessendpoint-verifiedaccessgroupid>
+                            verifiedAccessGroupId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVerifiedAccessEndpoint ::
+  Value Prelude.Text
+  -> Value Prelude.Text
+     -> Value Prelude.Text -> VerifiedAccessEndpoint
+mkVerifiedAccessEndpoint
+  attachmentType
+  endpointType
+  verifiedAccessGroupId
+  = VerifiedAccessEndpoint
+      {haddock_workaround_ = (), attachmentType = attachmentType,
+       endpointType = endpointType,
+       verifiedAccessGroupId = verifiedAccessGroupId,
+       applicationDomain = Prelude.Nothing, cidrOptions = Prelude.Nothing,
+       description = Prelude.Nothing,
+       domainCertificateArn = Prelude.Nothing,
+       endpointDomainPrefix = Prelude.Nothing,
+       loadBalancerOptions = Prelude.Nothing,
+       networkInterfaceOptions = Prelude.Nothing,
+       policyDocument = Prelude.Nothing, policyEnabled = Prelude.Nothing,
+       rdsOptions = Prelude.Nothing, securityGroupIds = Prelude.Nothing,
+       sseSpecification = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties VerifiedAccessEndpoint where
+  toResourceProperties VerifiedAccessEndpoint {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessEndpoint",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AttachmentType" JSON..= attachmentType,
+                            "EndpointType" JSON..= endpointType,
+                            "VerifiedAccessGroupId" JSON..= verifiedAccessGroupId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ApplicationDomain" Prelude.<$> applicationDomain,
+                               (JSON..=) "CidrOptions" Prelude.<$> cidrOptions,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DomainCertificateArn" Prelude.<$> domainCertificateArn,
+                               (JSON..=) "EndpointDomainPrefix" Prelude.<$> endpointDomainPrefix,
+                               (JSON..=) "LoadBalancerOptions" Prelude.<$> loadBalancerOptions,
+                               (JSON..=) "NetworkInterfaceOptions"
+                                 Prelude.<$> networkInterfaceOptions,
+                               (JSON..=) "PolicyDocument" Prelude.<$> policyDocument,
+                               (JSON..=) "PolicyEnabled" Prelude.<$> policyEnabled,
+                               (JSON..=) "RdsOptions" Prelude.<$> rdsOptions,
+                               (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                               (JSON..=) "SseSpecification" Prelude.<$> sseSpecification,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON VerifiedAccessEndpoint where
+  toJSON VerifiedAccessEndpoint {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AttachmentType" JSON..= attachmentType,
+               "EndpointType" JSON..= endpointType,
+               "VerifiedAccessGroupId" JSON..= verifiedAccessGroupId]
+              (Prelude.catMaybes
+                 [(JSON..=) "ApplicationDomain" Prelude.<$> applicationDomain,
+                  (JSON..=) "CidrOptions" Prelude.<$> cidrOptions,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DomainCertificateArn" Prelude.<$> domainCertificateArn,
+                  (JSON..=) "EndpointDomainPrefix" Prelude.<$> endpointDomainPrefix,
+                  (JSON..=) "LoadBalancerOptions" Prelude.<$> loadBalancerOptions,
+                  (JSON..=) "NetworkInterfaceOptions"
+                    Prelude.<$> networkInterfaceOptions,
+                  (JSON..=) "PolicyDocument" Prelude.<$> policyDocument,
+                  (JSON..=) "PolicyEnabled" Prelude.<$> policyEnabled,
+                  (JSON..=) "RdsOptions" Prelude.<$> rdsOptions,
+                  (JSON..=) "SecurityGroupIds" Prelude.<$> securityGroupIds,
+                  (JSON..=) "SseSpecification" Prelude.<$> sseSpecification,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ApplicationDomain" VerifiedAccessEndpoint where
+  type PropertyType "ApplicationDomain" VerifiedAccessEndpoint = Value Prelude.Text
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint
+        {applicationDomain = Prelude.pure newValue, ..}
+instance Property "AttachmentType" VerifiedAccessEndpoint where
+  type PropertyType "AttachmentType" VerifiedAccessEndpoint = Value Prelude.Text
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint {attachmentType = newValue, ..}
+instance Property "CidrOptions" VerifiedAccessEndpoint where
+  type PropertyType "CidrOptions" VerifiedAccessEndpoint = CidrOptionsProperty
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint {cidrOptions = Prelude.pure newValue, ..}
+instance Property "Description" VerifiedAccessEndpoint where
+  type PropertyType "Description" VerifiedAccessEndpoint = Value Prelude.Text
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint {description = Prelude.pure newValue, ..}
+instance Property "DomainCertificateArn" VerifiedAccessEndpoint where
+  type PropertyType "DomainCertificateArn" VerifiedAccessEndpoint = Value Prelude.Text
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint
+        {domainCertificateArn = Prelude.pure newValue, ..}
+instance Property "EndpointDomainPrefix" VerifiedAccessEndpoint where
+  type PropertyType "EndpointDomainPrefix" VerifiedAccessEndpoint = Value Prelude.Text
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint
+        {endpointDomainPrefix = Prelude.pure newValue, ..}
+instance Property "EndpointType" VerifiedAccessEndpoint where
+  type PropertyType "EndpointType" VerifiedAccessEndpoint = Value Prelude.Text
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint {endpointType = newValue, ..}
+instance Property "LoadBalancerOptions" VerifiedAccessEndpoint where
+  type PropertyType "LoadBalancerOptions" VerifiedAccessEndpoint = LoadBalancerOptionsProperty
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint
+        {loadBalancerOptions = Prelude.pure newValue, ..}
+instance Property "NetworkInterfaceOptions" VerifiedAccessEndpoint where
+  type PropertyType "NetworkInterfaceOptions" VerifiedAccessEndpoint = NetworkInterfaceOptionsProperty
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint
+        {networkInterfaceOptions = Prelude.pure newValue, ..}
+instance Property "PolicyDocument" VerifiedAccessEndpoint where
+  type PropertyType "PolicyDocument" VerifiedAccessEndpoint = Value Prelude.Text
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint
+        {policyDocument = Prelude.pure newValue, ..}
+instance Property "PolicyEnabled" VerifiedAccessEndpoint where
+  type PropertyType "PolicyEnabled" VerifiedAccessEndpoint = Value Prelude.Bool
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint
+        {policyEnabled = Prelude.pure newValue, ..}
+instance Property "RdsOptions" VerifiedAccessEndpoint where
+  type PropertyType "RdsOptions" VerifiedAccessEndpoint = RdsOptionsProperty
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint {rdsOptions = Prelude.pure newValue, ..}
+instance Property "SecurityGroupIds" VerifiedAccessEndpoint where
+  type PropertyType "SecurityGroupIds" VerifiedAccessEndpoint = ValueList Prelude.Text
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint
+        {securityGroupIds = Prelude.pure newValue, ..}
+instance Property "SseSpecification" VerifiedAccessEndpoint where
+  type PropertyType "SseSpecification" VerifiedAccessEndpoint = SseSpecificationProperty
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint
+        {sseSpecification = Prelude.pure newValue, ..}
+instance Property "Tags" VerifiedAccessEndpoint where
+  type PropertyType "Tags" VerifiedAccessEndpoint = [Tag]
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint {tags = Prelude.pure newValue, ..}
+instance Property "VerifiedAccessGroupId" VerifiedAccessEndpoint where
+  type PropertyType "VerifiedAccessGroupId" VerifiedAccessEndpoint = Value Prelude.Text
+  set newValue VerifiedAccessEndpoint {..}
+    = VerifiedAccessEndpoint {verifiedAccessGroupId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/CidrOptionsProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/CidrOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/CidrOptionsProperty.hs
@@ -0,0 +1,63 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.CidrOptionsProperty (
+        module Exports, CidrOptionsProperty(..), mkCidrOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessEndpoint.PortRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CidrOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-cidroptions.html>
+    CidrOptionsProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-cidroptions.html#cfn-ec2-verifiedaccessendpoint-cidroptions-cidr>
+                         cidr :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-cidroptions.html#cfn-ec2-verifiedaccessendpoint-cidroptions-portranges>
+                         portRanges :: (Prelude.Maybe [PortRangeProperty]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-cidroptions.html#cfn-ec2-verifiedaccessendpoint-cidroptions-protocol>
+                         protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-cidroptions.html#cfn-ec2-verifiedaccessendpoint-cidroptions-subnetids>
+                         subnetIds :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCidrOptionsProperty :: CidrOptionsProperty
+mkCidrOptionsProperty
+  = CidrOptionsProperty
+      {haddock_workaround_ = (), cidr = Prelude.Nothing,
+       portRanges = Prelude.Nothing, protocol = Prelude.Nothing,
+       subnetIds = Prelude.Nothing}
+instance ToResourceProperties CidrOptionsProperty where
+  toResourceProperties CidrOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessEndpoint.CidrOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Cidr" Prelude.<$> cidr,
+                            (JSON..=) "PortRanges" Prelude.<$> portRanges,
+                            (JSON..=) "Protocol" Prelude.<$> protocol,
+                            (JSON..=) "SubnetIds" Prelude.<$> subnetIds])}
+instance JSON.ToJSON CidrOptionsProperty where
+  toJSON CidrOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Cidr" Prelude.<$> cidr,
+               (JSON..=) "PortRanges" Prelude.<$> portRanges,
+               (JSON..=) "Protocol" Prelude.<$> protocol,
+               (JSON..=) "SubnetIds" Prelude.<$> subnetIds]))
+instance Property "Cidr" CidrOptionsProperty where
+  type PropertyType "Cidr" CidrOptionsProperty = Value Prelude.Text
+  set newValue CidrOptionsProperty {..}
+    = CidrOptionsProperty {cidr = Prelude.pure newValue, ..}
+instance Property "PortRanges" CidrOptionsProperty where
+  type PropertyType "PortRanges" CidrOptionsProperty = [PortRangeProperty]
+  set newValue CidrOptionsProperty {..}
+    = CidrOptionsProperty {portRanges = Prelude.pure newValue, ..}
+instance Property "Protocol" CidrOptionsProperty where
+  type PropertyType "Protocol" CidrOptionsProperty = Value Prelude.Text
+  set newValue CidrOptionsProperty {..}
+    = CidrOptionsProperty {protocol = Prelude.pure newValue, ..}
+instance Property "SubnetIds" CidrOptionsProperty where
+  type PropertyType "SubnetIds" CidrOptionsProperty = ValueList Prelude.Text
+  set newValue CidrOptionsProperty {..}
+    = CidrOptionsProperty {subnetIds = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/CidrOptionsProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/CidrOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/CidrOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.CidrOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CidrOptionsProperty :: Prelude.Type
+instance ToResourceProperties CidrOptionsProperty
+instance Prelude.Eq CidrOptionsProperty
+instance Prelude.Show CidrOptionsProperty
+instance JSON.ToJSON CidrOptionsProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/LoadBalancerOptionsProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/LoadBalancerOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/LoadBalancerOptionsProperty.hs
@@ -0,0 +1,76 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.LoadBalancerOptionsProperty (
+        module Exports, LoadBalancerOptionsProperty(..),
+        mkLoadBalancerOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessEndpoint.PortRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data LoadBalancerOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-loadbalanceroptions.html>
+    LoadBalancerOptionsProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-loadbalanceroptions.html#cfn-ec2-verifiedaccessendpoint-loadbalanceroptions-loadbalancerarn>
+                                 loadBalancerArn :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-loadbalanceroptions.html#cfn-ec2-verifiedaccessendpoint-loadbalanceroptions-port>
+                                 port :: (Prelude.Maybe (Value Prelude.Integer)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-loadbalanceroptions.html#cfn-ec2-verifiedaccessendpoint-loadbalanceroptions-portranges>
+                                 portRanges :: (Prelude.Maybe [PortRangeProperty]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-loadbalanceroptions.html#cfn-ec2-verifiedaccessendpoint-loadbalanceroptions-protocol>
+                                 protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-loadbalanceroptions.html#cfn-ec2-verifiedaccessendpoint-loadbalanceroptions-subnetids>
+                                 subnetIds :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkLoadBalancerOptionsProperty :: LoadBalancerOptionsProperty
+mkLoadBalancerOptionsProperty
+  = LoadBalancerOptionsProperty
+      {haddock_workaround_ = (), loadBalancerArn = Prelude.Nothing,
+       port = Prelude.Nothing, portRanges = Prelude.Nothing,
+       protocol = Prelude.Nothing, subnetIds = Prelude.Nothing}
+instance ToResourceProperties LoadBalancerOptionsProperty where
+  toResourceProperties LoadBalancerOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessEndpoint.LoadBalancerOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "LoadBalancerArn" Prelude.<$> loadBalancerArn,
+                            (JSON..=) "Port" Prelude.<$> port,
+                            (JSON..=) "PortRanges" Prelude.<$> portRanges,
+                            (JSON..=) "Protocol" Prelude.<$> protocol,
+                            (JSON..=) "SubnetIds" Prelude.<$> subnetIds])}
+instance JSON.ToJSON LoadBalancerOptionsProperty where
+  toJSON LoadBalancerOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "LoadBalancerArn" Prelude.<$> loadBalancerArn,
+               (JSON..=) "Port" Prelude.<$> port,
+               (JSON..=) "PortRanges" Prelude.<$> portRanges,
+               (JSON..=) "Protocol" Prelude.<$> protocol,
+               (JSON..=) "SubnetIds" Prelude.<$> subnetIds]))
+instance Property "LoadBalancerArn" LoadBalancerOptionsProperty where
+  type PropertyType "LoadBalancerArn" LoadBalancerOptionsProperty = Value Prelude.Text
+  set newValue LoadBalancerOptionsProperty {..}
+    = LoadBalancerOptionsProperty
+        {loadBalancerArn = Prelude.pure newValue, ..}
+instance Property "Port" LoadBalancerOptionsProperty where
+  type PropertyType "Port" LoadBalancerOptionsProperty = Value Prelude.Integer
+  set newValue LoadBalancerOptionsProperty {..}
+    = LoadBalancerOptionsProperty {port = Prelude.pure newValue, ..}
+instance Property "PortRanges" LoadBalancerOptionsProperty where
+  type PropertyType "PortRanges" LoadBalancerOptionsProperty = [PortRangeProperty]
+  set newValue LoadBalancerOptionsProperty {..}
+    = LoadBalancerOptionsProperty
+        {portRanges = Prelude.pure newValue, ..}
+instance Property "Protocol" LoadBalancerOptionsProperty where
+  type PropertyType "Protocol" LoadBalancerOptionsProperty = Value Prelude.Text
+  set newValue LoadBalancerOptionsProperty {..}
+    = LoadBalancerOptionsProperty
+        {protocol = Prelude.pure newValue, ..}
+instance Property "SubnetIds" LoadBalancerOptionsProperty where
+  type PropertyType "SubnetIds" LoadBalancerOptionsProperty = ValueList Prelude.Text
+  set newValue LoadBalancerOptionsProperty {..}
+    = LoadBalancerOptionsProperty
+        {subnetIds = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/LoadBalancerOptionsProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/LoadBalancerOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/LoadBalancerOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.LoadBalancerOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data LoadBalancerOptionsProperty :: Prelude.Type
+instance ToResourceProperties LoadBalancerOptionsProperty
+instance Prelude.Eq LoadBalancerOptionsProperty
+instance Prelude.Show LoadBalancerOptionsProperty
+instance JSON.ToJSON LoadBalancerOptionsProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/NetworkInterfaceOptionsProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/NetworkInterfaceOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/NetworkInterfaceOptionsProperty.hs
@@ -0,0 +1,69 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.NetworkInterfaceOptionsProperty (
+        module Exports, NetworkInterfaceOptionsProperty(..),
+        mkNetworkInterfaceOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessEndpoint.PortRangeProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NetworkInterfaceOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-networkinterfaceoptions.html>
+    NetworkInterfaceOptionsProperty {haddock_workaround_ :: (),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-networkinterfaceoptions.html#cfn-ec2-verifiedaccessendpoint-networkinterfaceoptions-networkinterfaceid>
+                                     networkInterfaceId :: (Prelude.Maybe (Value Prelude.Text)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-networkinterfaceoptions.html#cfn-ec2-verifiedaccessendpoint-networkinterfaceoptions-port>
+                                     port :: (Prelude.Maybe (Value Prelude.Integer)),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-networkinterfaceoptions.html#cfn-ec2-verifiedaccessendpoint-networkinterfaceoptions-portranges>
+                                     portRanges :: (Prelude.Maybe [PortRangeProperty]),
+                                     -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-networkinterfaceoptions.html#cfn-ec2-verifiedaccessendpoint-networkinterfaceoptions-protocol>
+                                     protocol :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNetworkInterfaceOptionsProperty ::
+  NetworkInterfaceOptionsProperty
+mkNetworkInterfaceOptionsProperty
+  = NetworkInterfaceOptionsProperty
+      {haddock_workaround_ = (), networkInterfaceId = Prelude.Nothing,
+       port = Prelude.Nothing, portRanges = Prelude.Nothing,
+       protocol = Prelude.Nothing}
+instance ToResourceProperties NetworkInterfaceOptionsProperty where
+  toResourceProperties NetworkInterfaceOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessEndpoint.NetworkInterfaceOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+                            (JSON..=) "Port" Prelude.<$> port,
+                            (JSON..=) "PortRanges" Prelude.<$> portRanges,
+                            (JSON..=) "Protocol" Prelude.<$> protocol])}
+instance JSON.ToJSON NetworkInterfaceOptionsProperty where
+  toJSON NetworkInterfaceOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "NetworkInterfaceId" Prelude.<$> networkInterfaceId,
+               (JSON..=) "Port" Prelude.<$> port,
+               (JSON..=) "PortRanges" Prelude.<$> portRanges,
+               (JSON..=) "Protocol" Prelude.<$> protocol]))
+instance Property "NetworkInterfaceId" NetworkInterfaceOptionsProperty where
+  type PropertyType "NetworkInterfaceId" NetworkInterfaceOptionsProperty = Value Prelude.Text
+  set newValue NetworkInterfaceOptionsProperty {..}
+    = NetworkInterfaceOptionsProperty
+        {networkInterfaceId = Prelude.pure newValue, ..}
+instance Property "Port" NetworkInterfaceOptionsProperty where
+  type PropertyType "Port" NetworkInterfaceOptionsProperty = Value Prelude.Integer
+  set newValue NetworkInterfaceOptionsProperty {..}
+    = NetworkInterfaceOptionsProperty
+        {port = Prelude.pure newValue, ..}
+instance Property "PortRanges" NetworkInterfaceOptionsProperty where
+  type PropertyType "PortRanges" NetworkInterfaceOptionsProperty = [PortRangeProperty]
+  set newValue NetworkInterfaceOptionsProperty {..}
+    = NetworkInterfaceOptionsProperty
+        {portRanges = Prelude.pure newValue, ..}
+instance Property "Protocol" NetworkInterfaceOptionsProperty where
+  type PropertyType "Protocol" NetworkInterfaceOptionsProperty = Value Prelude.Text
+  set newValue NetworkInterfaceOptionsProperty {..}
+    = NetworkInterfaceOptionsProperty
+        {protocol = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/NetworkInterfaceOptionsProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/NetworkInterfaceOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/NetworkInterfaceOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.NetworkInterfaceOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NetworkInterfaceOptionsProperty :: Prelude.Type
+instance ToResourceProperties NetworkInterfaceOptionsProperty
+instance Prelude.Eq NetworkInterfaceOptionsProperty
+instance Prelude.Show NetworkInterfaceOptionsProperty
+instance JSON.ToJSON NetworkInterfaceOptionsProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/PortRangeProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/PortRangeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/PortRangeProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.PortRangeProperty (
+        PortRangeProperty(..), mkPortRangeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data PortRangeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-portrange.html>
+    PortRangeProperty {haddock_workaround_ :: (),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-portrange.html#cfn-ec2-verifiedaccessendpoint-portrange-fromport>
+                       fromPort :: (Prelude.Maybe (Value Prelude.Integer)),
+                       -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-portrange.html#cfn-ec2-verifiedaccessendpoint-portrange-toport>
+                       toPort :: (Prelude.Maybe (Value Prelude.Integer))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPortRangeProperty :: PortRangeProperty
+mkPortRangeProperty
+  = PortRangeProperty
+      {haddock_workaround_ = (), fromPort = Prelude.Nothing,
+       toPort = Prelude.Nothing}
+instance ToResourceProperties PortRangeProperty where
+  toResourceProperties PortRangeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessEndpoint.PortRange",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "FromPort" Prelude.<$> fromPort,
+                            (JSON..=) "ToPort" Prelude.<$> toPort])}
+instance JSON.ToJSON PortRangeProperty where
+  toJSON PortRangeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "FromPort" Prelude.<$> fromPort,
+               (JSON..=) "ToPort" Prelude.<$> toPort]))
+instance Property "FromPort" PortRangeProperty where
+  type PropertyType "FromPort" PortRangeProperty = Value Prelude.Integer
+  set newValue PortRangeProperty {..}
+    = PortRangeProperty {fromPort = Prelude.pure newValue, ..}
+instance Property "ToPort" PortRangeProperty where
+  type PropertyType "ToPort" PortRangeProperty = Value Prelude.Integer
+  set newValue PortRangeProperty {..}
+    = PortRangeProperty {toPort = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/PortRangeProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/PortRangeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/PortRangeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.PortRangeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data PortRangeProperty :: Prelude.Type
+instance ToResourceProperties PortRangeProperty
+instance Prelude.Eq PortRangeProperty
+instance Prelude.Show PortRangeProperty
+instance JSON.ToJSON PortRangeProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/RdsOptionsProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/RdsOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/RdsOptionsProperty.hs
@@ -0,0 +1,88 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.RdsOptionsProperty (
+        RdsOptionsProperty(..), mkRdsOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RdsOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-rdsoptions.html>
+    RdsOptionsProperty {haddock_workaround_ :: (),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-rdsoptions.html#cfn-ec2-verifiedaccessendpoint-rdsoptions-port>
+                        port :: (Prelude.Maybe (Value Prelude.Integer)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-rdsoptions.html#cfn-ec2-verifiedaccessendpoint-rdsoptions-protocol>
+                        protocol :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-rdsoptions.html#cfn-ec2-verifiedaccessendpoint-rdsoptions-rdsdbclusterarn>
+                        rdsDbClusterArn :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-rdsoptions.html#cfn-ec2-verifiedaccessendpoint-rdsoptions-rdsdbinstancearn>
+                        rdsDbInstanceArn :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-rdsoptions.html#cfn-ec2-verifiedaccessendpoint-rdsoptions-rdsdbproxyarn>
+                        rdsDbProxyArn :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-rdsoptions.html#cfn-ec2-verifiedaccessendpoint-rdsoptions-rdsendpoint>
+                        rdsEndpoint :: (Prelude.Maybe (Value Prelude.Text)),
+                        -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-rdsoptions.html#cfn-ec2-verifiedaccessendpoint-rdsoptions-subnetids>
+                        subnetIds :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRdsOptionsProperty :: RdsOptionsProperty
+mkRdsOptionsProperty
+  = RdsOptionsProperty
+      {haddock_workaround_ = (), port = Prelude.Nothing,
+       protocol = Prelude.Nothing, rdsDbClusterArn = Prelude.Nothing,
+       rdsDbInstanceArn = Prelude.Nothing,
+       rdsDbProxyArn = Prelude.Nothing, rdsEndpoint = Prelude.Nothing,
+       subnetIds = Prelude.Nothing}
+instance ToResourceProperties RdsOptionsProperty where
+  toResourceProperties RdsOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessEndpoint.RdsOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Port" Prelude.<$> port,
+                            (JSON..=) "Protocol" Prelude.<$> protocol,
+                            (JSON..=) "RdsDbClusterArn" Prelude.<$> rdsDbClusterArn,
+                            (JSON..=) "RdsDbInstanceArn" Prelude.<$> rdsDbInstanceArn,
+                            (JSON..=) "RdsDbProxyArn" Prelude.<$> rdsDbProxyArn,
+                            (JSON..=) "RdsEndpoint" Prelude.<$> rdsEndpoint,
+                            (JSON..=) "SubnetIds" Prelude.<$> subnetIds])}
+instance JSON.ToJSON RdsOptionsProperty where
+  toJSON RdsOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Port" Prelude.<$> port,
+               (JSON..=) "Protocol" Prelude.<$> protocol,
+               (JSON..=) "RdsDbClusterArn" Prelude.<$> rdsDbClusterArn,
+               (JSON..=) "RdsDbInstanceArn" Prelude.<$> rdsDbInstanceArn,
+               (JSON..=) "RdsDbProxyArn" Prelude.<$> rdsDbProxyArn,
+               (JSON..=) "RdsEndpoint" Prelude.<$> rdsEndpoint,
+               (JSON..=) "SubnetIds" Prelude.<$> subnetIds]))
+instance Property "Port" RdsOptionsProperty where
+  type PropertyType "Port" RdsOptionsProperty = Value Prelude.Integer
+  set newValue RdsOptionsProperty {..}
+    = RdsOptionsProperty {port = Prelude.pure newValue, ..}
+instance Property "Protocol" RdsOptionsProperty where
+  type PropertyType "Protocol" RdsOptionsProperty = Value Prelude.Text
+  set newValue RdsOptionsProperty {..}
+    = RdsOptionsProperty {protocol = Prelude.pure newValue, ..}
+instance Property "RdsDbClusterArn" RdsOptionsProperty where
+  type PropertyType "RdsDbClusterArn" RdsOptionsProperty = Value Prelude.Text
+  set newValue RdsOptionsProperty {..}
+    = RdsOptionsProperty {rdsDbClusterArn = Prelude.pure newValue, ..}
+instance Property "RdsDbInstanceArn" RdsOptionsProperty where
+  type PropertyType "RdsDbInstanceArn" RdsOptionsProperty = Value Prelude.Text
+  set newValue RdsOptionsProperty {..}
+    = RdsOptionsProperty {rdsDbInstanceArn = Prelude.pure newValue, ..}
+instance Property "RdsDbProxyArn" RdsOptionsProperty where
+  type PropertyType "RdsDbProxyArn" RdsOptionsProperty = Value Prelude.Text
+  set newValue RdsOptionsProperty {..}
+    = RdsOptionsProperty {rdsDbProxyArn = Prelude.pure newValue, ..}
+instance Property "RdsEndpoint" RdsOptionsProperty where
+  type PropertyType "RdsEndpoint" RdsOptionsProperty = Value Prelude.Text
+  set newValue RdsOptionsProperty {..}
+    = RdsOptionsProperty {rdsEndpoint = Prelude.pure newValue, ..}
+instance Property "SubnetIds" RdsOptionsProperty where
+  type PropertyType "SubnetIds" RdsOptionsProperty = ValueList Prelude.Text
+  set newValue RdsOptionsProperty {..}
+    = RdsOptionsProperty {subnetIds = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/RdsOptionsProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/RdsOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/RdsOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.RdsOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RdsOptionsProperty :: Prelude.Type
+instance ToResourceProperties RdsOptionsProperty
+instance Prelude.Eq RdsOptionsProperty
+instance Prelude.Show RdsOptionsProperty
+instance JSON.ToJSON RdsOptionsProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/SseSpecificationProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/SseSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/SseSpecificationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.SseSpecificationProperty (
+        SseSpecificationProperty(..), mkSseSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SseSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-ssespecification.html>
+    SseSpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-ssespecification.html#cfn-ec2-verifiedaccessendpoint-ssespecification-customermanagedkeyenabled>
+                              customerManagedKeyEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessendpoint-ssespecification.html#cfn-ec2-verifiedaccessendpoint-ssespecification-kmskeyarn>
+                              kmsKeyArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSseSpecificationProperty :: SseSpecificationProperty
+mkSseSpecificationProperty
+  = SseSpecificationProperty
+      {haddock_workaround_ = (),
+       customerManagedKeyEnabled = Prelude.Nothing,
+       kmsKeyArn = Prelude.Nothing}
+instance ToResourceProperties SseSpecificationProperty where
+  toResourceProperties SseSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessEndpoint.SseSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CustomerManagedKeyEnabled"
+                              Prelude.<$> customerManagedKeyEnabled,
+                            (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn])}
+instance JSON.ToJSON SseSpecificationProperty where
+  toJSON SseSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CustomerManagedKeyEnabled"
+                 Prelude.<$> customerManagedKeyEnabled,
+               (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn]))
+instance Property "CustomerManagedKeyEnabled" SseSpecificationProperty where
+  type PropertyType "CustomerManagedKeyEnabled" SseSpecificationProperty = Value Prelude.Bool
+  set newValue SseSpecificationProperty {..}
+    = SseSpecificationProperty
+        {customerManagedKeyEnabled = Prelude.pure newValue, ..}
+instance Property "KmsKeyArn" SseSpecificationProperty where
+  type PropertyType "KmsKeyArn" SseSpecificationProperty = Value Prelude.Text
+  set newValue SseSpecificationProperty {..}
+    = SseSpecificationProperty {kmsKeyArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessEndpoint/SseSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/SseSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessEndpoint/SseSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessEndpoint.SseSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SseSpecificationProperty :: Prelude.Type
+instance ToResourceProperties SseSpecificationProperty
+instance Prelude.Eq SseSpecificationProperty
+instance Prelude.Show SseSpecificationProperty
+instance JSON.ToJSON SseSpecificationProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessGroup.hs b/gen/Stratosphere/EC2/VerifiedAccessGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessGroup.hs
@@ -0,0 +1,85 @@
+module Stratosphere.EC2.VerifiedAccessGroup (
+        module Exports, VerifiedAccessGroup(..), mkVerifiedAccessGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessGroup.SseSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VerifiedAccessGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessgroup.html>
+    VerifiedAccessGroup {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessgroup.html#cfn-ec2-verifiedaccessgroup-description>
+                         description :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessgroup.html#cfn-ec2-verifiedaccessgroup-policydocument>
+                         policyDocument :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessgroup.html#cfn-ec2-verifiedaccessgroup-policyenabled>
+                         policyEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessgroup.html#cfn-ec2-verifiedaccessgroup-ssespecification>
+                         sseSpecification :: (Prelude.Maybe SseSpecificationProperty),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessgroup.html#cfn-ec2-verifiedaccessgroup-tags>
+                         tags :: (Prelude.Maybe [Tag]),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessgroup.html#cfn-ec2-verifiedaccessgroup-verifiedaccessinstanceid>
+                         verifiedAccessInstanceId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVerifiedAccessGroup :: Value Prelude.Text -> VerifiedAccessGroup
+mkVerifiedAccessGroup verifiedAccessInstanceId
+  = VerifiedAccessGroup
+      {haddock_workaround_ = (),
+       verifiedAccessInstanceId = verifiedAccessInstanceId,
+       description = Prelude.Nothing, policyDocument = Prelude.Nothing,
+       policyEnabled = Prelude.Nothing,
+       sseSpecification = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties VerifiedAccessGroup where
+  toResourceProperties VerifiedAccessGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessGroup",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["VerifiedAccessInstanceId" JSON..= verifiedAccessInstanceId]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "PolicyDocument" Prelude.<$> policyDocument,
+                               (JSON..=) "PolicyEnabled" Prelude.<$> policyEnabled,
+                               (JSON..=) "SseSpecification" Prelude.<$> sseSpecification,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON VerifiedAccessGroup where
+  toJSON VerifiedAccessGroup {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["VerifiedAccessInstanceId" JSON..= verifiedAccessInstanceId]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "PolicyDocument" Prelude.<$> policyDocument,
+                  (JSON..=) "PolicyEnabled" Prelude.<$> policyEnabled,
+                  (JSON..=) "SseSpecification" Prelude.<$> sseSpecification,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "Description" VerifiedAccessGroup where
+  type PropertyType "Description" VerifiedAccessGroup = Value Prelude.Text
+  set newValue VerifiedAccessGroup {..}
+    = VerifiedAccessGroup {description = Prelude.pure newValue, ..}
+instance Property "PolicyDocument" VerifiedAccessGroup where
+  type PropertyType "PolicyDocument" VerifiedAccessGroup = Value Prelude.Text
+  set newValue VerifiedAccessGroup {..}
+    = VerifiedAccessGroup {policyDocument = Prelude.pure newValue, ..}
+instance Property "PolicyEnabled" VerifiedAccessGroup where
+  type PropertyType "PolicyEnabled" VerifiedAccessGroup = Value Prelude.Bool
+  set newValue VerifiedAccessGroup {..}
+    = VerifiedAccessGroup {policyEnabled = Prelude.pure newValue, ..}
+instance Property "SseSpecification" VerifiedAccessGroup where
+  type PropertyType "SseSpecification" VerifiedAccessGroup = SseSpecificationProperty
+  set newValue VerifiedAccessGroup {..}
+    = VerifiedAccessGroup
+        {sseSpecification = Prelude.pure newValue, ..}
+instance Property "Tags" VerifiedAccessGroup where
+  type PropertyType "Tags" VerifiedAccessGroup = [Tag]
+  set newValue VerifiedAccessGroup {..}
+    = VerifiedAccessGroup {tags = Prelude.pure newValue, ..}
+instance Property "VerifiedAccessInstanceId" VerifiedAccessGroup where
+  type PropertyType "VerifiedAccessInstanceId" VerifiedAccessGroup = Value Prelude.Text
+  set newValue VerifiedAccessGroup {..}
+    = VerifiedAccessGroup {verifiedAccessInstanceId = newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessGroup/SseSpecificationProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessGroup/SseSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessGroup/SseSpecificationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.VerifiedAccessGroup.SseSpecificationProperty (
+        SseSpecificationProperty(..), mkSseSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SseSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessgroup-ssespecification.html>
+    SseSpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessgroup-ssespecification.html#cfn-ec2-verifiedaccessgroup-ssespecification-customermanagedkeyenabled>
+                              customerManagedKeyEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessgroup-ssespecification.html#cfn-ec2-verifiedaccessgroup-ssespecification-kmskeyarn>
+                              kmsKeyArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSseSpecificationProperty :: SseSpecificationProperty
+mkSseSpecificationProperty
+  = SseSpecificationProperty
+      {haddock_workaround_ = (),
+       customerManagedKeyEnabled = Prelude.Nothing,
+       kmsKeyArn = Prelude.Nothing}
+instance ToResourceProperties SseSpecificationProperty where
+  toResourceProperties SseSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessGroup.SseSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CustomerManagedKeyEnabled"
+                              Prelude.<$> customerManagedKeyEnabled,
+                            (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn])}
+instance JSON.ToJSON SseSpecificationProperty where
+  toJSON SseSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CustomerManagedKeyEnabled"
+                 Prelude.<$> customerManagedKeyEnabled,
+               (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn]))
+instance Property "CustomerManagedKeyEnabled" SseSpecificationProperty where
+  type PropertyType "CustomerManagedKeyEnabled" SseSpecificationProperty = Value Prelude.Bool
+  set newValue SseSpecificationProperty {..}
+    = SseSpecificationProperty
+        {customerManagedKeyEnabled = Prelude.pure newValue, ..}
+instance Property "KmsKeyArn" SseSpecificationProperty where
+  type PropertyType "KmsKeyArn" SseSpecificationProperty = Value Prelude.Text
+  set newValue SseSpecificationProperty {..}
+    = SseSpecificationProperty {kmsKeyArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessGroup/SseSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessGroup/SseSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessGroup/SseSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessGroup.SseSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SseSpecificationProperty :: Prelude.Type
+instance ToResourceProperties SseSpecificationProperty
+instance Prelude.Eq SseSpecificationProperty
+instance Prelude.Show SseSpecificationProperty
+instance JSON.ToJSON SseSpecificationProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance.hs b/gen/Stratosphere/EC2/VerifiedAccessInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance.hs
@@ -0,0 +1,105 @@
+module Stratosphere.EC2.VerifiedAccessInstance (
+        module Exports, VerifiedAccessInstance(..),
+        mkVerifiedAccessInstance
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessInstance.VerifiedAccessLogsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessInstance.VerifiedAccessTrustProviderProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VerifiedAccessInstance
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessinstance.html>
+    VerifiedAccessInstance {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessinstance.html#cfn-ec2-verifiedaccessinstance-cidrendpointscustomsubdomain>
+                            cidrEndpointsCustomSubDomain :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessinstance.html#cfn-ec2-verifiedaccessinstance-description>
+                            description :: (Prelude.Maybe (Value Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessinstance.html#cfn-ec2-verifiedaccessinstance-fipsenabled>
+                            fipsEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessinstance.html#cfn-ec2-verifiedaccessinstance-loggingconfigurations>
+                            loggingConfigurations :: (Prelude.Maybe VerifiedAccessLogsProperty),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessinstance.html#cfn-ec2-verifiedaccessinstance-tags>
+                            tags :: (Prelude.Maybe [Tag]),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessinstance.html#cfn-ec2-verifiedaccessinstance-verifiedaccesstrustproviderids>
+                            verifiedAccessTrustProviderIds :: (Prelude.Maybe (ValueList Prelude.Text)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccessinstance.html#cfn-ec2-verifiedaccessinstance-verifiedaccesstrustproviders>
+                            verifiedAccessTrustProviders :: (Prelude.Maybe [VerifiedAccessTrustProviderProperty])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVerifiedAccessInstance :: VerifiedAccessInstance
+mkVerifiedAccessInstance
+  = VerifiedAccessInstance
+      {haddock_workaround_ = (),
+       cidrEndpointsCustomSubDomain = Prelude.Nothing,
+       description = Prelude.Nothing, fipsEnabled = Prelude.Nothing,
+       loggingConfigurations = Prelude.Nothing, tags = Prelude.Nothing,
+       verifiedAccessTrustProviderIds = Prelude.Nothing,
+       verifiedAccessTrustProviders = Prelude.Nothing}
+instance ToResourceProperties VerifiedAccessInstance where
+  toResourceProperties VerifiedAccessInstance {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessInstance",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CidrEndpointsCustomSubDomain"
+                              Prelude.<$> cidrEndpointsCustomSubDomain,
+                            (JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "FipsEnabled" Prelude.<$> fipsEnabled,
+                            (JSON..=) "LoggingConfigurations"
+                              Prelude.<$> loggingConfigurations,
+                            (JSON..=) "Tags" Prelude.<$> tags,
+                            (JSON..=) "VerifiedAccessTrustProviderIds"
+                              Prelude.<$> verifiedAccessTrustProviderIds,
+                            (JSON..=) "VerifiedAccessTrustProviders"
+                              Prelude.<$> verifiedAccessTrustProviders])}
+instance JSON.ToJSON VerifiedAccessInstance where
+  toJSON VerifiedAccessInstance {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CidrEndpointsCustomSubDomain"
+                 Prelude.<$> cidrEndpointsCustomSubDomain,
+               (JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "FipsEnabled" Prelude.<$> fipsEnabled,
+               (JSON..=) "LoggingConfigurations"
+                 Prelude.<$> loggingConfigurations,
+               (JSON..=) "Tags" Prelude.<$> tags,
+               (JSON..=) "VerifiedAccessTrustProviderIds"
+                 Prelude.<$> verifiedAccessTrustProviderIds,
+               (JSON..=) "VerifiedAccessTrustProviders"
+                 Prelude.<$> verifiedAccessTrustProviders]))
+instance Property "CidrEndpointsCustomSubDomain" VerifiedAccessInstance where
+  type PropertyType "CidrEndpointsCustomSubDomain" VerifiedAccessInstance = Value Prelude.Text
+  set newValue VerifiedAccessInstance {..}
+    = VerifiedAccessInstance
+        {cidrEndpointsCustomSubDomain = Prelude.pure newValue, ..}
+instance Property "Description" VerifiedAccessInstance where
+  type PropertyType "Description" VerifiedAccessInstance = Value Prelude.Text
+  set newValue VerifiedAccessInstance {..}
+    = VerifiedAccessInstance {description = Prelude.pure newValue, ..}
+instance Property "FipsEnabled" VerifiedAccessInstance where
+  type PropertyType "FipsEnabled" VerifiedAccessInstance = Value Prelude.Bool
+  set newValue VerifiedAccessInstance {..}
+    = VerifiedAccessInstance {fipsEnabled = Prelude.pure newValue, ..}
+instance Property "LoggingConfigurations" VerifiedAccessInstance where
+  type PropertyType "LoggingConfigurations" VerifiedAccessInstance = VerifiedAccessLogsProperty
+  set newValue VerifiedAccessInstance {..}
+    = VerifiedAccessInstance
+        {loggingConfigurations = Prelude.pure newValue, ..}
+instance Property "Tags" VerifiedAccessInstance where
+  type PropertyType "Tags" VerifiedAccessInstance = [Tag]
+  set newValue VerifiedAccessInstance {..}
+    = VerifiedAccessInstance {tags = Prelude.pure newValue, ..}
+instance Property "VerifiedAccessTrustProviderIds" VerifiedAccessInstance where
+  type PropertyType "VerifiedAccessTrustProviderIds" VerifiedAccessInstance = ValueList Prelude.Text
+  set newValue VerifiedAccessInstance {..}
+    = VerifiedAccessInstance
+        {verifiedAccessTrustProviderIds = Prelude.pure newValue, ..}
+instance Property "VerifiedAccessTrustProviders" VerifiedAccessInstance where
+  type PropertyType "VerifiedAccessTrustProviders" VerifiedAccessInstance = [VerifiedAccessTrustProviderProperty]
+  set newValue VerifiedAccessInstance {..}
+    = VerifiedAccessInstance
+        {verifiedAccessTrustProviders = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/CloudWatchLogsProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessInstance/CloudWatchLogsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/CloudWatchLogsProperty.hs
@@ -0,0 +1,45 @@
+module Stratosphere.EC2.VerifiedAccessInstance.CloudWatchLogsProperty (
+        CloudWatchLogsProperty(..), mkCloudWatchLogsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data CloudWatchLogsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-cloudwatchlogs.html>
+    CloudWatchLogsProperty {haddock_workaround_ :: (),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-cloudwatchlogs.html#cfn-ec2-verifiedaccessinstance-cloudwatchlogs-enabled>
+                            enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-cloudwatchlogs.html#cfn-ec2-verifiedaccessinstance-cloudwatchlogs-loggroup>
+                            logGroup :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkCloudWatchLogsProperty :: CloudWatchLogsProperty
+mkCloudWatchLogsProperty
+  = CloudWatchLogsProperty
+      {haddock_workaround_ = (), enabled = Prelude.Nothing,
+       logGroup = Prelude.Nothing}
+instance ToResourceProperties CloudWatchLogsProperty where
+  toResourceProperties CloudWatchLogsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessInstance.CloudWatchLogs",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Enabled" Prelude.<$> enabled,
+                            (JSON..=) "LogGroup" Prelude.<$> logGroup])}
+instance JSON.ToJSON CloudWatchLogsProperty where
+  toJSON CloudWatchLogsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Enabled" Prelude.<$> enabled,
+               (JSON..=) "LogGroup" Prelude.<$> logGroup]))
+instance Property "Enabled" CloudWatchLogsProperty where
+  type PropertyType "Enabled" CloudWatchLogsProperty = Value Prelude.Bool
+  set newValue CloudWatchLogsProperty {..}
+    = CloudWatchLogsProperty {enabled = Prelude.pure newValue, ..}
+instance Property "LogGroup" CloudWatchLogsProperty where
+  type PropertyType "LogGroup" CloudWatchLogsProperty = Value Prelude.Text
+  set newValue CloudWatchLogsProperty {..}
+    = CloudWatchLogsProperty {logGroup = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/CloudWatchLogsProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessInstance/CloudWatchLogsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/CloudWatchLogsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessInstance.CloudWatchLogsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data CloudWatchLogsProperty :: Prelude.Type
+instance ToResourceProperties CloudWatchLogsProperty
+instance Prelude.Eq CloudWatchLogsProperty
+instance Prelude.Show CloudWatchLogsProperty
+instance JSON.ToJSON CloudWatchLogsProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/KinesisDataFirehoseProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessInstance/KinesisDataFirehoseProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/KinesisDataFirehoseProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.EC2.VerifiedAccessInstance.KinesisDataFirehoseProperty (
+        KinesisDataFirehoseProperty(..), mkKinesisDataFirehoseProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data KinesisDataFirehoseProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-kinesisdatafirehose.html>
+    KinesisDataFirehoseProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-kinesisdatafirehose.html#cfn-ec2-verifiedaccessinstance-kinesisdatafirehose-deliverystream>
+                                 deliveryStream :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-kinesisdatafirehose.html#cfn-ec2-verifiedaccessinstance-kinesisdatafirehose-enabled>
+                                 enabled :: (Prelude.Maybe (Value Prelude.Bool))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkKinesisDataFirehoseProperty :: KinesisDataFirehoseProperty
+mkKinesisDataFirehoseProperty
+  = KinesisDataFirehoseProperty
+      {haddock_workaround_ = (), deliveryStream = Prelude.Nothing,
+       enabled = Prelude.Nothing}
+instance ToResourceProperties KinesisDataFirehoseProperty where
+  toResourceProperties KinesisDataFirehoseProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessInstance.KinesisDataFirehose",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "DeliveryStream" Prelude.<$> deliveryStream,
+                            (JSON..=) "Enabled" Prelude.<$> enabled])}
+instance JSON.ToJSON KinesisDataFirehoseProperty where
+  toJSON KinesisDataFirehoseProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "DeliveryStream" Prelude.<$> deliveryStream,
+               (JSON..=) "Enabled" Prelude.<$> enabled]))
+instance Property "DeliveryStream" KinesisDataFirehoseProperty where
+  type PropertyType "DeliveryStream" KinesisDataFirehoseProperty = Value Prelude.Text
+  set newValue KinesisDataFirehoseProperty {..}
+    = KinesisDataFirehoseProperty
+        {deliveryStream = Prelude.pure newValue, ..}
+instance Property "Enabled" KinesisDataFirehoseProperty where
+  type PropertyType "Enabled" KinesisDataFirehoseProperty = Value Prelude.Bool
+  set newValue KinesisDataFirehoseProperty {..}
+    = KinesisDataFirehoseProperty {enabled = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/KinesisDataFirehoseProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessInstance/KinesisDataFirehoseProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/KinesisDataFirehoseProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessInstance.KinesisDataFirehoseProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data KinesisDataFirehoseProperty :: Prelude.Type
+instance ToResourceProperties KinesisDataFirehoseProperty
+instance Prelude.Eq KinesisDataFirehoseProperty
+instance Prelude.Show KinesisDataFirehoseProperty
+instance JSON.ToJSON KinesisDataFirehoseProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/S3Property.hs b/gen/Stratosphere/EC2/VerifiedAccessInstance/S3Property.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/S3Property.hs
@@ -0,0 +1,62 @@
+module Stratosphere.EC2.VerifiedAccessInstance.S3Property (
+        S3Property(..), mkS3Property
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data S3Property
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-s3.html>
+    S3Property {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-s3.html#cfn-ec2-verifiedaccessinstance-s3-bucketname>
+                bucketName :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-s3.html#cfn-ec2-verifiedaccessinstance-s3-bucketowner>
+                bucketOwner :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-s3.html#cfn-ec2-verifiedaccessinstance-s3-enabled>
+                enabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-s3.html#cfn-ec2-verifiedaccessinstance-s3-prefix>
+                prefix :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkS3Property :: S3Property
+mkS3Property
+  = S3Property
+      {haddock_workaround_ = (), bucketName = Prelude.Nothing,
+       bucketOwner = Prelude.Nothing, enabled = Prelude.Nothing,
+       prefix = Prelude.Nothing}
+instance ToResourceProperties S3Property where
+  toResourceProperties S3Property {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessInstance.S3",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "BucketName" Prelude.<$> bucketName,
+                            (JSON..=) "BucketOwner" Prelude.<$> bucketOwner,
+                            (JSON..=) "Enabled" Prelude.<$> enabled,
+                            (JSON..=) "Prefix" Prelude.<$> prefix])}
+instance JSON.ToJSON S3Property where
+  toJSON S3Property {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "BucketName" Prelude.<$> bucketName,
+               (JSON..=) "BucketOwner" Prelude.<$> bucketOwner,
+               (JSON..=) "Enabled" Prelude.<$> enabled,
+               (JSON..=) "Prefix" Prelude.<$> prefix]))
+instance Property "BucketName" S3Property where
+  type PropertyType "BucketName" S3Property = Value Prelude.Text
+  set newValue S3Property {..}
+    = S3Property {bucketName = Prelude.pure newValue, ..}
+instance Property "BucketOwner" S3Property where
+  type PropertyType "BucketOwner" S3Property = Value Prelude.Text
+  set newValue S3Property {..}
+    = S3Property {bucketOwner = Prelude.pure newValue, ..}
+instance Property "Enabled" S3Property where
+  type PropertyType "Enabled" S3Property = Value Prelude.Bool
+  set newValue S3Property {..}
+    = S3Property {enabled = Prelude.pure newValue, ..}
+instance Property "Prefix" S3Property where
+  type PropertyType "Prefix" S3Property = Value Prelude.Text
+  set newValue S3Property {..}
+    = S3Property {prefix = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/S3Property.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessInstance/S3Property.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/S3Property.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessInstance.S3Property where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data S3Property :: Prelude.Type
+instance ToResourceProperties S3Property
+instance Prelude.Eq S3Property
+instance Prelude.Show S3Property
+instance JSON.ToJSON S3Property
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessLogsProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessLogsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessLogsProperty.hs
@@ -0,0 +1,79 @@
+module Stratosphere.EC2.VerifiedAccessInstance.VerifiedAccessLogsProperty (
+        module Exports, VerifiedAccessLogsProperty(..),
+        mkVerifiedAccessLogsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessInstance.CloudWatchLogsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessInstance.KinesisDataFirehoseProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessInstance.S3Property as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VerifiedAccessLogsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesslogs.html>
+    VerifiedAccessLogsProperty {haddock_workaround_ :: (),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesslogs.html#cfn-ec2-verifiedaccessinstance-verifiedaccesslogs-cloudwatchlogs>
+                                cloudWatchLogs :: (Prelude.Maybe CloudWatchLogsProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesslogs.html#cfn-ec2-verifiedaccessinstance-verifiedaccesslogs-includetrustcontext>
+                                includeTrustContext :: (Prelude.Maybe (Value Prelude.Bool)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesslogs.html#cfn-ec2-verifiedaccessinstance-verifiedaccesslogs-kinesisdatafirehose>
+                                kinesisDataFirehose :: (Prelude.Maybe KinesisDataFirehoseProperty),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesslogs.html#cfn-ec2-verifiedaccessinstance-verifiedaccesslogs-logversion>
+                                logVersion :: (Prelude.Maybe (Value Prelude.Text)),
+                                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesslogs.html#cfn-ec2-verifiedaccessinstance-verifiedaccesslogs-s3>
+                                s3 :: (Prelude.Maybe S3Property)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVerifiedAccessLogsProperty :: VerifiedAccessLogsProperty
+mkVerifiedAccessLogsProperty
+  = VerifiedAccessLogsProperty
+      {haddock_workaround_ = (), cloudWatchLogs = Prelude.Nothing,
+       includeTrustContext = Prelude.Nothing,
+       kinesisDataFirehose = Prelude.Nothing,
+       logVersion = Prelude.Nothing, s3 = Prelude.Nothing}
+instance ToResourceProperties VerifiedAccessLogsProperty where
+  toResourceProperties VerifiedAccessLogsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessInstance.VerifiedAccessLogs",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CloudWatchLogs" Prelude.<$> cloudWatchLogs,
+                            (JSON..=) "IncludeTrustContext" Prelude.<$> includeTrustContext,
+                            (JSON..=) "KinesisDataFirehose" Prelude.<$> kinesisDataFirehose,
+                            (JSON..=) "LogVersion" Prelude.<$> logVersion,
+                            (JSON..=) "S3" Prelude.<$> s3])}
+instance JSON.ToJSON VerifiedAccessLogsProperty where
+  toJSON VerifiedAccessLogsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CloudWatchLogs" Prelude.<$> cloudWatchLogs,
+               (JSON..=) "IncludeTrustContext" Prelude.<$> includeTrustContext,
+               (JSON..=) "KinesisDataFirehose" Prelude.<$> kinesisDataFirehose,
+               (JSON..=) "LogVersion" Prelude.<$> logVersion,
+               (JSON..=) "S3" Prelude.<$> s3]))
+instance Property "CloudWatchLogs" VerifiedAccessLogsProperty where
+  type PropertyType "CloudWatchLogs" VerifiedAccessLogsProperty = CloudWatchLogsProperty
+  set newValue VerifiedAccessLogsProperty {..}
+    = VerifiedAccessLogsProperty
+        {cloudWatchLogs = Prelude.pure newValue, ..}
+instance Property "IncludeTrustContext" VerifiedAccessLogsProperty where
+  type PropertyType "IncludeTrustContext" VerifiedAccessLogsProperty = Value Prelude.Bool
+  set newValue VerifiedAccessLogsProperty {..}
+    = VerifiedAccessLogsProperty
+        {includeTrustContext = Prelude.pure newValue, ..}
+instance Property "KinesisDataFirehose" VerifiedAccessLogsProperty where
+  type PropertyType "KinesisDataFirehose" VerifiedAccessLogsProperty = KinesisDataFirehoseProperty
+  set newValue VerifiedAccessLogsProperty {..}
+    = VerifiedAccessLogsProperty
+        {kinesisDataFirehose = Prelude.pure newValue, ..}
+instance Property "LogVersion" VerifiedAccessLogsProperty where
+  type PropertyType "LogVersion" VerifiedAccessLogsProperty = Value Prelude.Text
+  set newValue VerifiedAccessLogsProperty {..}
+    = VerifiedAccessLogsProperty
+        {logVersion = Prelude.pure newValue, ..}
+instance Property "S3" VerifiedAccessLogsProperty where
+  type PropertyType "S3" VerifiedAccessLogsProperty = S3Property
+  set newValue VerifiedAccessLogsProperty {..}
+    = VerifiedAccessLogsProperty {s3 = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessLogsProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessLogsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessLogsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessInstance.VerifiedAccessLogsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VerifiedAccessLogsProperty :: Prelude.Type
+instance ToResourceProperties VerifiedAccessLogsProperty
+instance Prelude.Eq VerifiedAccessLogsProperty
+instance Prelude.Show VerifiedAccessLogsProperty
+instance JSON.ToJSON VerifiedAccessLogsProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessTrustProviderProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessTrustProviderProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessTrustProviderProperty.hs
@@ -0,0 +1,85 @@
+module Stratosphere.EC2.VerifiedAccessInstance.VerifiedAccessTrustProviderProperty (
+        VerifiedAccessTrustProviderProperty(..),
+        mkVerifiedAccessTrustProviderProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VerifiedAccessTrustProviderProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesstrustprovider.html>
+    VerifiedAccessTrustProviderProperty {haddock_workaround_ :: (),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccessinstance-verifiedaccesstrustprovider-description>
+                                         description :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccessinstance-verifiedaccesstrustprovider-devicetrustprovidertype>
+                                         deviceTrustProviderType :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccessinstance-verifiedaccesstrustprovider-trustprovidertype>
+                                         trustProviderType :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccessinstance-verifiedaccesstrustprovider-usertrustprovidertype>
+                                         userTrustProviderType :: (Prelude.Maybe (Value Prelude.Text)),
+                                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccessinstance-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccessinstance-verifiedaccesstrustprovider-verifiedaccesstrustproviderid>
+                                         verifiedAccessTrustProviderId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVerifiedAccessTrustProviderProperty ::
+  VerifiedAccessTrustProviderProperty
+mkVerifiedAccessTrustProviderProperty
+  = VerifiedAccessTrustProviderProperty
+      {haddock_workaround_ = (), description = Prelude.Nothing,
+       deviceTrustProviderType = Prelude.Nothing,
+       trustProviderType = Prelude.Nothing,
+       userTrustProviderType = Prelude.Nothing,
+       verifiedAccessTrustProviderId = Prelude.Nothing}
+instance ToResourceProperties VerifiedAccessTrustProviderProperty where
+  toResourceProperties VerifiedAccessTrustProviderProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessInstance.VerifiedAccessTrustProvider",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "Description" Prelude.<$> description,
+                            (JSON..=) "DeviceTrustProviderType"
+                              Prelude.<$> deviceTrustProviderType,
+                            (JSON..=) "TrustProviderType" Prelude.<$> trustProviderType,
+                            (JSON..=) "UserTrustProviderType"
+                              Prelude.<$> userTrustProviderType,
+                            (JSON..=) "VerifiedAccessTrustProviderId"
+                              Prelude.<$> verifiedAccessTrustProviderId])}
+instance JSON.ToJSON VerifiedAccessTrustProviderProperty where
+  toJSON VerifiedAccessTrustProviderProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "Description" Prelude.<$> description,
+               (JSON..=) "DeviceTrustProviderType"
+                 Prelude.<$> deviceTrustProviderType,
+               (JSON..=) "TrustProviderType" Prelude.<$> trustProviderType,
+               (JSON..=) "UserTrustProviderType"
+                 Prelude.<$> userTrustProviderType,
+               (JSON..=) "VerifiedAccessTrustProviderId"
+                 Prelude.<$> verifiedAccessTrustProviderId]))
+instance Property "Description" VerifiedAccessTrustProviderProperty where
+  type PropertyType "Description" VerifiedAccessTrustProviderProperty = Value Prelude.Text
+  set newValue VerifiedAccessTrustProviderProperty {..}
+    = VerifiedAccessTrustProviderProperty
+        {description = Prelude.pure newValue, ..}
+instance Property "DeviceTrustProviderType" VerifiedAccessTrustProviderProperty where
+  type PropertyType "DeviceTrustProviderType" VerifiedAccessTrustProviderProperty = Value Prelude.Text
+  set newValue VerifiedAccessTrustProviderProperty {..}
+    = VerifiedAccessTrustProviderProperty
+        {deviceTrustProviderType = Prelude.pure newValue, ..}
+instance Property "TrustProviderType" VerifiedAccessTrustProviderProperty where
+  type PropertyType "TrustProviderType" VerifiedAccessTrustProviderProperty = Value Prelude.Text
+  set newValue VerifiedAccessTrustProviderProperty {..}
+    = VerifiedAccessTrustProviderProperty
+        {trustProviderType = Prelude.pure newValue, ..}
+instance Property "UserTrustProviderType" VerifiedAccessTrustProviderProperty where
+  type PropertyType "UserTrustProviderType" VerifiedAccessTrustProviderProperty = Value Prelude.Text
+  set newValue VerifiedAccessTrustProviderProperty {..}
+    = VerifiedAccessTrustProviderProperty
+        {userTrustProviderType = Prelude.pure newValue, ..}
+instance Property "VerifiedAccessTrustProviderId" VerifiedAccessTrustProviderProperty where
+  type PropertyType "VerifiedAccessTrustProviderId" VerifiedAccessTrustProviderProperty = Value Prelude.Text
+  set newValue VerifiedAccessTrustProviderProperty {..}
+    = VerifiedAccessTrustProviderProperty
+        {verifiedAccessTrustProviderId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessTrustProviderProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessTrustProviderProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessInstance/VerifiedAccessTrustProviderProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessInstance.VerifiedAccessTrustProviderProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data VerifiedAccessTrustProviderProperty :: Prelude.Type
+instance ToResourceProperties VerifiedAccessTrustProviderProperty
+instance Prelude.Eq VerifiedAccessTrustProviderProperty
+instance Prelude.Show VerifiedAccessTrustProviderProperty
+instance JSON.ToJSON VerifiedAccessTrustProviderProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessTrustProvider.hs b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider.hs
@@ -0,0 +1,138 @@
+module Stratosphere.EC2.VerifiedAccessTrustProvider (
+        module Exports, VerifiedAccessTrustProvider(..),
+        mkVerifiedAccessTrustProvider
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessTrustProvider.DeviceOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessTrustProvider.NativeApplicationOidcOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessTrustProvider.OidcOptionsProperty as Exports
+import {-# SOURCE #-} Stratosphere.EC2.VerifiedAccessTrustProvider.SseSpecificationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data VerifiedAccessTrustProvider
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html>
+    VerifiedAccessTrustProvider {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-description>
+                                 description :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-deviceoptions>
+                                 deviceOptions :: (Prelude.Maybe DeviceOptionsProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-devicetrustprovidertype>
+                                 deviceTrustProviderType :: (Prelude.Maybe (Value Prelude.Text)),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions>
+                                 nativeApplicationOidcOptions :: (Prelude.Maybe NativeApplicationOidcOptionsProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-oidcoptions>
+                                 oidcOptions :: (Prelude.Maybe OidcOptionsProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-policyreferencename>
+                                 policyReferenceName :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-ssespecification>
+                                 sseSpecification :: (Prelude.Maybe SseSpecificationProperty),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-tags>
+                                 tags :: (Prelude.Maybe [Tag]),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-trustprovidertype>
+                                 trustProviderType :: (Value Prelude.Text),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-verifiedaccesstrustprovider.html#cfn-ec2-verifiedaccesstrustprovider-usertrustprovidertype>
+                                 userTrustProviderType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVerifiedAccessTrustProvider ::
+  Value Prelude.Text
+  -> Value Prelude.Text -> VerifiedAccessTrustProvider
+mkVerifiedAccessTrustProvider policyReferenceName trustProviderType
+  = VerifiedAccessTrustProvider
+      {haddock_workaround_ = (),
+       policyReferenceName = policyReferenceName,
+       trustProviderType = trustProviderType,
+       description = Prelude.Nothing, deviceOptions = Prelude.Nothing,
+       deviceTrustProviderType = Prelude.Nothing,
+       nativeApplicationOidcOptions = Prelude.Nothing,
+       oidcOptions = Prelude.Nothing, sseSpecification = Prelude.Nothing,
+       tags = Prelude.Nothing, userTrustProviderType = Prelude.Nothing}
+instance ToResourceProperties VerifiedAccessTrustProvider where
+  toResourceProperties VerifiedAccessTrustProvider {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessTrustProvider",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["PolicyReferenceName" JSON..= policyReferenceName,
+                            "TrustProviderType" JSON..= trustProviderType]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DeviceOptions" Prelude.<$> deviceOptions,
+                               (JSON..=) "DeviceTrustProviderType"
+                                 Prelude.<$> deviceTrustProviderType,
+                               (JSON..=) "NativeApplicationOidcOptions"
+                                 Prelude.<$> nativeApplicationOidcOptions,
+                               (JSON..=) "OidcOptions" Prelude.<$> oidcOptions,
+                               (JSON..=) "SseSpecification" Prelude.<$> sseSpecification,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "UserTrustProviderType"
+                                 Prelude.<$> userTrustProviderType]))}
+instance JSON.ToJSON VerifiedAccessTrustProvider where
+  toJSON VerifiedAccessTrustProvider {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["PolicyReferenceName" JSON..= policyReferenceName,
+               "TrustProviderType" JSON..= trustProviderType]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DeviceOptions" Prelude.<$> deviceOptions,
+                  (JSON..=) "DeviceTrustProviderType"
+                    Prelude.<$> deviceTrustProviderType,
+                  (JSON..=) "NativeApplicationOidcOptions"
+                    Prelude.<$> nativeApplicationOidcOptions,
+                  (JSON..=) "OidcOptions" Prelude.<$> oidcOptions,
+                  (JSON..=) "SseSpecification" Prelude.<$> sseSpecification,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "UserTrustProviderType"
+                    Prelude.<$> userTrustProviderType])))
+instance Property "Description" VerifiedAccessTrustProvider where
+  type PropertyType "Description" VerifiedAccessTrustProvider = Value Prelude.Text
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider
+        {description = Prelude.pure newValue, ..}
+instance Property "DeviceOptions" VerifiedAccessTrustProvider where
+  type PropertyType "DeviceOptions" VerifiedAccessTrustProvider = DeviceOptionsProperty
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider
+        {deviceOptions = Prelude.pure newValue, ..}
+instance Property "DeviceTrustProviderType" VerifiedAccessTrustProvider where
+  type PropertyType "DeviceTrustProviderType" VerifiedAccessTrustProvider = Value Prelude.Text
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider
+        {deviceTrustProviderType = Prelude.pure newValue, ..}
+instance Property "NativeApplicationOidcOptions" VerifiedAccessTrustProvider where
+  type PropertyType "NativeApplicationOidcOptions" VerifiedAccessTrustProvider = NativeApplicationOidcOptionsProperty
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider
+        {nativeApplicationOidcOptions = Prelude.pure newValue, ..}
+instance Property "OidcOptions" VerifiedAccessTrustProvider where
+  type PropertyType "OidcOptions" VerifiedAccessTrustProvider = OidcOptionsProperty
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider
+        {oidcOptions = Prelude.pure newValue, ..}
+instance Property "PolicyReferenceName" VerifiedAccessTrustProvider where
+  type PropertyType "PolicyReferenceName" VerifiedAccessTrustProvider = Value Prelude.Text
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider {policyReferenceName = newValue, ..}
+instance Property "SseSpecification" VerifiedAccessTrustProvider where
+  type PropertyType "SseSpecification" VerifiedAccessTrustProvider = SseSpecificationProperty
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider
+        {sseSpecification = Prelude.pure newValue, ..}
+instance Property "Tags" VerifiedAccessTrustProvider where
+  type PropertyType "Tags" VerifiedAccessTrustProvider = [Tag]
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider {tags = Prelude.pure newValue, ..}
+instance Property "TrustProviderType" VerifiedAccessTrustProvider where
+  type PropertyType "TrustProviderType" VerifiedAccessTrustProvider = Value Prelude.Text
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider {trustProviderType = newValue, ..}
+instance Property "UserTrustProviderType" VerifiedAccessTrustProvider where
+  type PropertyType "UserTrustProviderType" VerifiedAccessTrustProvider = Value Prelude.Text
+  set newValue VerifiedAccessTrustProvider {..}
+    = VerifiedAccessTrustProvider
+        {userTrustProviderType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/DeviceOptionsProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/DeviceOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/DeviceOptionsProperty.hs
@@ -0,0 +1,46 @@
+module Stratosphere.EC2.VerifiedAccessTrustProvider.DeviceOptionsProperty (
+        DeviceOptionsProperty(..), mkDeviceOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data DeviceOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-deviceoptions.html>
+    DeviceOptionsProperty {haddock_workaround_ :: (),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-deviceoptions.html#cfn-ec2-verifiedaccesstrustprovider-deviceoptions-publicsigningkeyurl>
+                           publicSigningKeyUrl :: (Prelude.Maybe (Value Prelude.Text)),
+                           -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-deviceoptions.html#cfn-ec2-verifiedaccesstrustprovider-deviceoptions-tenantid>
+                           tenantId :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDeviceOptionsProperty :: DeviceOptionsProperty
+mkDeviceOptionsProperty
+  = DeviceOptionsProperty
+      {haddock_workaround_ = (), publicSigningKeyUrl = Prelude.Nothing,
+       tenantId = Prelude.Nothing}
+instance ToResourceProperties DeviceOptionsProperty where
+  toResourceProperties DeviceOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessTrustProvider.DeviceOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "PublicSigningKeyUrl" Prelude.<$> publicSigningKeyUrl,
+                            (JSON..=) "TenantId" Prelude.<$> tenantId])}
+instance JSON.ToJSON DeviceOptionsProperty where
+  toJSON DeviceOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "PublicSigningKeyUrl" Prelude.<$> publicSigningKeyUrl,
+               (JSON..=) "TenantId" Prelude.<$> tenantId]))
+instance Property "PublicSigningKeyUrl" DeviceOptionsProperty where
+  type PropertyType "PublicSigningKeyUrl" DeviceOptionsProperty = Value Prelude.Text
+  set newValue DeviceOptionsProperty {..}
+    = DeviceOptionsProperty
+        {publicSigningKeyUrl = Prelude.pure newValue, ..}
+instance Property "TenantId" DeviceOptionsProperty where
+  type PropertyType "TenantId" DeviceOptionsProperty = Value Prelude.Text
+  set newValue DeviceOptionsProperty {..}
+    = DeviceOptionsProperty {tenantId = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/DeviceOptionsProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/DeviceOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/DeviceOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessTrustProvider.DeviceOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data DeviceOptionsProperty :: Prelude.Type
+instance ToResourceProperties DeviceOptionsProperty
+instance Prelude.Eq DeviceOptionsProperty
+instance Prelude.Show DeviceOptionsProperty
+instance JSON.ToJSON DeviceOptionsProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/NativeApplicationOidcOptionsProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/NativeApplicationOidcOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/NativeApplicationOidcOptionsProperty.hs
@@ -0,0 +1,111 @@
+module Stratosphere.EC2.VerifiedAccessTrustProvider.NativeApplicationOidcOptionsProperty (
+        NativeApplicationOidcOptionsProperty(..),
+        mkNativeApplicationOidcOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data NativeApplicationOidcOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions.html>
+    NativeApplicationOidcOptionsProperty {haddock_workaround_ :: (),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions-authorizationendpoint>
+                                          authorizationEndpoint :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions-clientid>
+                                          clientId :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions-clientsecret>
+                                          clientSecret :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions-issuer>
+                                          issuer :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions-publicsigningkeyendpoint>
+                                          publicSigningKeyEndpoint :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions-scope>
+                                          scope :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions-tokenendpoint>
+                                          tokenEndpoint :: (Prelude.Maybe (Value Prelude.Text)),
+                                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-nativeapplicationoidcoptions-userinfoendpoint>
+                                          userInfoEndpoint :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkNativeApplicationOidcOptionsProperty ::
+  NativeApplicationOidcOptionsProperty
+mkNativeApplicationOidcOptionsProperty
+  = NativeApplicationOidcOptionsProperty
+      {haddock_workaround_ = (), authorizationEndpoint = Prelude.Nothing,
+       clientId = Prelude.Nothing, clientSecret = Prelude.Nothing,
+       issuer = Prelude.Nothing,
+       publicSigningKeyEndpoint = Prelude.Nothing,
+       scope = Prelude.Nothing, tokenEndpoint = Prelude.Nothing,
+       userInfoEndpoint = Prelude.Nothing}
+instance ToResourceProperties NativeApplicationOidcOptionsProperty where
+  toResourceProperties NativeApplicationOidcOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessTrustProvider.NativeApplicationOidcOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AuthorizationEndpoint"
+                              Prelude.<$> authorizationEndpoint,
+                            (JSON..=) "ClientId" Prelude.<$> clientId,
+                            (JSON..=) "ClientSecret" Prelude.<$> clientSecret,
+                            (JSON..=) "Issuer" Prelude.<$> issuer,
+                            (JSON..=) "PublicSigningKeyEndpoint"
+                              Prelude.<$> publicSigningKeyEndpoint,
+                            (JSON..=) "Scope" Prelude.<$> scope,
+                            (JSON..=) "TokenEndpoint" Prelude.<$> tokenEndpoint,
+                            (JSON..=) "UserInfoEndpoint" Prelude.<$> userInfoEndpoint])}
+instance JSON.ToJSON NativeApplicationOidcOptionsProperty where
+  toJSON NativeApplicationOidcOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AuthorizationEndpoint"
+                 Prelude.<$> authorizationEndpoint,
+               (JSON..=) "ClientId" Prelude.<$> clientId,
+               (JSON..=) "ClientSecret" Prelude.<$> clientSecret,
+               (JSON..=) "Issuer" Prelude.<$> issuer,
+               (JSON..=) "PublicSigningKeyEndpoint"
+                 Prelude.<$> publicSigningKeyEndpoint,
+               (JSON..=) "Scope" Prelude.<$> scope,
+               (JSON..=) "TokenEndpoint" Prelude.<$> tokenEndpoint,
+               (JSON..=) "UserInfoEndpoint" Prelude.<$> userInfoEndpoint]))
+instance Property "AuthorizationEndpoint" NativeApplicationOidcOptionsProperty where
+  type PropertyType "AuthorizationEndpoint" NativeApplicationOidcOptionsProperty = Value Prelude.Text
+  set newValue NativeApplicationOidcOptionsProperty {..}
+    = NativeApplicationOidcOptionsProperty
+        {authorizationEndpoint = Prelude.pure newValue, ..}
+instance Property "ClientId" NativeApplicationOidcOptionsProperty where
+  type PropertyType "ClientId" NativeApplicationOidcOptionsProperty = Value Prelude.Text
+  set newValue NativeApplicationOidcOptionsProperty {..}
+    = NativeApplicationOidcOptionsProperty
+        {clientId = Prelude.pure newValue, ..}
+instance Property "ClientSecret" NativeApplicationOidcOptionsProperty where
+  type PropertyType "ClientSecret" NativeApplicationOidcOptionsProperty = Value Prelude.Text
+  set newValue NativeApplicationOidcOptionsProperty {..}
+    = NativeApplicationOidcOptionsProperty
+        {clientSecret = Prelude.pure newValue, ..}
+instance Property "Issuer" NativeApplicationOidcOptionsProperty where
+  type PropertyType "Issuer" NativeApplicationOidcOptionsProperty = Value Prelude.Text
+  set newValue NativeApplicationOidcOptionsProperty {..}
+    = NativeApplicationOidcOptionsProperty
+        {issuer = Prelude.pure newValue, ..}
+instance Property "PublicSigningKeyEndpoint" NativeApplicationOidcOptionsProperty where
+  type PropertyType "PublicSigningKeyEndpoint" NativeApplicationOidcOptionsProperty = Value Prelude.Text
+  set newValue NativeApplicationOidcOptionsProperty {..}
+    = NativeApplicationOidcOptionsProperty
+        {publicSigningKeyEndpoint = Prelude.pure newValue, ..}
+instance Property "Scope" NativeApplicationOidcOptionsProperty where
+  type PropertyType "Scope" NativeApplicationOidcOptionsProperty = Value Prelude.Text
+  set newValue NativeApplicationOidcOptionsProperty {..}
+    = NativeApplicationOidcOptionsProperty
+        {scope = Prelude.pure newValue, ..}
+instance Property "TokenEndpoint" NativeApplicationOidcOptionsProperty where
+  type PropertyType "TokenEndpoint" NativeApplicationOidcOptionsProperty = Value Prelude.Text
+  set newValue NativeApplicationOidcOptionsProperty {..}
+    = NativeApplicationOidcOptionsProperty
+        {tokenEndpoint = Prelude.pure newValue, ..}
+instance Property "UserInfoEndpoint" NativeApplicationOidcOptionsProperty where
+  type PropertyType "UserInfoEndpoint" NativeApplicationOidcOptionsProperty = Value Prelude.Text
+  set newValue NativeApplicationOidcOptionsProperty {..}
+    = NativeApplicationOidcOptionsProperty
+        {userInfoEndpoint = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/NativeApplicationOidcOptionsProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/NativeApplicationOidcOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/NativeApplicationOidcOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessTrustProvider.NativeApplicationOidcOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data NativeApplicationOidcOptionsProperty :: Prelude.Type
+instance ToResourceProperties NativeApplicationOidcOptionsProperty
+instance Prelude.Eq NativeApplicationOidcOptionsProperty
+instance Prelude.Show NativeApplicationOidcOptionsProperty
+instance JSON.ToJSON NativeApplicationOidcOptionsProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/OidcOptionsProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/OidcOptionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/OidcOptionsProperty.hs
@@ -0,0 +1,92 @@
+module Stratosphere.EC2.VerifiedAccessTrustProvider.OidcOptionsProperty (
+        OidcOptionsProperty(..), mkOidcOptionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data OidcOptionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-oidcoptions.html>
+    OidcOptionsProperty {haddock_workaround_ :: (),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-oidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-oidcoptions-authorizationendpoint>
+                         authorizationEndpoint :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-oidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-oidcoptions-clientid>
+                         clientId :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-oidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-oidcoptions-clientsecret>
+                         clientSecret :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-oidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-oidcoptions-issuer>
+                         issuer :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-oidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-oidcoptions-scope>
+                         scope :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-oidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-oidcoptions-tokenendpoint>
+                         tokenEndpoint :: (Prelude.Maybe (Value Prelude.Text)),
+                         -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-oidcoptions.html#cfn-ec2-verifiedaccesstrustprovider-oidcoptions-userinfoendpoint>
+                         userInfoEndpoint :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOidcOptionsProperty :: OidcOptionsProperty
+mkOidcOptionsProperty
+  = OidcOptionsProperty
+      {haddock_workaround_ = (), authorizationEndpoint = Prelude.Nothing,
+       clientId = Prelude.Nothing, clientSecret = Prelude.Nothing,
+       issuer = Prelude.Nothing, scope = Prelude.Nothing,
+       tokenEndpoint = Prelude.Nothing,
+       userInfoEndpoint = Prelude.Nothing}
+instance ToResourceProperties OidcOptionsProperty where
+  toResourceProperties OidcOptionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessTrustProvider.OidcOptions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "AuthorizationEndpoint"
+                              Prelude.<$> authorizationEndpoint,
+                            (JSON..=) "ClientId" Prelude.<$> clientId,
+                            (JSON..=) "ClientSecret" Prelude.<$> clientSecret,
+                            (JSON..=) "Issuer" Prelude.<$> issuer,
+                            (JSON..=) "Scope" Prelude.<$> scope,
+                            (JSON..=) "TokenEndpoint" Prelude.<$> tokenEndpoint,
+                            (JSON..=) "UserInfoEndpoint" Prelude.<$> userInfoEndpoint])}
+instance JSON.ToJSON OidcOptionsProperty where
+  toJSON OidcOptionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "AuthorizationEndpoint"
+                 Prelude.<$> authorizationEndpoint,
+               (JSON..=) "ClientId" Prelude.<$> clientId,
+               (JSON..=) "ClientSecret" Prelude.<$> clientSecret,
+               (JSON..=) "Issuer" Prelude.<$> issuer,
+               (JSON..=) "Scope" Prelude.<$> scope,
+               (JSON..=) "TokenEndpoint" Prelude.<$> tokenEndpoint,
+               (JSON..=) "UserInfoEndpoint" Prelude.<$> userInfoEndpoint]))
+instance Property "AuthorizationEndpoint" OidcOptionsProperty where
+  type PropertyType "AuthorizationEndpoint" OidcOptionsProperty = Value Prelude.Text
+  set newValue OidcOptionsProperty {..}
+    = OidcOptionsProperty
+        {authorizationEndpoint = Prelude.pure newValue, ..}
+instance Property "ClientId" OidcOptionsProperty where
+  type PropertyType "ClientId" OidcOptionsProperty = Value Prelude.Text
+  set newValue OidcOptionsProperty {..}
+    = OidcOptionsProperty {clientId = Prelude.pure newValue, ..}
+instance Property "ClientSecret" OidcOptionsProperty where
+  type PropertyType "ClientSecret" OidcOptionsProperty = Value Prelude.Text
+  set newValue OidcOptionsProperty {..}
+    = OidcOptionsProperty {clientSecret = Prelude.pure newValue, ..}
+instance Property "Issuer" OidcOptionsProperty where
+  type PropertyType "Issuer" OidcOptionsProperty = Value Prelude.Text
+  set newValue OidcOptionsProperty {..}
+    = OidcOptionsProperty {issuer = Prelude.pure newValue, ..}
+instance Property "Scope" OidcOptionsProperty where
+  type PropertyType "Scope" OidcOptionsProperty = Value Prelude.Text
+  set newValue OidcOptionsProperty {..}
+    = OidcOptionsProperty {scope = Prelude.pure newValue, ..}
+instance Property "TokenEndpoint" OidcOptionsProperty where
+  type PropertyType "TokenEndpoint" OidcOptionsProperty = Value Prelude.Text
+  set newValue OidcOptionsProperty {..}
+    = OidcOptionsProperty {tokenEndpoint = Prelude.pure newValue, ..}
+instance Property "UserInfoEndpoint" OidcOptionsProperty where
+  type PropertyType "UserInfoEndpoint" OidcOptionsProperty = Value Prelude.Text
+  set newValue OidcOptionsProperty {..}
+    = OidcOptionsProperty
+        {userInfoEndpoint = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/OidcOptionsProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/OidcOptionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/OidcOptionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessTrustProvider.OidcOptionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OidcOptionsProperty :: Prelude.Type
+instance ToResourceProperties OidcOptionsProperty
+instance Prelude.Eq OidcOptionsProperty
+instance Prelude.Show OidcOptionsProperty
+instance JSON.ToJSON OidcOptionsProperty
diff --git a/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/SseSpecificationProperty.hs b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/SseSpecificationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/SseSpecificationProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.EC2.VerifiedAccessTrustProvider.SseSpecificationProperty (
+        SseSpecificationProperty(..), mkSseSpecificationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data SseSpecificationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-ssespecification.html>
+    SseSpecificationProperty {haddock_workaround_ :: (),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-ssespecification.html#cfn-ec2-verifiedaccesstrustprovider-ssespecification-customermanagedkeyenabled>
+                              customerManagedKeyEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+                              -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-verifiedaccesstrustprovider-ssespecification.html#cfn-ec2-verifiedaccesstrustprovider-ssespecification-kmskeyarn>
+                              kmsKeyArn :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkSseSpecificationProperty :: SseSpecificationProperty
+mkSseSpecificationProperty
+  = SseSpecificationProperty
+      {haddock_workaround_ = (),
+       customerManagedKeyEnabled = Prelude.Nothing,
+       kmsKeyArn = Prelude.Nothing}
+instance ToResourceProperties SseSpecificationProperty where
+  toResourceProperties SseSpecificationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VerifiedAccessTrustProvider.SseSpecification",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "CustomerManagedKeyEnabled"
+                              Prelude.<$> customerManagedKeyEnabled,
+                            (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn])}
+instance JSON.ToJSON SseSpecificationProperty where
+  toJSON SseSpecificationProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "CustomerManagedKeyEnabled"
+                 Prelude.<$> customerManagedKeyEnabled,
+               (JSON..=) "KmsKeyArn" Prelude.<$> kmsKeyArn]))
+instance Property "CustomerManagedKeyEnabled" SseSpecificationProperty where
+  type PropertyType "CustomerManagedKeyEnabled" SseSpecificationProperty = Value Prelude.Bool
+  set newValue SseSpecificationProperty {..}
+    = SseSpecificationProperty
+        {customerManagedKeyEnabled = Prelude.pure newValue, ..}
+instance Property "KmsKeyArn" SseSpecificationProperty where
+  type PropertyType "KmsKeyArn" SseSpecificationProperty = Value Prelude.Text
+  set newValue SseSpecificationProperty {..}
+    = SseSpecificationProperty {kmsKeyArn = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/SseSpecificationProperty.hs-boot b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/SseSpecificationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VerifiedAccessTrustProvider/SseSpecificationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.EC2.VerifiedAccessTrustProvider.SseSpecificationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data SseSpecificationProperty :: Prelude.Type
+instance ToResourceProperties SseSpecificationProperty
+instance Prelude.Eq SseSpecificationProperty
+instance Prelude.Show SseSpecificationProperty
+instance JSON.ToJSON SseSpecificationProperty
diff --git a/gen/Stratosphere/EC2/Volume.hs b/gen/Stratosphere/EC2/Volume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/Volume.hs
@@ -0,0 +1,142 @@
+module Stratosphere.EC2.Volume (
+        Volume(..), mkVolume
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Volume
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html>
+    Volume {haddock_workaround_ :: (),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-autoenableio>
+            autoEnableIO :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-availabilityzone>
+            availabilityZone :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-encrypted>
+            encrypted :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-iops>
+            iops :: (Prelude.Maybe (Value Prelude.Integer)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-kmskeyid>
+            kmsKeyId :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-multiattachenabled>
+            multiAttachEnabled :: (Prelude.Maybe (Value Prelude.Bool)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-outpostarn>
+            outpostArn :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-size>
+            size :: (Prelude.Maybe (Value Prelude.Integer)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-snapshotid>
+            snapshotId :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-tags>
+            tags :: (Prelude.Maybe [Tag]),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-throughput>
+            throughput :: (Prelude.Maybe (Value Prelude.Integer)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-volumeinitializationrate>
+            volumeInitializationRate :: (Prelude.Maybe (Value Prelude.Integer)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volume.html#cfn-ec2-volume-volumetype>
+            volumeType :: (Prelude.Maybe (Value Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVolume :: Value Prelude.Text -> Volume
+mkVolume availabilityZone
+  = Volume
+      {haddock_workaround_ = (), availabilityZone = availabilityZone,
+       autoEnableIO = Prelude.Nothing, encrypted = Prelude.Nothing,
+       iops = Prelude.Nothing, kmsKeyId = Prelude.Nothing,
+       multiAttachEnabled = Prelude.Nothing, outpostArn = Prelude.Nothing,
+       size = Prelude.Nothing, snapshotId = Prelude.Nothing,
+       tags = Prelude.Nothing, throughput = Prelude.Nothing,
+       volumeInitializationRate = Prelude.Nothing,
+       volumeType = Prelude.Nothing}
+instance ToResourceProperties Volume where
+  toResourceProperties Volume {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::Volume", supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["AvailabilityZone" JSON..= availabilityZone]
+                           (Prelude.catMaybes
+                              [(JSON..=) "AutoEnableIO" Prelude.<$> autoEnableIO,
+                               (JSON..=) "Encrypted" Prelude.<$> encrypted,
+                               (JSON..=) "Iops" Prelude.<$> iops,
+                               (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                               (JSON..=) "MultiAttachEnabled" Prelude.<$> multiAttachEnabled,
+                               (JSON..=) "OutpostArn" Prelude.<$> outpostArn,
+                               (JSON..=) "Size" Prelude.<$> size,
+                               (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "Throughput" Prelude.<$> throughput,
+                               (JSON..=) "VolumeInitializationRate"
+                                 Prelude.<$> volumeInitializationRate,
+                               (JSON..=) "VolumeType" Prelude.<$> volumeType]))}
+instance JSON.ToJSON Volume where
+  toJSON Volume {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["AvailabilityZone" JSON..= availabilityZone]
+              (Prelude.catMaybes
+                 [(JSON..=) "AutoEnableIO" Prelude.<$> autoEnableIO,
+                  (JSON..=) "Encrypted" Prelude.<$> encrypted,
+                  (JSON..=) "Iops" Prelude.<$> iops,
+                  (JSON..=) "KmsKeyId" Prelude.<$> kmsKeyId,
+                  (JSON..=) "MultiAttachEnabled" Prelude.<$> multiAttachEnabled,
+                  (JSON..=) "OutpostArn" Prelude.<$> outpostArn,
+                  (JSON..=) "Size" Prelude.<$> size,
+                  (JSON..=) "SnapshotId" Prelude.<$> snapshotId,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "Throughput" Prelude.<$> throughput,
+                  (JSON..=) "VolumeInitializationRate"
+                    Prelude.<$> volumeInitializationRate,
+                  (JSON..=) "VolumeType" Prelude.<$> volumeType])))
+instance Property "AutoEnableIO" Volume where
+  type PropertyType "AutoEnableIO" Volume = Value Prelude.Bool
+  set newValue Volume {..}
+    = Volume {autoEnableIO = Prelude.pure newValue, ..}
+instance Property "AvailabilityZone" Volume where
+  type PropertyType "AvailabilityZone" Volume = Value Prelude.Text
+  set newValue Volume {..} = Volume {availabilityZone = newValue, ..}
+instance Property "Encrypted" Volume where
+  type PropertyType "Encrypted" Volume = Value Prelude.Bool
+  set newValue Volume {..}
+    = Volume {encrypted = Prelude.pure newValue, ..}
+instance Property "Iops" Volume where
+  type PropertyType "Iops" Volume = Value Prelude.Integer
+  set newValue Volume {..}
+    = Volume {iops = Prelude.pure newValue, ..}
+instance Property "KmsKeyId" Volume where
+  type PropertyType "KmsKeyId" Volume = Value Prelude.Text
+  set newValue Volume {..}
+    = Volume {kmsKeyId = Prelude.pure newValue, ..}
+instance Property "MultiAttachEnabled" Volume where
+  type PropertyType "MultiAttachEnabled" Volume = Value Prelude.Bool
+  set newValue Volume {..}
+    = Volume {multiAttachEnabled = Prelude.pure newValue, ..}
+instance Property "OutpostArn" Volume where
+  type PropertyType "OutpostArn" Volume = Value Prelude.Text
+  set newValue Volume {..}
+    = Volume {outpostArn = Prelude.pure newValue, ..}
+instance Property "Size" Volume where
+  type PropertyType "Size" Volume = Value Prelude.Integer
+  set newValue Volume {..}
+    = Volume {size = Prelude.pure newValue, ..}
+instance Property "SnapshotId" Volume where
+  type PropertyType "SnapshotId" Volume = Value Prelude.Text
+  set newValue Volume {..}
+    = Volume {snapshotId = Prelude.pure newValue, ..}
+instance Property "Tags" Volume where
+  type PropertyType "Tags" Volume = [Tag]
+  set newValue Volume {..}
+    = Volume {tags = Prelude.pure newValue, ..}
+instance Property "Throughput" Volume where
+  type PropertyType "Throughput" Volume = Value Prelude.Integer
+  set newValue Volume {..}
+    = Volume {throughput = Prelude.pure newValue, ..}
+instance Property "VolumeInitializationRate" Volume where
+  type PropertyType "VolumeInitializationRate" Volume = Value Prelude.Integer
+  set newValue Volume {..}
+    = Volume {volumeInitializationRate = Prelude.pure newValue, ..}
+instance Property "VolumeType" Volume where
+  type PropertyType "VolumeType" Volume = Value Prelude.Text
+  set newValue Volume {..}
+    = Volume {volumeType = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/EC2/VolumeAttachment.hs b/gen/Stratosphere/EC2/VolumeAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/EC2/VolumeAttachment.hs
@@ -0,0 +1,52 @@
+module Stratosphere.EC2.VolumeAttachment (
+        VolumeAttachment(..), mkVolumeAttachment
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data VolumeAttachment
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volumeattachment.html>
+    VolumeAttachment {haddock_workaround_ :: (),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volumeattachment.html#cfn-ec2-volumeattachment-device>
+                      device :: (Prelude.Maybe (Value Prelude.Text)),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volumeattachment.html#cfn-ec2-volumeattachment-instanceid>
+                      instanceId :: (Value Prelude.Text),
+                      -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-volumeattachment.html#cfn-ec2-volumeattachment-volumeid>
+                      volumeId :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkVolumeAttachment ::
+  Value Prelude.Text -> Value Prelude.Text -> VolumeAttachment
+mkVolumeAttachment instanceId volumeId
+  = VolumeAttachment
+      {haddock_workaround_ = (), instanceId = instanceId,
+       volumeId = volumeId, device = Prelude.Nothing}
+instance ToResourceProperties VolumeAttachment where
+  toResourceProperties VolumeAttachment {..}
+    = ResourceProperties
+        {awsType = "AWS::EC2::VolumeAttachment",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["InstanceId" JSON..= instanceId, "VolumeId" JSON..= volumeId]
+                           (Prelude.catMaybes [(JSON..=) "Device" Prelude.<$> device]))}
+instance JSON.ToJSON VolumeAttachment where
+  toJSON VolumeAttachment {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["InstanceId" JSON..= instanceId, "VolumeId" JSON..= volumeId]
+              (Prelude.catMaybes [(JSON..=) "Device" Prelude.<$> device])))
+instance Property "Device" VolumeAttachment where
+  type PropertyType "Device" VolumeAttachment = Value Prelude.Text
+  set newValue VolumeAttachment {..}
+    = VolumeAttachment {device = Prelude.pure newValue, ..}
+instance Property "InstanceId" VolumeAttachment where
+  type PropertyType "InstanceId" VolumeAttachment = Value Prelude.Text
+  set newValue VolumeAttachment {..}
+    = VolumeAttachment {instanceId = newValue, ..}
+instance Property "VolumeId" VolumeAttachment where
+  type PropertyType "VolumeId" VolumeAttachment = Value Prelude.Text
+  set newValue VolumeAttachment {..}
+    = VolumeAttachment {volumeId = newValue, ..}
diff --git a/stratosphere-ec2.cabal b/stratosphere-ec2.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-ec2.cabal
@@ -0,0 +1,393 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-ec2
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS EC2.
+description:    Integration into stratosphere to generate resources and properties for AWS EC2
+category:       AWS, Cloud, EC2
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.EC2.CapacityManagerDataExport
+      Stratosphere.EC2.CapacityReservation
+      Stratosphere.EC2.CapacityReservation.CapacityAllocationProperty
+      Stratosphere.EC2.CapacityReservation.CommitmentInfoProperty
+      Stratosphere.EC2.CapacityReservation.TagSpecificationProperty
+      Stratosphere.EC2.CapacityReservationFleet
+      Stratosphere.EC2.CapacityReservationFleet.InstanceTypeSpecificationProperty
+      Stratosphere.EC2.CapacityReservationFleet.TagSpecificationProperty
+      Stratosphere.EC2.CarrierGateway
+      Stratosphere.EC2.ClientVpnAuthorizationRule
+      Stratosphere.EC2.ClientVpnEndpoint
+      Stratosphere.EC2.ClientVpnEndpoint.CertificateAuthenticationRequestProperty
+      Stratosphere.EC2.ClientVpnEndpoint.ClientAuthenticationRequestProperty
+      Stratosphere.EC2.ClientVpnEndpoint.ClientConnectOptionsProperty
+      Stratosphere.EC2.ClientVpnEndpoint.ClientLoginBannerOptionsProperty
+      Stratosphere.EC2.ClientVpnEndpoint.ClientRouteEnforcementOptionsProperty
+      Stratosphere.EC2.ClientVpnEndpoint.ConnectionLogOptionsProperty
+      Stratosphere.EC2.ClientVpnEndpoint.DirectoryServiceAuthenticationRequestProperty
+      Stratosphere.EC2.ClientVpnEndpoint.FederatedAuthenticationRequestProperty
+      Stratosphere.EC2.ClientVpnEndpoint.TagSpecificationProperty
+      Stratosphere.EC2.ClientVpnRoute
+      Stratosphere.EC2.ClientVpnTargetNetworkAssociation
+      Stratosphere.EC2.CustomerGateway
+      Stratosphere.EC2.DHCPOptions
+      Stratosphere.EC2.EC2Fleet
+      Stratosphere.EC2.EC2Fleet.AcceleratorCountRequestProperty
+      Stratosphere.EC2.EC2Fleet.AcceleratorTotalMemoryMiBRequestProperty
+      Stratosphere.EC2.EC2Fleet.BaselineEbsBandwidthMbpsRequestProperty
+      Stratosphere.EC2.EC2Fleet.BaselinePerformanceFactorsRequestProperty
+      Stratosphere.EC2.EC2Fleet.BlockDeviceMappingProperty
+      Stratosphere.EC2.EC2Fleet.CapacityRebalanceProperty
+      Stratosphere.EC2.EC2Fleet.CapacityReservationOptionsRequestProperty
+      Stratosphere.EC2.EC2Fleet.CpuPerformanceFactorRequestProperty
+      Stratosphere.EC2.EC2Fleet.EbsBlockDeviceProperty
+      Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateConfigRequestProperty
+      Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateOverridesRequestProperty
+      Stratosphere.EC2.EC2Fleet.FleetLaunchTemplateSpecificationRequestProperty
+      Stratosphere.EC2.EC2Fleet.InstanceRequirementsRequestProperty
+      Stratosphere.EC2.EC2Fleet.MaintenanceStrategiesProperty
+      Stratosphere.EC2.EC2Fleet.MemoryGiBPerVCpuRequestProperty
+      Stratosphere.EC2.EC2Fleet.MemoryMiBRequestProperty
+      Stratosphere.EC2.EC2Fleet.NetworkBandwidthGbpsRequestProperty
+      Stratosphere.EC2.EC2Fleet.NetworkInterfaceCountRequestProperty
+      Stratosphere.EC2.EC2Fleet.OnDemandOptionsRequestProperty
+      Stratosphere.EC2.EC2Fleet.PerformanceFactorReferenceRequestProperty
+      Stratosphere.EC2.EC2Fleet.PlacementProperty
+      Stratosphere.EC2.EC2Fleet.SpotOptionsRequestProperty
+      Stratosphere.EC2.EC2Fleet.TagSpecificationProperty
+      Stratosphere.EC2.EC2Fleet.TargetCapacitySpecificationRequestProperty
+      Stratosphere.EC2.EC2Fleet.TotalLocalStorageGBRequestProperty
+      Stratosphere.EC2.EC2Fleet.VCpuCountRangeRequestProperty
+      Stratosphere.EC2.EgressOnlyInternetGateway
+      Stratosphere.EC2.EIP
+      Stratosphere.EC2.EIPAssociation
+      Stratosphere.EC2.EnclaveCertificateIamRoleAssociation
+      Stratosphere.EC2.FlowLog
+      Stratosphere.EC2.FlowLog.DestinationOptionsProperty
+      Stratosphere.EC2.GatewayRouteTableAssociation
+      Stratosphere.EC2.Host
+      Stratosphere.EC2.Instance
+      Stratosphere.EC2.Instance.AssociationParameterProperty
+      Stratosphere.EC2.Instance.BlockDeviceMappingProperty
+      Stratosphere.EC2.Instance.CpuOptionsProperty
+      Stratosphere.EC2.Instance.CreditSpecificationProperty
+      Stratosphere.EC2.Instance.EbsProperty
+      Stratosphere.EC2.Instance.ElasticGpuSpecificationProperty
+      Stratosphere.EC2.Instance.ElasticInferenceAcceleratorProperty
+      Stratosphere.EC2.Instance.EnaSrdSpecificationProperty
+      Stratosphere.EC2.Instance.EnaSrdUdpSpecificationProperty
+      Stratosphere.EC2.Instance.EnclaveOptionsProperty
+      Stratosphere.EC2.Instance.HibernationOptionsProperty
+      Stratosphere.EC2.Instance.InstanceIpv6AddressProperty
+      Stratosphere.EC2.Instance.LaunchTemplateSpecificationProperty
+      Stratosphere.EC2.Instance.LicenseSpecificationProperty
+      Stratosphere.EC2.Instance.MetadataOptionsProperty
+      Stratosphere.EC2.Instance.NetworkInterfaceProperty
+      Stratosphere.EC2.Instance.PrivateDnsNameOptionsProperty
+      Stratosphere.EC2.Instance.PrivateIpAddressSpecificationProperty
+      Stratosphere.EC2.Instance.SsmAssociationProperty
+      Stratosphere.EC2.Instance.StateProperty
+      Stratosphere.EC2.Instance.VolumeProperty
+      Stratosphere.EC2.InstanceConnectEndpoint
+      Stratosphere.EC2.InternetGateway
+      Stratosphere.EC2.IPAM
+      Stratosphere.EC2.IPAM.IpamOperatingRegionProperty
+      Stratosphere.EC2.IPAM.IpamOrganizationalUnitExclusionProperty
+      Stratosphere.EC2.IPAMAllocation
+      Stratosphere.EC2.IPAMPool
+      Stratosphere.EC2.IPAMPool.ProvisionedCidrProperty
+      Stratosphere.EC2.IPAMPool.SourceResourceProperty
+      Stratosphere.EC2.IPAMPoolCidr
+      Stratosphere.EC2.IPAMResourceDiscovery
+      Stratosphere.EC2.IPAMResourceDiscovery.IpamOperatingRegionProperty
+      Stratosphere.EC2.IPAMResourceDiscovery.IpamResourceDiscoveryOrganizationalUnitExclusionProperty
+      Stratosphere.EC2.IPAMResourceDiscoveryAssociation
+      Stratosphere.EC2.IPAMScope
+      Stratosphere.EC2.IpPoolRouteTableAssociation
+      Stratosphere.EC2.KeyPair
+      Stratosphere.EC2.LaunchTemplate
+      Stratosphere.EC2.LaunchTemplate.AcceleratorCountProperty
+      Stratosphere.EC2.LaunchTemplate.AcceleratorTotalMemoryMiBProperty
+      Stratosphere.EC2.LaunchTemplate.BaselineEbsBandwidthMbpsProperty
+      Stratosphere.EC2.LaunchTemplate.BaselinePerformanceFactorsProperty
+      Stratosphere.EC2.LaunchTemplate.BlockDeviceMappingProperty
+      Stratosphere.EC2.LaunchTemplate.CapacityReservationSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.CapacityReservationTargetProperty
+      Stratosphere.EC2.LaunchTemplate.ConnectionTrackingSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.CpuOptionsProperty
+      Stratosphere.EC2.LaunchTemplate.CpuProperty
+      Stratosphere.EC2.LaunchTemplate.CreditSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.EbsProperty
+      Stratosphere.EC2.LaunchTemplate.EnaSrdSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.EnaSrdUdpSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.EnclaveOptionsProperty
+      Stratosphere.EC2.LaunchTemplate.HibernationOptionsProperty
+      Stratosphere.EC2.LaunchTemplate.IamInstanceProfileProperty
+      Stratosphere.EC2.LaunchTemplate.InstanceMarketOptionsProperty
+      Stratosphere.EC2.LaunchTemplate.InstanceRequirementsProperty
+      Stratosphere.EC2.LaunchTemplate.Ipv4PrefixSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.Ipv6AddProperty
+      Stratosphere.EC2.LaunchTemplate.Ipv6PrefixSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.LaunchTemplateDataProperty
+      Stratosphere.EC2.LaunchTemplate.LaunchTemplateTagSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.LicenseSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.MaintenanceOptionsProperty
+      Stratosphere.EC2.LaunchTemplate.MemoryGiBPerVCpuProperty
+      Stratosphere.EC2.LaunchTemplate.MemoryMiBProperty
+      Stratosphere.EC2.LaunchTemplate.MetadataOptionsProperty
+      Stratosphere.EC2.LaunchTemplate.MonitoringProperty
+      Stratosphere.EC2.LaunchTemplate.NetworkBandwidthGbpsProperty
+      Stratosphere.EC2.LaunchTemplate.NetworkInterfaceCountProperty
+      Stratosphere.EC2.LaunchTemplate.NetworkInterfaceProperty
+      Stratosphere.EC2.LaunchTemplate.NetworkPerformanceOptionsProperty
+      Stratosphere.EC2.LaunchTemplate.PlacementProperty
+      Stratosphere.EC2.LaunchTemplate.PrivateDnsNameOptionsProperty
+      Stratosphere.EC2.LaunchTemplate.PrivateIpAddProperty
+      Stratosphere.EC2.LaunchTemplate.ReferenceProperty
+      Stratosphere.EC2.LaunchTemplate.SpotOptionsProperty
+      Stratosphere.EC2.LaunchTemplate.TagSpecificationProperty
+      Stratosphere.EC2.LaunchTemplate.TotalLocalStorageGBProperty
+      Stratosphere.EC2.LaunchTemplate.VCpuCountProperty
+      Stratosphere.EC2.LocalGatewayRoute
+      Stratosphere.EC2.LocalGatewayRouteTable
+      Stratosphere.EC2.LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+      Stratosphere.EC2.LocalGatewayRouteTableVPCAssociation
+      Stratosphere.EC2.LocalGatewayVirtualInterface
+      Stratosphere.EC2.LocalGatewayVirtualInterfaceGroup
+      Stratosphere.EC2.NatGateway
+      Stratosphere.EC2.NetworkAcl
+      Stratosphere.EC2.NetworkAclEntry
+      Stratosphere.EC2.NetworkAclEntry.IcmpProperty
+      Stratosphere.EC2.NetworkAclEntry.PortRangeProperty
+      Stratosphere.EC2.NetworkInsightsAccessScope
+      Stratosphere.EC2.NetworkInsightsAccessScope.AccessScopePathRequestProperty
+      Stratosphere.EC2.NetworkInsightsAccessScope.PacketHeaderStatementRequestProperty
+      Stratosphere.EC2.NetworkInsightsAccessScope.PathStatementRequestProperty
+      Stratosphere.EC2.NetworkInsightsAccessScope.ResourceStatementRequestProperty
+      Stratosphere.EC2.NetworkInsightsAccessScope.ThroughResourcesStatementRequestProperty
+      Stratosphere.EC2.NetworkInsightsAccessScopeAnalysis
+      Stratosphere.EC2.NetworkInsightsAnalysis
+      Stratosphere.EC2.NetworkInsightsAnalysis.AdditionalDetailProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.AlternatePathHintProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisAclRuleProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisComponentProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisLoadBalancerListenerProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisLoadBalancerTargetProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisPacketHeaderProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisRouteTableRouteProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.AnalysisSecurityGroupRuleProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.ExplanationProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.PathComponentProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.PortRangeProperty
+      Stratosphere.EC2.NetworkInsightsAnalysis.TransitGatewayRouteTableRouteProperty
+      Stratosphere.EC2.NetworkInsightsPath
+      Stratosphere.EC2.NetworkInsightsPath.FilterPortRangeProperty
+      Stratosphere.EC2.NetworkInsightsPath.PathFilterProperty
+      Stratosphere.EC2.NetworkInterface
+      Stratosphere.EC2.NetworkInterface.ConnectionTrackingSpecificationProperty
+      Stratosphere.EC2.NetworkInterface.InstanceIpv6AddressProperty
+      Stratosphere.EC2.NetworkInterface.Ipv4PrefixSpecificationProperty
+      Stratosphere.EC2.NetworkInterface.Ipv6PrefixSpecificationProperty
+      Stratosphere.EC2.NetworkInterface.PrivateIpAddressSpecificationProperty
+      Stratosphere.EC2.NetworkInterfaceAttachment
+      Stratosphere.EC2.NetworkInterfaceAttachment.EnaSrdSpecificationProperty
+      Stratosphere.EC2.NetworkInterfaceAttachment.EnaSrdUdpSpecificationProperty
+      Stratosphere.EC2.NetworkInterfacePermission
+      Stratosphere.EC2.NetworkPerformanceMetricSubscription
+      Stratosphere.EC2.PlacementGroup
+      Stratosphere.EC2.PrefixList
+      Stratosphere.EC2.PrefixList.EntryProperty
+      Stratosphere.EC2.Route
+      Stratosphere.EC2.RouteServer
+      Stratosphere.EC2.RouteServerAssociation
+      Stratosphere.EC2.RouteServerEndpoint
+      Stratosphere.EC2.RouteServerPeer
+      Stratosphere.EC2.RouteServerPeer.BgpOptionsProperty
+      Stratosphere.EC2.RouteServerPropagation
+      Stratosphere.EC2.RouteTable
+      Stratosphere.EC2.SecurityGroup
+      Stratosphere.EC2.SecurityGroup.EgressProperty
+      Stratosphere.EC2.SecurityGroup.IngressProperty
+      Stratosphere.EC2.SecurityGroupEgress
+      Stratosphere.EC2.SecurityGroupIngress
+      Stratosphere.EC2.SecurityGroupVpcAssociation
+      Stratosphere.EC2.SnapshotBlockPublicAccess
+      Stratosphere.EC2.SpotFleet
+      Stratosphere.EC2.SpotFleet.AcceleratorCountRequestProperty
+      Stratosphere.EC2.SpotFleet.AcceleratorTotalMemoryMiBRequestProperty
+      Stratosphere.EC2.SpotFleet.BaselineEbsBandwidthMbpsRequestProperty
+      Stratosphere.EC2.SpotFleet.BaselinePerformanceFactorsRequestProperty
+      Stratosphere.EC2.SpotFleet.BlockDeviceMappingProperty
+      Stratosphere.EC2.SpotFleet.ClassicLoadBalancerProperty
+      Stratosphere.EC2.SpotFleet.ClassicLoadBalancersConfigProperty
+      Stratosphere.EC2.SpotFleet.CpuPerformanceFactorRequestProperty
+      Stratosphere.EC2.SpotFleet.EbsBlockDeviceProperty
+      Stratosphere.EC2.SpotFleet.FleetLaunchTemplateSpecificationProperty
+      Stratosphere.EC2.SpotFleet.GroupIdentifierProperty
+      Stratosphere.EC2.SpotFleet.IamInstanceProfileSpecificationProperty
+      Stratosphere.EC2.SpotFleet.InstanceIpv6AddressProperty
+      Stratosphere.EC2.SpotFleet.InstanceNetworkInterfaceSpecificationProperty
+      Stratosphere.EC2.SpotFleet.InstanceRequirementsRequestProperty
+      Stratosphere.EC2.SpotFleet.LaunchTemplateConfigProperty
+      Stratosphere.EC2.SpotFleet.LaunchTemplateOverridesProperty
+      Stratosphere.EC2.SpotFleet.LoadBalancersConfigProperty
+      Stratosphere.EC2.SpotFleet.MemoryGiBPerVCpuRequestProperty
+      Stratosphere.EC2.SpotFleet.MemoryMiBRequestProperty
+      Stratosphere.EC2.SpotFleet.NetworkBandwidthGbpsRequestProperty
+      Stratosphere.EC2.SpotFleet.NetworkInterfaceCountRequestProperty
+      Stratosphere.EC2.SpotFleet.PerformanceFactorReferenceRequestProperty
+      Stratosphere.EC2.SpotFleet.PrivateIpAddressSpecificationProperty
+      Stratosphere.EC2.SpotFleet.SpotCapacityRebalanceProperty
+      Stratosphere.EC2.SpotFleet.SpotFleetLaunchSpecificationProperty
+      Stratosphere.EC2.SpotFleet.SpotFleetMonitoringProperty
+      Stratosphere.EC2.SpotFleet.SpotFleetRequestConfigDataProperty
+      Stratosphere.EC2.SpotFleet.SpotFleetTagSpecificationProperty
+      Stratosphere.EC2.SpotFleet.SpotMaintenanceStrategiesProperty
+      Stratosphere.EC2.SpotFleet.SpotPlacementProperty
+      Stratosphere.EC2.SpotFleet.TargetGroupProperty
+      Stratosphere.EC2.SpotFleet.TargetGroupsConfigProperty
+      Stratosphere.EC2.SpotFleet.TotalLocalStorageGBRequestProperty
+      Stratosphere.EC2.SpotFleet.VCpuCountRangeRequestProperty
+      Stratosphere.EC2.Subnet
+      Stratosphere.EC2.Subnet.BlockPublicAccessStatesProperty
+      Stratosphere.EC2.Subnet.PrivateDnsNameOptionsOnLaunchProperty
+      Stratosphere.EC2.SubnetCidrBlock
+      Stratosphere.EC2.SubnetNetworkAclAssociation
+      Stratosphere.EC2.SubnetRouteTableAssociation
+      Stratosphere.EC2.TrafficMirrorFilter
+      Stratosphere.EC2.TrafficMirrorFilterRule
+      Stratosphere.EC2.TrafficMirrorFilterRule.TrafficMirrorPortRangeProperty
+      Stratosphere.EC2.TrafficMirrorSession
+      Stratosphere.EC2.TrafficMirrorTarget
+      Stratosphere.EC2.TransitGateway
+      Stratosphere.EC2.TransitGatewayAttachment
+      Stratosphere.EC2.TransitGatewayAttachment.OptionsProperty
+      Stratosphere.EC2.TransitGatewayConnect
+      Stratosphere.EC2.TransitGatewayConnect.TransitGatewayConnectOptionsProperty
+      Stratosphere.EC2.TransitGatewayConnectPeer
+      Stratosphere.EC2.TransitGatewayConnectPeer.TransitGatewayAttachmentBgpConfigurationProperty
+      Stratosphere.EC2.TransitGatewayConnectPeer.TransitGatewayConnectPeerConfigurationProperty
+      Stratosphere.EC2.TransitGatewayMulticastDomain
+      Stratosphere.EC2.TransitGatewayMulticastDomain.OptionsProperty
+      Stratosphere.EC2.TransitGatewayMulticastDomainAssociation
+      Stratosphere.EC2.TransitGatewayMulticastGroupMember
+      Stratosphere.EC2.TransitGatewayMulticastGroupSource
+      Stratosphere.EC2.TransitGatewayPeeringAttachment
+      Stratosphere.EC2.TransitGatewayPeeringAttachment.PeeringAttachmentStatusProperty
+      Stratosphere.EC2.TransitGatewayRoute
+      Stratosphere.EC2.TransitGatewayRouteTable
+      Stratosphere.EC2.TransitGatewayRouteTableAssociation
+      Stratosphere.EC2.TransitGatewayRouteTablePropagation
+      Stratosphere.EC2.TransitGatewayVpcAttachment
+      Stratosphere.EC2.TransitGatewayVpcAttachment.OptionsProperty
+      Stratosphere.EC2.VerifiedAccessEndpoint
+      Stratosphere.EC2.VerifiedAccessEndpoint.CidrOptionsProperty
+      Stratosphere.EC2.VerifiedAccessEndpoint.LoadBalancerOptionsProperty
+      Stratosphere.EC2.VerifiedAccessEndpoint.NetworkInterfaceOptionsProperty
+      Stratosphere.EC2.VerifiedAccessEndpoint.PortRangeProperty
+      Stratosphere.EC2.VerifiedAccessEndpoint.RdsOptionsProperty
+      Stratosphere.EC2.VerifiedAccessEndpoint.SseSpecificationProperty
+      Stratosphere.EC2.VerifiedAccessGroup
+      Stratosphere.EC2.VerifiedAccessGroup.SseSpecificationProperty
+      Stratosphere.EC2.VerifiedAccessInstance
+      Stratosphere.EC2.VerifiedAccessInstance.CloudWatchLogsProperty
+      Stratosphere.EC2.VerifiedAccessInstance.KinesisDataFirehoseProperty
+      Stratosphere.EC2.VerifiedAccessInstance.S3Property
+      Stratosphere.EC2.VerifiedAccessInstance.VerifiedAccessLogsProperty
+      Stratosphere.EC2.VerifiedAccessInstance.VerifiedAccessTrustProviderProperty
+      Stratosphere.EC2.VerifiedAccessTrustProvider
+      Stratosphere.EC2.VerifiedAccessTrustProvider.DeviceOptionsProperty
+      Stratosphere.EC2.VerifiedAccessTrustProvider.NativeApplicationOidcOptionsProperty
+      Stratosphere.EC2.VerifiedAccessTrustProvider.OidcOptionsProperty
+      Stratosphere.EC2.VerifiedAccessTrustProvider.SseSpecificationProperty
+      Stratosphere.EC2.Volume
+      Stratosphere.EC2.VolumeAttachment
+      Stratosphere.EC2.VPC
+      Stratosphere.EC2.VPCBlockPublicAccessExclusion
+      Stratosphere.EC2.VPCBlockPublicAccessOptions
+      Stratosphere.EC2.VPCCidrBlock
+      Stratosphere.EC2.VPCDHCPOptionsAssociation
+      Stratosphere.EC2.VPCEndpoint
+      Stratosphere.EC2.VPCEndpoint.DnsOptionsSpecificationProperty
+      Stratosphere.EC2.VPCEndpointConnectionNotification
+      Stratosphere.EC2.VPCEndpointService
+      Stratosphere.EC2.VPCEndpointServicePermissions
+      Stratosphere.EC2.VPCGatewayAttachment
+      Stratosphere.EC2.VPCPeeringConnection
+      Stratosphere.EC2.VPNConnection
+      Stratosphere.EC2.VPNConnection.CloudwatchLogOptionsSpecificationProperty
+      Stratosphere.EC2.VPNConnection.IKEVersionsRequestListValueProperty
+      Stratosphere.EC2.VPNConnection.Phase1DHGroupNumbersRequestListValueProperty
+      Stratosphere.EC2.VPNConnection.Phase1EncryptionAlgorithmsRequestListValueProperty
+      Stratosphere.EC2.VPNConnection.Phase1IntegrityAlgorithmsRequestListValueProperty
+      Stratosphere.EC2.VPNConnection.Phase2DHGroupNumbersRequestListValueProperty
+      Stratosphere.EC2.VPNConnection.Phase2EncryptionAlgorithmsRequestListValueProperty
+      Stratosphere.EC2.VPNConnection.Phase2IntegrityAlgorithmsRequestListValueProperty
+      Stratosphere.EC2.VPNConnection.VpnTunnelLogOptionsSpecificationProperty
+      Stratosphere.EC2.VPNConnection.VpnTunnelOptionsSpecificationProperty
+      Stratosphere.EC2.VPNConnectionRoute
+      Stratosphere.EC2.VPNGateway
+      Stratosphere.EC2.VPNGatewayRoutePropagation
+  other-modules:
+      Paths_stratosphere_ec2
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
