{
  "description": "LaunchTemplate is the Schema for the LaunchTemplates API. Provides an EC2 launch template resource. Can be used to create instances or auto scaling groups.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "LaunchTemplateSpec defines the desired state of LaunchTemplate",
      "properties": {
        "deletionPolicy": {
          "default": "Delete",
          "description": "DeletionPolicy specifies what will happen to the underlying external\nwhen this managed resource is deleted - either \"Delete\" or \"Orphan\" the\nexternal resource.\nThis field is planned to be deprecated in favor of the ManagementPolicies\nfield in a future release. Currently, both could be set independently and\nnon-default values would be honored if the feature flag is enabled.\nSee the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223",
          "enum": [
            "Orphan",
            "Delete"
          ],
          "type": "string"
        },
        "forProvider": {
          "properties": {
            "blockDeviceMappings": {
              "description": "Specify volumes to attach to the instance besides the volumes specified by the AMI.\nSee Block Devices below for details.",
              "items": {
                "properties": {
                  "deviceName": {
                    "description": "The name of the device to mount.",
                    "type": "string"
                  },
                  "ebs": {
                    "description": "Configure EBS volume properties.",
                    "items": {
                      "properties": {
                        "deleteOnTermination": {
                          "description": "Whether the volume should be destroyed on instance termination.\nSee Preserving Amazon EBS Volumes on Instance Termination for more information.",
                          "type": "string"
                        },
                        "encrypted": {
                          "description": "Enables EBS encryption on the volume.\nCannot be used with snapshot_id.",
                          "type": "string"
                        },
                        "iops": {
                          "description": "The amount of provisioned IOPS.\nThis must be set with a volume_type of \"io1/io2/gp3\".",
                          "type": "number"
                        },
                        "kmsKeyId": {
                          "description": "The ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) to use when creating the encrypted volume.\nencrypted must be set to true when this is set.",
                          "type": "string"
                        },
                        "kmsKeyIdRef": {
                          "description": "Reference to a Key in kms to populate kmsKeyId.",
                          "properties": {
                            "name": {
                              "description": "Name of the referenced object.",
                              "type": "string"
                            },
                            "policy": {
                              "description": "Policies for referencing.",
                              "properties": {
                                "resolution": {
                                  "default": "Required",
                                  "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                                  "enum": [
                                    "Required",
                                    "Optional"
                                  ],
                                  "type": "string"
                                },
                                "resolve": {
                                  "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                                  "enum": [
                                    "Always",
                                    "IfNotPresent"
                                  ],
                                  "type": "string"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "name"
                          ],
                          "type": "object",
                          "additionalProperties": false
                        },
                        "kmsKeyIdSelector": {
                          "description": "Selector for a Key in kms to populate kmsKeyId.",
                          "properties": {
                            "matchControllerRef": {
                              "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                              "type": "boolean"
                            },
                            "matchLabels": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "MatchLabels ensures an object with matching labels is selected.",
                              "type": "object"
                            },
                            "policy": {
                              "description": "Policies for selection.",
                              "properties": {
                                "resolution": {
                                  "default": "Required",
                                  "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                                  "enum": [
                                    "Required",
                                    "Optional"
                                  ],
                                  "type": "string"
                                },
                                "resolve": {
                                  "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                                  "enum": [
                                    "Always",
                                    "IfNotPresent"
                                  ],
                                  "type": "string"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "snapshotId": {
                          "description": "The Snapshot ID to mount.",
                          "type": "string"
                        },
                        "throughput": {
                          "description": "The throughput to provision for a gp3 volume in MiB/s (specified as an integer, e.g., 500), with a maximum of 1,000 MiB/s.",
                          "type": "number"
                        },
                        "volumeInitializationRate": {
                          "description": "The volume initialization rate in MiB/s (specified as an integer, e.g. 100), with a minimum of 100 MiB/s and maximum of 300 MiB/s.",
                          "type": "number"
                        },
                        "volumeSize": {
                          "description": "The size of the volume in gigabytes.",
                          "type": "number"
                        },
                        "volumeType": {
                          "description": "The volume type.\nCan be one of standard, gp2, gp3, io1, io2, sc1 or st1.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "noDevice": {
                    "description": "Suppresses the specified device included in the AMI's block device mapping.",
                    "type": "string"
                  },
                  "virtualName": {
                    "description": "The Instance Store Device\nName\n(e.g., \"ephemeral0\").",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "capacityReservationSpecification": {
              "description": "Targeting for EC2 capacity reservations. See Capacity Reservation Specification below for more details.",
              "items": {
                "properties": {
                  "capacityReservationPreference": {
                    "description": "Indicates the instance's Capacity Reservation preferences. Can be capacity-reservations-only, open or none. If capacity_reservation_id or capacity_reservation_resource_group_arn is specified in capacity_reservation_target block, either omit capacity_reservation_preference or set it to capacity-reservations-only.",
                    "type": "string"
                  },
                  "capacityReservationTarget": {
                    "description": "Used to target a specific Capacity Reservation:",
                    "items": {
                      "properties": {
                        "capacityReservationId": {
                          "description": "The ID of the Capacity Reservation in which to run the instance.",
                          "type": "string"
                        },
                        "capacityReservationResourceGroupArn": {
                          "description": "The ARN of the Capacity Reservation resource group in which to run the instance.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "cpuOptions": {
              "description": "The CPU options for the instance. See CPU Options below for more details.",
              "items": {
                "properties": {
                  "amdSevSnp": {
                    "description": "Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is supported with M6a, R6a, and C6a instance types only. Valid values are enabled and disabled.",
                    "type": "string"
                  },
                  "coreCount": {
                    "description": "The number of CPU cores for the instance.",
                    "type": "number"
                  },
                  "threadsPerCore": {
                    "description": "The number of threads per CPU core.\nTo disable Intel Hyper-Threading Technology for the instance, specify a value of 1.\nOtherwise, specify the default value of 2.",
                    "type": "number"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "creditSpecification": {
              "description": "Customize the credit specification of the instance. See Credit\nSpecification below for more details.",
              "items": {
                "properties": {
                  "cpuCredits": {
                    "description": "The credit option for CPU usage.\nCan be standard or unlimited.\nT3 instances are launched as unlimited by default.\nT2 instances are launched as standard by default.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "defaultVersion": {
              "description": "Default Version of the launch template.",
              "type": "number"
            },
            "description": {
              "description": "Description of the launch template.",
              "type": "string"
            },
            "disableApiStop": {
              "description": "If true, enables EC2 Instance Stop Protection.",
              "type": "boolean"
            },
            "disableApiTermination": {
              "description": "If true, enables EC2 Instance\nTermination Protection",
              "type": "boolean"
            },
            "ebsOptimized": {
              "description": "If true, the launched EC2 instance will be EBS-optimized.",
              "type": "string"
            },
            "enclaveOptions": {
              "description": "Enable Nitro Enclaves on launched instances. See Enclave Options below for more details.",
              "items": {
                "properties": {
                  "enabled": {
                    "description": "If set to true, Nitro Enclaves will be enabled on the instance.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "hibernationOptions": {
              "description": "The hibernation options for the instance. See Hibernation Options below for more details.",
              "items": {
                "properties": {
                  "configured": {
                    "description": "If set to true, the launched EC2 instance will hibernation enabled.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "iamInstanceProfile": {
              "description": "The IAM Instance Profile to launch the instance with. See Instance Profile\nbelow for more details.",
              "items": {
                "properties": {
                  "arn": {
                    "description": "The Amazon Resource Name (ARN) of the instance profile. Conflicts with name.",
                    "type": "string"
                  },
                  "arnRef": {
                    "description": "Reference to a InstanceProfile in iam to populate arn.",
                    "properties": {
                      "name": {
                        "description": "Name of the referenced object.",
                        "type": "string"
                      },
                      "policy": {
                        "description": "Policies for referencing.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "arnSelector": {
                    "description": "Selector for a InstanceProfile in iam to populate arn.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "name": {
                    "description": "The name of the instance profile.",
                    "type": "string"
                  },
                  "nameRef": {
                    "description": "Reference to a InstanceProfile in iam to populate name.",
                    "properties": {
                      "name": {
                        "description": "Name of the referenced object.",
                        "type": "string"
                      },
                      "policy": {
                        "description": "Policies for referencing.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "nameSelector": {
                    "description": "Selector for a InstanceProfile in iam to populate name.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "imageId": {
              "description": "The AMI from which to launch the instance or use a Systems Manager parameter convention e.g. resolve:ssm:parameter-name. See docs for more details.",
              "type": "string"
            },
            "instanceInitiatedShutdownBehavior": {
              "description": "Shutdown behavior for the instance. Can be stop or terminate.\n(Default: stop).",
              "type": "string"
            },
            "instanceMarketOptions": {
              "description": "The market (purchasing) option for the instance. See Market Options\nbelow for details.",
              "items": {
                "properties": {
                  "marketType": {
                    "description": "The market type. Can be spot.",
                    "type": "string"
                  },
                  "spotOptions": {
                    "description": "The options for Spot Instance",
                    "items": {
                      "properties": {
                        "blockDurationMinutes": {
                          "description": "The required duration in minutes. This value must be a multiple of 60.",
                          "type": "number"
                        },
                        "instanceInterruptionBehavior": {
                          "description": "The behavior when a Spot Instance is interrupted. Can be hibernate,\nstop, or terminate. (Default: terminate).",
                          "type": "string"
                        },
                        "maxPrice": {
                          "description": "The maximum hourly price you're willing to pay for the Spot Instances.",
                          "type": "string"
                        },
                        "spotInstanceType": {
                          "description": "The Spot Instance request type. Can be one-time, or persistent.",
                          "type": "string"
                        },
                        "validUntil": {
                          "description": "The end date of the request.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "instanceRequirements": {
              "description": "The attribute requirements for the type of instance. If present then instance_type cannot be present.",
              "items": {
                "properties": {
                  "acceleratorCount": {
                    "description": "Block describing the minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips). Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "acceleratorManufacturers": {
                    "description": "List of accelerator manufacturer names. Default is any manufacturer.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "acceleratorNames": {
                    "description": "List of accelerator names. Default is any acclerator.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "acceleratorTotalMemoryMib": {
                    "description": "Block describing the minimum and maximum total memory of the accelerators. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "acceleratorTypes": {
                    "description": "List of accelerator types. Default is any accelerator type.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "allowedInstanceTypes": {
                    "description": "List of instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes. You can use strings with one or more wild cards, represented by an asterisk (*), to allow an instance type, size, or generation. The following are examples: m5.8xlarge, c5*.*, m5a.*, r*, *3*. For example, if you specify c5*, you are allowing the entire C5 instance family, which includes all C5a and C5n instance types. If you specify m5a.*, you are allowing all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is all instance types.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "bareMetal": {
                    "description": "Indicate whether bare metal instace types should be included, excluded, or required. Default is excluded.",
                    "type": "string"
                  },
                  "baselineEbsBandwidthMbps": {
                    "description": "Block describing the minimum and maximum baseline EBS bandwidth, in Mbps. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "burstablePerformance": {
                    "description": "Indicate whether burstable performance instance types should be included, excluded, or required. Default is excluded.",
                    "type": "string"
                  },
                  "cpuManufacturers": {
                    "description": "List of CPU manufacturer names. Default is any manufacturer.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "excludedInstanceTypes": {
                    "description": "List of instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk (*), to exclude an instance type, size, or generation. The following are examples: m5.8xlarge, c5*.*, m5a.*, r*, *3*. For example, if you specify c5*, you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify m5a.*, you are excluding all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is no excluded instance types.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "instanceGenerations": {
                    "description": "List of instance generation names. Default is any generation.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "localStorage": {
                    "description": "Indicate whether instance types with local storage volumes are included, excluded, or required. Default is included.",
                    "type": "string"
                  },
                  "localStorageTypes": {
                    "description": "List of local storage type names. Default any storage type.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "maxSpotPriceAsPercentageOfOptimalOnDemandPrice": {
                    "description": "The price protection threshold for Spot Instances. This is the maximum you\u2019ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Conflicts with spot_max_price_percentage_over_lowest_price",
                    "type": "number"
                  },
                  "memoryGibPerVcpu": {
                    "description": "Block describing the minimum and maximum amount of memory (GiB) per vCPU. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "memoryMib": {
                    "description": "Block describing the minimum and maximum amount of memory (MiB). Default is no maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "networkBandwidthGbps": {
                    "description": "Block describing the minimum and maximum amount of network bandwidth, in gigabits per second (Gbps). Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "networkInterfaceCount": {
                    "description": "Block describing the minimum and maximum number of network interfaces. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "onDemandMaxPricePercentageOverLowestPrice": {
                    "description": "The price protection threshold for On-Demand Instances. This is the maximum you\u2019ll pay for an On-Demand Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 20.",
                    "type": "number"
                  },
                  "requireHibernateSupport": {
                    "description": "Indicate whether instance types must support On-Demand Instance Hibernation, either true or false. Default is false.",
                    "type": "boolean"
                  },
                  "spotMaxPricePercentageOverLowestPrice": {
                    "description": "The price protection threshold for Spot Instances. This is the maximum you\u2019ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 100. Conflicts with max_spot_price_as_percentage_of_optimal_on_demand_price",
                    "type": "number"
                  },
                  "totalLocalStorageGb": {
                    "description": "Block describing the minimum and maximum total local storage (GB). Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "vcpuCount": {
                    "description": "Block describing the minimum and maximum number of vCPUs. Default is no maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "instanceType": {
              "description": "The type of the instance. If present then instance_requirements cannot be present.",
              "type": "string"
            },
            "kernelId": {
              "description": "The kernel ID.",
              "type": "string"
            },
            "keyName": {
              "description": "The key name to use for the instance.",
              "type": "string"
            },
            "licenseSpecification": {
              "description": "A list of license specifications to associate with. See License Specification below for more details.",
              "items": {
                "properties": {
                  "licenseConfigurationArn": {
                    "description": "ARN of the license configuration.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "maintenanceOptions": {
              "description": "The maintenance options for the instance. See Maintenance Options below for more details.",
              "items": {
                "properties": {
                  "autoRecovery": {
                    "description": "Disables the automatic recovery behavior of your instance or sets it to default. Can be \"default\" or \"disabled\". See Recover your instance for more details.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "metadataOptions": {
              "description": "Customize the metadata options for the instance. See Metadata Options below for more details.",
              "items": {
                "properties": {
                  "httpEndpoint": {
                    "description": "Whether the metadata service is available. Can be \"enabled\" or \"disabled\". (Default: \"enabled\").",
                    "type": "string"
                  },
                  "httpProtocolIpv6": {
                    "description": "Enables or disables the IPv6 endpoint for the instance metadata service. Can be \"enabled\" or \"disabled\".",
                    "type": "string"
                  },
                  "httpPutResponseHopLimit": {
                    "description": "The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel. Can be an integer from 1 to 64. (Default: 1).",
                    "type": "number"
                  },
                  "httpTokens": {
                    "description": "Whether or not the metadata service requires session tokens, also referred to as Instance Metadata Service Version 2 (IMDSv2). Can be \"optional\" or \"required\". (Default: \"optional\").",
                    "type": "string"
                  },
                  "instanceMetadataTags": {
                    "description": "Enables or disables access to instance tags from the instance metadata service. Can be \"enabled\" or \"disabled\".",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "monitoring": {
              "description": "The monitoring option for the instance. See Monitoring below for more details.",
              "items": {
                "properties": {
                  "enabled": {
                    "description": "If true, the launched EC2 instance will have detailed monitoring enabled.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "name": {
              "description": "The name of the launch template.",
              "type": "string"
            },
            "networkInterfaces": {
              "description": "Customize network interfaces to be attached at instance boot time. See Network\nInterfaces below for more details.",
              "items": {
                "properties": {
                  "associateCarrierIpAddress": {
                    "description": "Associate a Carrier IP address with eth0 for a new network interface. Use this option when you launch an instance in a Wavelength Zone and want to associate a Carrier IP address with the network interface. Boolean value, can be left unset.",
                    "type": "string"
                  },
                  "associatePublicIpAddress": {
                    "description": "Associate a public ip address with the network interface. Boolean value, can be left unset.",
                    "type": "string"
                  },
                  "connectionTrackingSpecification": {
                    "description": "The Connection Tracking Configuration for the network interface. See Amazon EC2 security group connection tracking",
                    "items": {
                      "properties": {
                        "tcpEstablishedTimeout": {
                          "description": "Timeout (in seconds) for idle TCP connections in an established state. Min: 60 seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended: Less than 432000 seconds.",
                          "type": "number"
                        },
                        "udpStreamTimeout": {
                          "description": "Timeout (in seconds) for idle UDP flows that have seen traffic only in a single direction or a single request-response transaction. Min: 30 seconds. Max: 60 seconds. Default: 30 seconds.",
                          "type": "number"
                        },
                        "udpTimeout": {
                          "description": "Timeout (in seconds) for idle UDP flows classified as streams which have seen more than one request-response transaction. Min: 60 seconds. Max: 180 seconds (3 minutes). Default: 180 seconds.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "deleteOnTermination": {
                    "description": "Whether the network interface should be destroyed on instance termination.",
                    "type": "string"
                  },
                  "description": {
                    "description": "Description of the network interface.",
                    "type": "string"
                  },
                  "deviceIndex": {
                    "description": "The integer index of the network interface attachment.",
                    "type": "number"
                  },
                  "enaSrdSpecification": {
                    "description": "Configuration for Elastic Network Adapter (ENA) Express settings. Applies to network interfaces that use the ena Express feature. See details below.",
                    "items": {
                      "properties": {
                        "enaSrdEnabled": {
                          "description": "Whether to enable ENA Express. ENA Express uses AWS Scalable Reliable Datagram (SRD) technology to improve the performance of TCP traffic.",
                          "type": "boolean"
                        },
                        "enaSrdUdpSpecification": {
                          "description": "Configuration for ENA Express UDP optimization. See details below.",
                          "items": {
                            "properties": {
                              "enaSrdUdpEnabled": {
                                "description": "Whether to enable UDP traffic optimization through ENA Express. Requires ena_srd_enabled to be true.",
                                "type": "boolean"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "interfaceType": {
                    "description": "The type of network interface. To create an Elastic Fabric Adapter (EFA), specify efa.",
                    "type": "string"
                  },
                  "ipv4AddressCount": {
                    "description": "The number of secondary private IPv4 addresses to assign to a network interface. Conflicts with ipv4_addresses",
                    "type": "number"
                  },
                  "ipv4Addresses": {
                    "description": "One or more private IPv4 addresses to associate. Conflicts with ipv4_address_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "ipv4PrefixCount": {
                    "description": "The number of IPv4 prefixes to be automatically assigned to the network interface. Conflicts with ipv4_prefixes",
                    "type": "number"
                  },
                  "ipv4Prefixes": {
                    "description": "One or more IPv4 prefixes to be assigned to the network interface. Conflicts with ipv4_prefix_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "ipv6AddressCount": {
                    "description": "The number of IPv6 addresses to assign to a network interface. Conflicts with ipv6_addresses",
                    "type": "number"
                  },
                  "ipv6Addresses": {
                    "description": "One or more specific IPv6 addresses from the IPv6 CIDR block range of your subnet. Conflicts with ipv6_address_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "ipv6PrefixCount": {
                    "description": "The number of IPv6 prefixes to be automatically assigned to the network interface. Conflicts with ipv6_prefixes",
                    "type": "number"
                  },
                  "ipv6Prefixes": {
                    "description": "One or more IPv6 prefixes to be assigned to the network interface. Conflicts with ipv6_prefix_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "networkCardIndex": {
                    "description": "The index of the network card. Some instance types support multiple network cards. The primary network interface must be assigned to network card index 0. The default is network card index 0.",
                    "type": "number"
                  },
                  "networkInterfaceId": {
                    "description": "The ID of the network interface to attach.",
                    "type": "string"
                  },
                  "networkInterfaceIdRef": {
                    "description": "Reference to a NetworkInterface in ec2 to populate networkInterfaceId.",
                    "properties": {
                      "name": {
                        "description": "Name of the referenced object.",
                        "type": "string"
                      },
                      "policy": {
                        "description": "Policies for referencing.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "networkInterfaceIdSelector": {
                    "description": "Selector for a NetworkInterface in ec2 to populate networkInterfaceId.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "primaryIpv6": {
                    "description": "Whether the first IPv6 GUA will be made the primary IPv6 address.",
                    "type": "string"
                  },
                  "privateIpAddress": {
                    "description": "The primary private IPv4 address.",
                    "type": "string"
                  },
                  "securityGroupRefs": {
                    "description": "References to SecurityGroup in ec2 to populate securityGroups.",
                    "items": {
                      "description": "A Reference to a named object.",
                      "properties": {
                        "name": {
                          "description": "Name of the referenced object.",
                          "type": "string"
                        },
                        "policy": {
                          "description": "Policies for referencing.",
                          "properties": {
                            "resolution": {
                              "default": "Required",
                              "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                              "enum": [
                                "Required",
                                "Optional"
                              ],
                              "type": "string"
                            },
                            "resolve": {
                              "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                              "enum": [
                                "Always",
                                "IfNotPresent"
                              ],
                              "type": "string"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "name"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "securityGroupSelector": {
                    "description": "Selector for a list of SecurityGroup in ec2 to populate securityGroups.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "securityGroups": {
                    "description": "A list of security group IDs to associate.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "subnetId": {
                    "description": "The VPC Subnet ID to associate.",
                    "type": "string"
                  },
                  "subnetIdRef": {
                    "description": "Reference to a Subnet in ec2 to populate subnetId.",
                    "properties": {
                      "name": {
                        "description": "Name of the referenced object.",
                        "type": "string"
                      },
                      "policy": {
                        "description": "Policies for referencing.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "subnetIdSelector": {
                    "description": "Selector for a Subnet in ec2 to populate subnetId.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "placement": {
              "description": "The placement of the instance. See Placement below for more details.",
              "items": {
                "properties": {
                  "affinity": {
                    "description": "The affinity setting for an instance on a Dedicated Host.",
                    "type": "string"
                  },
                  "availabilityZone": {
                    "description": "The Availability Zone for the instance.",
                    "type": "string"
                  },
                  "groupId": {
                    "description": "The ID of the placement group for the instance. Conflicts with group_name.",
                    "type": "string"
                  },
                  "groupName": {
                    "description": "The name of the placement group for the instance. Conflicts with group_id.",
                    "type": "string"
                  },
                  "hostId": {
                    "description": "The ID of the Dedicated Host for the instance.",
                    "type": "string"
                  },
                  "hostResourceGroupArn": {
                    "description": "The ARN of the Host Resource Group in which to launch instances.",
                    "type": "string"
                  },
                  "partitionNumber": {
                    "description": "The number of the partition the instance should launch in. Valid only if the placement group strategy is set to partition.",
                    "type": "number"
                  },
                  "spreadDomain": {
                    "description": "Reserved for future use.",
                    "type": "string"
                  },
                  "tenancy": {
                    "description": "The tenancy of the instance (if the instance is running in a VPC). Can be default, dedicated, or host.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "privateDnsNameOptions": {
              "description": "The options for the instance hostname. The default values are inherited from the subnet. See Private DNS Name Options below for more details.",
              "items": {
                "properties": {
                  "enableResourceNameDnsARecord": {
                    "description": "Indicates whether to respond to DNS queries for instance hostnames with DNS A records.",
                    "type": "boolean"
                  },
                  "enableResourceNameDnsAaaaRecord": {
                    "description": "Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.",
                    "type": "boolean"
                  },
                  "hostnameType": {
                    "description": "The type of hostname for Amazon EC2 instances. For IPv4 only subnets, an instance DNS name must be based on the instance IPv4 address. For IPv6 native subnets, an instance DNS name must be based on the instance ID. For dual-stack subnets, you can specify whether DNS names use the instance IPv4 address or the instance ID. Valid values: ip-name and resource-name.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "ramDiskId": {
              "description": "The ID of the RAM disk.",
              "type": "string"
            },
            "region": {
              "description": "Region where this resource will be managed. Defaults to the Region set in the provider configuration.\nRegion is the region you'd like your resource to be created in.",
              "type": "string"
            },
            "securityGroupNameRefs": {
              "description": "References to SecurityGroup in ec2 to populate securityGroupNames.",
              "items": {
                "description": "A Reference to a named object.",
                "properties": {
                  "name": {
                    "description": "Name of the referenced object.",
                    "type": "string"
                  },
                  "policy": {
                    "description": "Policies for referencing.",
                    "properties": {
                      "resolution": {
                        "default": "Required",
                        "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                        "enum": [
                          "Required",
                          "Optional"
                        ],
                        "type": "string"
                      },
                      "resolve": {
                        "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                        "enum": [
                          "Always",
                          "IfNotPresent"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "securityGroupNameSelector": {
              "description": "Selector for a list of SecurityGroup in ec2 to populate securityGroupNames.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "securityGroupNames": {
              "description": "A list of security group names to associate with. If you are creating Instances in a VPC, use\nvpc_security_group_ids instead.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "tagSpecifications": {
              "description": "The tags to apply to the resources during launch. See Tag Specifications below for more details. Default tags are currently not propagated to ASG created resources so you may wish to inject your default tags into this variable against the relevant child resource types created.",
              "items": {
                "properties": {
                  "resourceType": {
                    "description": "The type of resource to tag.",
                    "type": "string"
                  },
                  "tags": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "A map of tags to assign to the resource.",
                    "type": "object",
                    "x-kubernetes-map-type": "granular"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "tags": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Key-value map of resource tags.",
              "type": "object",
              "x-kubernetes-map-type": "granular"
            },
            "updateDefaultVersion": {
              "description": "Whether to update Default Version each update. Conflicts with default_version.",
              "type": "boolean"
            },
            "userData": {
              "description": "The base64-encoded user data to provide when launching the instance.",
              "type": "string"
            },
            "vpcSecurityGroupIdRefs": {
              "description": "References to SecurityGroup in ec2 to populate vpcSecurityGroupIds.",
              "items": {
                "description": "A Reference to a named object.",
                "properties": {
                  "name": {
                    "description": "Name of the referenced object.",
                    "type": "string"
                  },
                  "policy": {
                    "description": "Policies for referencing.",
                    "properties": {
                      "resolution": {
                        "default": "Required",
                        "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                        "enum": [
                          "Required",
                          "Optional"
                        ],
                        "type": "string"
                      },
                      "resolve": {
                        "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                        "enum": [
                          "Always",
                          "IfNotPresent"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "vpcSecurityGroupIdSelector": {
              "description": "Selector for a list of SecurityGroup in ec2 to populate vpcSecurityGroupIds.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "vpcSecurityGroupIds": {
              "description": "A list of security group IDs to associate with. Conflicts with network_interfaces.security_groups",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            }
          },
          "required": [
            "region"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "initProvider": {
          "description": "THIS IS A BETA FIELD. It will be honored\nunless the Management Policies feature flag is disabled.\nInitProvider holds the same fields as ForProvider, with the exception\nof Identifier and other resource reference fields. The fields that are\nin InitProvider are merged into ForProvider when the resource is created.\nThe same fields are also added to the terraform ignore_changes hook, to\navoid updating them after creation. This is useful for fields that are\nrequired on creation, but we do not desire to update them after creation,\nfor example because of an external controller is managing them, like an\nautoscaler.",
          "properties": {
            "blockDeviceMappings": {
              "description": "Specify volumes to attach to the instance besides the volumes specified by the AMI.\nSee Block Devices below for details.",
              "items": {
                "properties": {
                  "deviceName": {
                    "description": "The name of the device to mount.",
                    "type": "string"
                  },
                  "ebs": {
                    "description": "Configure EBS volume properties.",
                    "items": {
                      "properties": {
                        "deleteOnTermination": {
                          "description": "Whether the volume should be destroyed on instance termination.\nSee Preserving Amazon EBS Volumes on Instance Termination for more information.",
                          "type": "string"
                        },
                        "encrypted": {
                          "description": "Enables EBS encryption on the volume.\nCannot be used with snapshot_id.",
                          "type": "string"
                        },
                        "iops": {
                          "description": "The amount of provisioned IOPS.\nThis must be set with a volume_type of \"io1/io2/gp3\".",
                          "type": "number"
                        },
                        "kmsKeyId": {
                          "description": "The ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) to use when creating the encrypted volume.\nencrypted must be set to true when this is set.",
                          "type": "string"
                        },
                        "kmsKeyIdRef": {
                          "description": "Reference to a Key in kms to populate kmsKeyId.",
                          "properties": {
                            "name": {
                              "description": "Name of the referenced object.",
                              "type": "string"
                            },
                            "policy": {
                              "description": "Policies for referencing.",
                              "properties": {
                                "resolution": {
                                  "default": "Required",
                                  "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                                  "enum": [
                                    "Required",
                                    "Optional"
                                  ],
                                  "type": "string"
                                },
                                "resolve": {
                                  "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                                  "enum": [
                                    "Always",
                                    "IfNotPresent"
                                  ],
                                  "type": "string"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            }
                          },
                          "required": [
                            "name"
                          ],
                          "type": "object",
                          "additionalProperties": false
                        },
                        "kmsKeyIdSelector": {
                          "description": "Selector for a Key in kms to populate kmsKeyId.",
                          "properties": {
                            "matchControllerRef": {
                              "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                              "type": "boolean"
                            },
                            "matchLabels": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "description": "MatchLabels ensures an object with matching labels is selected.",
                              "type": "object"
                            },
                            "policy": {
                              "description": "Policies for selection.",
                              "properties": {
                                "resolution": {
                                  "default": "Required",
                                  "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                                  "enum": [
                                    "Required",
                                    "Optional"
                                  ],
                                  "type": "string"
                                },
                                "resolve": {
                                  "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                                  "enum": [
                                    "Always",
                                    "IfNotPresent"
                                  ],
                                  "type": "string"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "snapshotId": {
                          "description": "The Snapshot ID to mount.",
                          "type": "string"
                        },
                        "throughput": {
                          "description": "The throughput to provision for a gp3 volume in MiB/s (specified as an integer, e.g., 500), with a maximum of 1,000 MiB/s.",
                          "type": "number"
                        },
                        "volumeInitializationRate": {
                          "description": "The volume initialization rate in MiB/s (specified as an integer, e.g. 100), with a minimum of 100 MiB/s and maximum of 300 MiB/s.",
                          "type": "number"
                        },
                        "volumeSize": {
                          "description": "The size of the volume in gigabytes.",
                          "type": "number"
                        },
                        "volumeType": {
                          "description": "The volume type.\nCan be one of standard, gp2, gp3, io1, io2, sc1 or st1.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "noDevice": {
                    "description": "Suppresses the specified device included in the AMI's block device mapping.",
                    "type": "string"
                  },
                  "virtualName": {
                    "description": "The Instance Store Device\nName\n(e.g., \"ephemeral0\").",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "capacityReservationSpecification": {
              "description": "Targeting for EC2 capacity reservations. See Capacity Reservation Specification below for more details.",
              "items": {
                "properties": {
                  "capacityReservationPreference": {
                    "description": "Indicates the instance's Capacity Reservation preferences. Can be capacity-reservations-only, open or none. If capacity_reservation_id or capacity_reservation_resource_group_arn is specified in capacity_reservation_target block, either omit capacity_reservation_preference or set it to capacity-reservations-only.",
                    "type": "string"
                  },
                  "capacityReservationTarget": {
                    "description": "Used to target a specific Capacity Reservation:",
                    "items": {
                      "properties": {
                        "capacityReservationId": {
                          "description": "The ID of the Capacity Reservation in which to run the instance.",
                          "type": "string"
                        },
                        "capacityReservationResourceGroupArn": {
                          "description": "The ARN of the Capacity Reservation resource group in which to run the instance.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "cpuOptions": {
              "description": "The CPU options for the instance. See CPU Options below for more details.",
              "items": {
                "properties": {
                  "amdSevSnp": {
                    "description": "Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is supported with M6a, R6a, and C6a instance types only. Valid values are enabled and disabled.",
                    "type": "string"
                  },
                  "coreCount": {
                    "description": "The number of CPU cores for the instance.",
                    "type": "number"
                  },
                  "threadsPerCore": {
                    "description": "The number of threads per CPU core.\nTo disable Intel Hyper-Threading Technology for the instance, specify a value of 1.\nOtherwise, specify the default value of 2.",
                    "type": "number"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "creditSpecification": {
              "description": "Customize the credit specification of the instance. See Credit\nSpecification below for more details.",
              "items": {
                "properties": {
                  "cpuCredits": {
                    "description": "The credit option for CPU usage.\nCan be standard or unlimited.\nT3 instances are launched as unlimited by default.\nT2 instances are launched as standard by default.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "defaultVersion": {
              "description": "Default Version of the launch template.",
              "type": "number"
            },
            "description": {
              "description": "Description of the launch template.",
              "type": "string"
            },
            "disableApiStop": {
              "description": "If true, enables EC2 Instance Stop Protection.",
              "type": "boolean"
            },
            "disableApiTermination": {
              "description": "If true, enables EC2 Instance\nTermination Protection",
              "type": "boolean"
            },
            "ebsOptimized": {
              "description": "If true, the launched EC2 instance will be EBS-optimized.",
              "type": "string"
            },
            "enclaveOptions": {
              "description": "Enable Nitro Enclaves on launched instances. See Enclave Options below for more details.",
              "items": {
                "properties": {
                  "enabled": {
                    "description": "If set to true, Nitro Enclaves will be enabled on the instance.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "hibernationOptions": {
              "description": "The hibernation options for the instance. See Hibernation Options below for more details.",
              "items": {
                "properties": {
                  "configured": {
                    "description": "If set to true, the launched EC2 instance will hibernation enabled.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "iamInstanceProfile": {
              "description": "The IAM Instance Profile to launch the instance with. See Instance Profile\nbelow for more details.",
              "items": {
                "properties": {
                  "arn": {
                    "description": "The Amazon Resource Name (ARN) of the instance profile. Conflicts with name.",
                    "type": "string"
                  },
                  "arnRef": {
                    "description": "Reference to a InstanceProfile in iam to populate arn.",
                    "properties": {
                      "name": {
                        "description": "Name of the referenced object.",
                        "type": "string"
                      },
                      "policy": {
                        "description": "Policies for referencing.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "arnSelector": {
                    "description": "Selector for a InstanceProfile in iam to populate arn.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "name": {
                    "description": "The name of the instance profile.",
                    "type": "string"
                  },
                  "nameRef": {
                    "description": "Reference to a InstanceProfile in iam to populate name.",
                    "properties": {
                      "name": {
                        "description": "Name of the referenced object.",
                        "type": "string"
                      },
                      "policy": {
                        "description": "Policies for referencing.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "nameSelector": {
                    "description": "Selector for a InstanceProfile in iam to populate name.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "imageId": {
              "description": "The AMI from which to launch the instance or use a Systems Manager parameter convention e.g. resolve:ssm:parameter-name. See docs for more details.",
              "type": "string"
            },
            "instanceInitiatedShutdownBehavior": {
              "description": "Shutdown behavior for the instance. Can be stop or terminate.\n(Default: stop).",
              "type": "string"
            },
            "instanceMarketOptions": {
              "description": "The market (purchasing) option for the instance. See Market Options\nbelow for details.",
              "items": {
                "properties": {
                  "marketType": {
                    "description": "The market type. Can be spot.",
                    "type": "string"
                  },
                  "spotOptions": {
                    "description": "The options for Spot Instance",
                    "items": {
                      "properties": {
                        "blockDurationMinutes": {
                          "description": "The required duration in minutes. This value must be a multiple of 60.",
                          "type": "number"
                        },
                        "instanceInterruptionBehavior": {
                          "description": "The behavior when a Spot Instance is interrupted. Can be hibernate,\nstop, or terminate. (Default: terminate).",
                          "type": "string"
                        },
                        "maxPrice": {
                          "description": "The maximum hourly price you're willing to pay for the Spot Instances.",
                          "type": "string"
                        },
                        "spotInstanceType": {
                          "description": "The Spot Instance request type. Can be one-time, or persistent.",
                          "type": "string"
                        },
                        "validUntil": {
                          "description": "The end date of the request.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "instanceRequirements": {
              "description": "The attribute requirements for the type of instance. If present then instance_type cannot be present.",
              "items": {
                "properties": {
                  "acceleratorCount": {
                    "description": "Block describing the minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips). Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "acceleratorManufacturers": {
                    "description": "List of accelerator manufacturer names. Default is any manufacturer.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "acceleratorNames": {
                    "description": "List of accelerator names. Default is any acclerator.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "acceleratorTotalMemoryMib": {
                    "description": "Block describing the minimum and maximum total memory of the accelerators. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "acceleratorTypes": {
                    "description": "List of accelerator types. Default is any accelerator type.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "allowedInstanceTypes": {
                    "description": "List of instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes. You can use strings with one or more wild cards, represented by an asterisk (*), to allow an instance type, size, or generation. The following are examples: m5.8xlarge, c5*.*, m5a.*, r*, *3*. For example, if you specify c5*, you are allowing the entire C5 instance family, which includes all C5a and C5n instance types. If you specify m5a.*, you are allowing all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is all instance types.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "bareMetal": {
                    "description": "Indicate whether bare metal instace types should be included, excluded, or required. Default is excluded.",
                    "type": "string"
                  },
                  "baselineEbsBandwidthMbps": {
                    "description": "Block describing the minimum and maximum baseline EBS bandwidth, in Mbps. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "burstablePerformance": {
                    "description": "Indicate whether burstable performance instance types should be included, excluded, or required. Default is excluded.",
                    "type": "string"
                  },
                  "cpuManufacturers": {
                    "description": "List of CPU manufacturer names. Default is any manufacturer.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "excludedInstanceTypes": {
                    "description": "List of instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk (*), to exclude an instance type, size, or generation. The following are examples: m5.8xlarge, c5*.*, m5a.*, r*, *3*. For example, if you specify c5*, you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify m5a.*, you are excluding all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is no excluded instance types.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "instanceGenerations": {
                    "description": "List of instance generation names. Default is any generation.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "localStorage": {
                    "description": "Indicate whether instance types with local storage volumes are included, excluded, or required. Default is included.",
                    "type": "string"
                  },
                  "localStorageTypes": {
                    "description": "List of local storage type names. Default any storage type.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "maxSpotPriceAsPercentageOfOptimalOnDemandPrice": {
                    "description": "The price protection threshold for Spot Instances. This is the maximum you\u2019ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Conflicts with spot_max_price_percentage_over_lowest_price",
                    "type": "number"
                  },
                  "memoryGibPerVcpu": {
                    "description": "Block describing the minimum and maximum amount of memory (GiB) per vCPU. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "memoryMib": {
                    "description": "Block describing the minimum and maximum amount of memory (MiB). Default is no maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "networkBandwidthGbps": {
                    "description": "Block describing the minimum and maximum amount of network bandwidth, in gigabits per second (Gbps). Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "networkInterfaceCount": {
                    "description": "Block describing the minimum and maximum number of network interfaces. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "onDemandMaxPricePercentageOverLowestPrice": {
                    "description": "The price protection threshold for On-Demand Instances. This is the maximum you\u2019ll pay for an On-Demand Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 20.",
                    "type": "number"
                  },
                  "requireHibernateSupport": {
                    "description": "Indicate whether instance types must support On-Demand Instance Hibernation, either true or false. Default is false.",
                    "type": "boolean"
                  },
                  "spotMaxPricePercentageOverLowestPrice": {
                    "description": "The price protection threshold for Spot Instances. This is the maximum you\u2019ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 100. Conflicts with max_spot_price_as_percentage_of_optimal_on_demand_price",
                    "type": "number"
                  },
                  "totalLocalStorageGb": {
                    "description": "Block describing the minimum and maximum total local storage (GB). Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "vcpuCount": {
                    "description": "Block describing the minimum and maximum number of vCPUs. Default is no maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "instanceType": {
              "description": "The type of the instance. If present then instance_requirements cannot be present.",
              "type": "string"
            },
            "kernelId": {
              "description": "The kernel ID.",
              "type": "string"
            },
            "keyName": {
              "description": "The key name to use for the instance.",
              "type": "string"
            },
            "licenseSpecification": {
              "description": "A list of license specifications to associate with. See License Specification below for more details.",
              "items": {
                "properties": {
                  "licenseConfigurationArn": {
                    "description": "ARN of the license configuration.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "maintenanceOptions": {
              "description": "The maintenance options for the instance. See Maintenance Options below for more details.",
              "items": {
                "properties": {
                  "autoRecovery": {
                    "description": "Disables the automatic recovery behavior of your instance or sets it to default. Can be \"default\" or \"disabled\". See Recover your instance for more details.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "metadataOptions": {
              "description": "Customize the metadata options for the instance. See Metadata Options below for more details.",
              "items": {
                "properties": {
                  "httpEndpoint": {
                    "description": "Whether the metadata service is available. Can be \"enabled\" or \"disabled\". (Default: \"enabled\").",
                    "type": "string"
                  },
                  "httpProtocolIpv6": {
                    "description": "Enables or disables the IPv6 endpoint for the instance metadata service. Can be \"enabled\" or \"disabled\".",
                    "type": "string"
                  },
                  "httpPutResponseHopLimit": {
                    "description": "The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel. Can be an integer from 1 to 64. (Default: 1).",
                    "type": "number"
                  },
                  "httpTokens": {
                    "description": "Whether or not the metadata service requires session tokens, also referred to as Instance Metadata Service Version 2 (IMDSv2). Can be \"optional\" or \"required\". (Default: \"optional\").",
                    "type": "string"
                  },
                  "instanceMetadataTags": {
                    "description": "Enables or disables access to instance tags from the instance metadata service. Can be \"enabled\" or \"disabled\".",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "monitoring": {
              "description": "The monitoring option for the instance. See Monitoring below for more details.",
              "items": {
                "properties": {
                  "enabled": {
                    "description": "If true, the launched EC2 instance will have detailed monitoring enabled.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "name": {
              "description": "The name of the launch template.",
              "type": "string"
            },
            "networkInterfaces": {
              "description": "Customize network interfaces to be attached at instance boot time. See Network\nInterfaces below for more details.",
              "items": {
                "properties": {
                  "associateCarrierIpAddress": {
                    "description": "Associate a Carrier IP address with eth0 for a new network interface. Use this option when you launch an instance in a Wavelength Zone and want to associate a Carrier IP address with the network interface. Boolean value, can be left unset.",
                    "type": "string"
                  },
                  "associatePublicIpAddress": {
                    "description": "Associate a public ip address with the network interface. Boolean value, can be left unset.",
                    "type": "string"
                  },
                  "connectionTrackingSpecification": {
                    "description": "The Connection Tracking Configuration for the network interface. See Amazon EC2 security group connection tracking",
                    "items": {
                      "properties": {
                        "tcpEstablishedTimeout": {
                          "description": "Timeout (in seconds) for idle TCP connections in an established state. Min: 60 seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended: Less than 432000 seconds.",
                          "type": "number"
                        },
                        "udpStreamTimeout": {
                          "description": "Timeout (in seconds) for idle UDP flows that have seen traffic only in a single direction or a single request-response transaction. Min: 30 seconds. Max: 60 seconds. Default: 30 seconds.",
                          "type": "number"
                        },
                        "udpTimeout": {
                          "description": "Timeout (in seconds) for idle UDP flows classified as streams which have seen more than one request-response transaction. Min: 60 seconds. Max: 180 seconds (3 minutes). Default: 180 seconds.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "deleteOnTermination": {
                    "description": "Whether the network interface should be destroyed on instance termination.",
                    "type": "string"
                  },
                  "description": {
                    "description": "Description of the network interface.",
                    "type": "string"
                  },
                  "deviceIndex": {
                    "description": "The integer index of the network interface attachment.",
                    "type": "number"
                  },
                  "enaSrdSpecification": {
                    "description": "Configuration for Elastic Network Adapter (ENA) Express settings. Applies to network interfaces that use the ena Express feature. See details below.",
                    "items": {
                      "properties": {
                        "enaSrdEnabled": {
                          "description": "Whether to enable ENA Express. ENA Express uses AWS Scalable Reliable Datagram (SRD) technology to improve the performance of TCP traffic.",
                          "type": "boolean"
                        },
                        "enaSrdUdpSpecification": {
                          "description": "Configuration for ENA Express UDP optimization. See details below.",
                          "items": {
                            "properties": {
                              "enaSrdUdpEnabled": {
                                "description": "Whether to enable UDP traffic optimization through ENA Express. Requires ena_srd_enabled to be true.",
                                "type": "boolean"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "interfaceType": {
                    "description": "The type of network interface. To create an Elastic Fabric Adapter (EFA), specify efa.",
                    "type": "string"
                  },
                  "ipv4AddressCount": {
                    "description": "The number of secondary private IPv4 addresses to assign to a network interface. Conflicts with ipv4_addresses",
                    "type": "number"
                  },
                  "ipv4Addresses": {
                    "description": "One or more private IPv4 addresses to associate. Conflicts with ipv4_address_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "ipv4PrefixCount": {
                    "description": "The number of IPv4 prefixes to be automatically assigned to the network interface. Conflicts with ipv4_prefixes",
                    "type": "number"
                  },
                  "ipv4Prefixes": {
                    "description": "One or more IPv4 prefixes to be assigned to the network interface. Conflicts with ipv4_prefix_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "ipv6AddressCount": {
                    "description": "The number of IPv6 addresses to assign to a network interface. Conflicts with ipv6_addresses",
                    "type": "number"
                  },
                  "ipv6Addresses": {
                    "description": "One or more specific IPv6 addresses from the IPv6 CIDR block range of your subnet. Conflicts with ipv6_address_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "ipv6PrefixCount": {
                    "description": "The number of IPv6 prefixes to be automatically assigned to the network interface. Conflicts with ipv6_prefixes",
                    "type": "number"
                  },
                  "ipv6Prefixes": {
                    "description": "One or more IPv6 prefixes to be assigned to the network interface. Conflicts with ipv6_prefix_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "networkCardIndex": {
                    "description": "The index of the network card. Some instance types support multiple network cards. The primary network interface must be assigned to network card index 0. The default is network card index 0.",
                    "type": "number"
                  },
                  "networkInterfaceId": {
                    "description": "The ID of the network interface to attach.",
                    "type": "string"
                  },
                  "networkInterfaceIdRef": {
                    "description": "Reference to a NetworkInterface in ec2 to populate networkInterfaceId.",
                    "properties": {
                      "name": {
                        "description": "Name of the referenced object.",
                        "type": "string"
                      },
                      "policy": {
                        "description": "Policies for referencing.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "networkInterfaceIdSelector": {
                    "description": "Selector for a NetworkInterface in ec2 to populate networkInterfaceId.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "primaryIpv6": {
                    "description": "Whether the first IPv6 GUA will be made the primary IPv6 address.",
                    "type": "string"
                  },
                  "privateIpAddress": {
                    "description": "The primary private IPv4 address.",
                    "type": "string"
                  },
                  "securityGroupRefs": {
                    "description": "References to SecurityGroup in ec2 to populate securityGroups.",
                    "items": {
                      "description": "A Reference to a named object.",
                      "properties": {
                        "name": {
                          "description": "Name of the referenced object.",
                          "type": "string"
                        },
                        "policy": {
                          "description": "Policies for referencing.",
                          "properties": {
                            "resolution": {
                              "default": "Required",
                              "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                              "enum": [
                                "Required",
                                "Optional"
                              ],
                              "type": "string"
                            },
                            "resolve": {
                              "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                              "enum": [
                                "Always",
                                "IfNotPresent"
                              ],
                              "type": "string"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "name"
                      ],
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "securityGroupSelector": {
                    "description": "Selector for a list of SecurityGroup in ec2 to populate securityGroups.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "securityGroups": {
                    "description": "A list of security group IDs to associate.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "subnetId": {
                    "description": "The VPC Subnet ID to associate.",
                    "type": "string"
                  },
                  "subnetIdRef": {
                    "description": "Reference to a Subnet in ec2 to populate subnetId.",
                    "properties": {
                      "name": {
                        "description": "Name of the referenced object.",
                        "type": "string"
                      },
                      "policy": {
                        "description": "Policies for referencing.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object",
                    "additionalProperties": false
                  },
                  "subnetIdSelector": {
                    "description": "Selector for a Subnet in ec2 to populate subnetId.",
                    "properties": {
                      "matchControllerRef": {
                        "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                        "type": "boolean"
                      },
                      "matchLabels": {
                        "additionalProperties": {
                          "type": "string"
                        },
                        "description": "MatchLabels ensures an object with matching labels is selected.",
                        "type": "object"
                      },
                      "policy": {
                        "description": "Policies for selection.",
                        "properties": {
                          "resolution": {
                            "default": "Required",
                            "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                            "enum": [
                              "Required",
                              "Optional"
                            ],
                            "type": "string"
                          },
                          "resolve": {
                            "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                            "enum": [
                              "Always",
                              "IfNotPresent"
                            ],
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "placement": {
              "description": "The placement of the instance. See Placement below for more details.",
              "items": {
                "properties": {
                  "affinity": {
                    "description": "The affinity setting for an instance on a Dedicated Host.",
                    "type": "string"
                  },
                  "availabilityZone": {
                    "description": "The Availability Zone for the instance.",
                    "type": "string"
                  },
                  "groupId": {
                    "description": "The ID of the placement group for the instance. Conflicts with group_name.",
                    "type": "string"
                  },
                  "groupName": {
                    "description": "The name of the placement group for the instance. Conflicts with group_id.",
                    "type": "string"
                  },
                  "hostId": {
                    "description": "The ID of the Dedicated Host for the instance.",
                    "type": "string"
                  },
                  "hostResourceGroupArn": {
                    "description": "The ARN of the Host Resource Group in which to launch instances.",
                    "type": "string"
                  },
                  "partitionNumber": {
                    "description": "The number of the partition the instance should launch in. Valid only if the placement group strategy is set to partition.",
                    "type": "number"
                  },
                  "spreadDomain": {
                    "description": "Reserved for future use.",
                    "type": "string"
                  },
                  "tenancy": {
                    "description": "The tenancy of the instance (if the instance is running in a VPC). Can be default, dedicated, or host.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "privateDnsNameOptions": {
              "description": "The options for the instance hostname. The default values are inherited from the subnet. See Private DNS Name Options below for more details.",
              "items": {
                "properties": {
                  "enableResourceNameDnsARecord": {
                    "description": "Indicates whether to respond to DNS queries for instance hostnames with DNS A records.",
                    "type": "boolean"
                  },
                  "enableResourceNameDnsAaaaRecord": {
                    "description": "Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.",
                    "type": "boolean"
                  },
                  "hostnameType": {
                    "description": "The type of hostname for Amazon EC2 instances. For IPv4 only subnets, an instance DNS name must be based on the instance IPv4 address. For IPv6 native subnets, an instance DNS name must be based on the instance ID. For dual-stack subnets, you can specify whether DNS names use the instance IPv4 address or the instance ID. Valid values: ip-name and resource-name.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "ramDiskId": {
              "description": "The ID of the RAM disk.",
              "type": "string"
            },
            "securityGroupNameRefs": {
              "description": "References to SecurityGroup in ec2 to populate securityGroupNames.",
              "items": {
                "description": "A Reference to a named object.",
                "properties": {
                  "name": {
                    "description": "Name of the referenced object.",
                    "type": "string"
                  },
                  "policy": {
                    "description": "Policies for referencing.",
                    "properties": {
                      "resolution": {
                        "default": "Required",
                        "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                        "enum": [
                          "Required",
                          "Optional"
                        ],
                        "type": "string"
                      },
                      "resolve": {
                        "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                        "enum": [
                          "Always",
                          "IfNotPresent"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "securityGroupNameSelector": {
              "description": "Selector for a list of SecurityGroup in ec2 to populate securityGroupNames.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "securityGroupNames": {
              "description": "A list of security group names to associate with. If you are creating Instances in a VPC, use\nvpc_security_group_ids instead.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "tagSpecifications": {
              "description": "The tags to apply to the resources during launch. See Tag Specifications below for more details. Default tags are currently not propagated to ASG created resources so you may wish to inject your default tags into this variable against the relevant child resource types created.",
              "items": {
                "properties": {
                  "resourceType": {
                    "description": "The type of resource to tag.",
                    "type": "string"
                  },
                  "tags": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "A map of tags to assign to the resource.",
                    "type": "object",
                    "x-kubernetes-map-type": "granular"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "tags": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Key-value map of resource tags.",
              "type": "object",
              "x-kubernetes-map-type": "granular"
            },
            "updateDefaultVersion": {
              "description": "Whether to update Default Version each update. Conflicts with default_version.",
              "type": "boolean"
            },
            "userData": {
              "description": "The base64-encoded user data to provide when launching the instance.",
              "type": "string"
            },
            "vpcSecurityGroupIdRefs": {
              "description": "References to SecurityGroup in ec2 to populate vpcSecurityGroupIds.",
              "items": {
                "description": "A Reference to a named object.",
                "properties": {
                  "name": {
                    "description": "Name of the referenced object.",
                    "type": "string"
                  },
                  "policy": {
                    "description": "Policies for referencing.",
                    "properties": {
                      "resolution": {
                        "default": "Required",
                        "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                        "enum": [
                          "Required",
                          "Optional"
                        ],
                        "type": "string"
                      },
                      "resolve": {
                        "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                        "enum": [
                          "Always",
                          "IfNotPresent"
                        ],
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "vpcSecurityGroupIdSelector": {
              "description": "Selector for a list of SecurityGroup in ec2 to populate vpcSecurityGroupIds.",
              "properties": {
                "matchControllerRef": {
                  "description": "MatchControllerRef ensures an object with the same controller reference\nas the selecting object is selected.",
                  "type": "boolean"
                },
                "matchLabels": {
                  "additionalProperties": {
                    "type": "string"
                  },
                  "description": "MatchLabels ensures an object with matching labels is selected.",
                  "type": "object"
                },
                "policy": {
                  "description": "Policies for selection.",
                  "properties": {
                    "resolution": {
                      "default": "Required",
                      "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                      "enum": [
                        "Required",
                        "Optional"
                      ],
                      "type": "string"
                    },
                    "resolve": {
                      "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                      "enum": [
                        "Always",
                        "IfNotPresent"
                      ],
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                }
              },
              "type": "object",
              "additionalProperties": false
            },
            "vpcSecurityGroupIds": {
              "description": "A list of security group IDs to associate with. Conflicts with network_interfaces.security_groups",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "managementPolicies": {
          "default": [
            "*"
          ],
          "description": "THIS IS A BETA FIELD. It is on by default but can be opted out\nthrough a Crossplane feature flag.\nManagementPolicies specify the array of actions Crossplane is allowed to\ntake on the managed and external resources.\nThis field is planned to replace the DeletionPolicy field in a future\nrelease. Currently, both could be set independently and non-default\nvalues would be honored if the feature flag is enabled. If both are\ncustom, the DeletionPolicy field will be ignored.\nSee the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223\nand this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md",
          "items": {
            "description": "A ManagementAction represents an action that the Crossplane controllers\ncan take on an external resource.",
            "enum": [
              "Observe",
              "Create",
              "Update",
              "Delete",
              "LateInitialize",
              "*"
            ],
            "type": "string"
          },
          "type": "array"
        },
        "providerConfigRef": {
          "default": {
            "name": "default"
          },
          "description": "ProviderConfigReference specifies how the provider that will be used to\ncreate, observe, update, and delete this managed resource should be\nconfigured.",
          "properties": {
            "name": {
              "description": "Name of the referenced object.",
              "type": "string"
            },
            "policy": {
              "description": "Policies for referencing.",
              "properties": {
                "resolution": {
                  "default": "Required",
                  "description": "Resolution specifies whether resolution of this reference is required.\nThe default is 'Required', which means the reconcile will fail if the\nreference cannot be resolved. 'Optional' means this reference will be\na no-op if it cannot be resolved.",
                  "enum": [
                    "Required",
                    "Optional"
                  ],
                  "type": "string"
                },
                "resolve": {
                  "description": "Resolve specifies when this reference should be resolved. The default\nis 'IfNotPresent', which will attempt to resolve the reference only when\nthe corresponding field is not present. Use 'Always' to resolve the\nreference on every reconcile.",
                  "enum": [
                    "Always",
                    "IfNotPresent"
                  ],
                  "type": "string"
                }
              },
              "type": "object",
              "additionalProperties": false
            }
          },
          "required": [
            "name"
          ],
          "type": "object",
          "additionalProperties": false
        },
        "writeConnectionSecretToRef": {
          "description": "WriteConnectionSecretToReference specifies the namespace and name of a\nSecret to which any connection details for this managed resource should\nbe written. Connection details frequently include the endpoint, username,\nand password required to connect to the managed resource.",
          "properties": {
            "name": {
              "description": "Name of the secret.",
              "type": "string"
            },
            "namespace": {
              "description": "Namespace of the secret.",
              "type": "string"
            }
          },
          "required": [
            "name",
            "namespace"
          ],
          "type": "object",
          "additionalProperties": false
        }
      },
      "required": [
        "forProvider"
      ],
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "LaunchTemplateStatus defines the observed state of LaunchTemplate.",
      "properties": {
        "atProvider": {
          "properties": {
            "arn": {
              "description": "Amazon Resource Name (ARN) of the launch template.",
              "type": "string"
            },
            "blockDeviceMappings": {
              "description": "Specify volumes to attach to the instance besides the volumes specified by the AMI.\nSee Block Devices below for details.",
              "items": {
                "properties": {
                  "deviceName": {
                    "description": "The name of the device to mount.",
                    "type": "string"
                  },
                  "ebs": {
                    "description": "Configure EBS volume properties.",
                    "items": {
                      "properties": {
                        "deleteOnTermination": {
                          "description": "Whether the volume should be destroyed on instance termination.\nSee Preserving Amazon EBS Volumes on Instance Termination for more information.",
                          "type": "string"
                        },
                        "encrypted": {
                          "description": "Enables EBS encryption on the volume.\nCannot be used with snapshot_id.",
                          "type": "string"
                        },
                        "iops": {
                          "description": "The amount of provisioned IOPS.\nThis must be set with a volume_type of \"io1/io2/gp3\".",
                          "type": "number"
                        },
                        "kmsKeyId": {
                          "description": "The ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) to use when creating the encrypted volume.\nencrypted must be set to true when this is set.",
                          "type": "string"
                        },
                        "snapshotId": {
                          "description": "The Snapshot ID to mount.",
                          "type": "string"
                        },
                        "throughput": {
                          "description": "The throughput to provision for a gp3 volume in MiB/s (specified as an integer, e.g., 500), with a maximum of 1,000 MiB/s.",
                          "type": "number"
                        },
                        "volumeInitializationRate": {
                          "description": "The volume initialization rate in MiB/s (specified as an integer, e.g. 100), with a minimum of 100 MiB/s and maximum of 300 MiB/s.",
                          "type": "number"
                        },
                        "volumeSize": {
                          "description": "The size of the volume in gigabytes.",
                          "type": "number"
                        },
                        "volumeType": {
                          "description": "The volume type.\nCan be one of standard, gp2, gp3, io1, io2, sc1 or st1.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "noDevice": {
                    "description": "Suppresses the specified device included in the AMI's block device mapping.",
                    "type": "string"
                  },
                  "virtualName": {
                    "description": "The Instance Store Device\nName\n(e.g., \"ephemeral0\").",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "capacityReservationSpecification": {
              "description": "Targeting for EC2 capacity reservations. See Capacity Reservation Specification below for more details.",
              "items": {
                "properties": {
                  "capacityReservationPreference": {
                    "description": "Indicates the instance's Capacity Reservation preferences. Can be capacity-reservations-only, open or none. If capacity_reservation_id or capacity_reservation_resource_group_arn is specified in capacity_reservation_target block, either omit capacity_reservation_preference or set it to capacity-reservations-only.",
                    "type": "string"
                  },
                  "capacityReservationTarget": {
                    "description": "Used to target a specific Capacity Reservation:",
                    "items": {
                      "properties": {
                        "capacityReservationId": {
                          "description": "The ID of the Capacity Reservation in which to run the instance.",
                          "type": "string"
                        },
                        "capacityReservationResourceGroupArn": {
                          "description": "The ARN of the Capacity Reservation resource group in which to run the instance.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "cpuOptions": {
              "description": "The CPU options for the instance. See CPU Options below for more details.",
              "items": {
                "properties": {
                  "amdSevSnp": {
                    "description": "Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is supported with M6a, R6a, and C6a instance types only. Valid values are enabled and disabled.",
                    "type": "string"
                  },
                  "coreCount": {
                    "description": "The number of CPU cores for the instance.",
                    "type": "number"
                  },
                  "threadsPerCore": {
                    "description": "The number of threads per CPU core.\nTo disable Intel Hyper-Threading Technology for the instance, specify a value of 1.\nOtherwise, specify the default value of 2.",
                    "type": "number"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "creditSpecification": {
              "description": "Customize the credit specification of the instance. See Credit\nSpecification below for more details.",
              "items": {
                "properties": {
                  "cpuCredits": {
                    "description": "The credit option for CPU usage.\nCan be standard or unlimited.\nT3 instances are launched as unlimited by default.\nT2 instances are launched as standard by default.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "defaultVersion": {
              "description": "Default Version of the launch template.",
              "type": "number"
            },
            "description": {
              "description": "Description of the launch template.",
              "type": "string"
            },
            "disableApiStop": {
              "description": "If true, enables EC2 Instance Stop Protection.",
              "type": "boolean"
            },
            "disableApiTermination": {
              "description": "If true, enables EC2 Instance\nTermination Protection",
              "type": "boolean"
            },
            "ebsOptimized": {
              "description": "If true, the launched EC2 instance will be EBS-optimized.",
              "type": "string"
            },
            "enclaveOptions": {
              "description": "Enable Nitro Enclaves on launched instances. See Enclave Options below for more details.",
              "items": {
                "properties": {
                  "enabled": {
                    "description": "If set to true, Nitro Enclaves will be enabled on the instance.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "hibernationOptions": {
              "description": "The hibernation options for the instance. See Hibernation Options below for more details.",
              "items": {
                "properties": {
                  "configured": {
                    "description": "If set to true, the launched EC2 instance will hibernation enabled.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "iamInstanceProfile": {
              "description": "The IAM Instance Profile to launch the instance with. See Instance Profile\nbelow for more details.",
              "items": {
                "properties": {
                  "arn": {
                    "description": "The Amazon Resource Name (ARN) of the instance profile. Conflicts with name.",
                    "type": "string"
                  },
                  "name": {
                    "description": "The name of the instance profile.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "id": {
              "description": "The ID of the launch template.",
              "type": "string"
            },
            "imageId": {
              "description": "The AMI from which to launch the instance or use a Systems Manager parameter convention e.g. resolve:ssm:parameter-name. See docs for more details.",
              "type": "string"
            },
            "instanceInitiatedShutdownBehavior": {
              "description": "Shutdown behavior for the instance. Can be stop or terminate.\n(Default: stop).",
              "type": "string"
            },
            "instanceMarketOptions": {
              "description": "The market (purchasing) option for the instance. See Market Options\nbelow for details.",
              "items": {
                "properties": {
                  "marketType": {
                    "description": "The market type. Can be spot.",
                    "type": "string"
                  },
                  "spotOptions": {
                    "description": "The options for Spot Instance",
                    "items": {
                      "properties": {
                        "blockDurationMinutes": {
                          "description": "The required duration in minutes. This value must be a multiple of 60.",
                          "type": "number"
                        },
                        "instanceInterruptionBehavior": {
                          "description": "The behavior when a Spot Instance is interrupted. Can be hibernate,\nstop, or terminate. (Default: terminate).",
                          "type": "string"
                        },
                        "maxPrice": {
                          "description": "The maximum hourly price you're willing to pay for the Spot Instances.",
                          "type": "string"
                        },
                        "spotInstanceType": {
                          "description": "The Spot Instance request type. Can be one-time, or persistent.",
                          "type": "string"
                        },
                        "validUntil": {
                          "description": "The end date of the request.",
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "instanceRequirements": {
              "description": "The attribute requirements for the type of instance. If present then instance_type cannot be present.",
              "items": {
                "properties": {
                  "acceleratorCount": {
                    "description": "Block describing the minimum and maximum number of accelerators (GPUs, FPGAs, or AWS Inferentia chips). Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "acceleratorManufacturers": {
                    "description": "List of accelerator manufacturer names. Default is any manufacturer.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "acceleratorNames": {
                    "description": "List of accelerator names. Default is any acclerator.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "acceleratorTotalMemoryMib": {
                    "description": "Block describing the minimum and maximum total memory of the accelerators. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "acceleratorTypes": {
                    "description": "List of accelerator types. Default is any accelerator type.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "allowedInstanceTypes": {
                    "description": "List of instance types to apply your specified attributes against. All other instance types are ignored, even if they match your specified attributes. You can use strings with one or more wild cards, represented by an asterisk (*), to allow an instance type, size, or generation. The following are examples: m5.8xlarge, c5*.*, m5a.*, r*, *3*. For example, if you specify c5*, you are allowing the entire C5 instance family, which includes all C5a and C5n instance types. If you specify m5a.*, you are allowing all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is all instance types.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "bareMetal": {
                    "description": "Indicate whether bare metal instace types should be included, excluded, or required. Default is excluded.",
                    "type": "string"
                  },
                  "baselineEbsBandwidthMbps": {
                    "description": "Block describing the minimum and maximum baseline EBS bandwidth, in Mbps. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "burstablePerformance": {
                    "description": "Indicate whether burstable performance instance types should be included, excluded, or required. Default is excluded.",
                    "type": "string"
                  },
                  "cpuManufacturers": {
                    "description": "List of CPU manufacturer names. Default is any manufacturer.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "excludedInstanceTypes": {
                    "description": "List of instance types to exclude. You can use strings with one or more wild cards, represented by an asterisk (*), to exclude an instance type, size, or generation. The following are examples: m5.8xlarge, c5*.*, m5a.*, r*, *3*. For example, if you specify c5*, you are excluding the entire C5 instance family, which includes all C5a and C5n instance types. If you specify m5a.*, you are excluding all the M5a instance types, but not the M5n instance types. Maximum of 400 entries in the list; each entry is limited to 30 characters. Default is no excluded instance types.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "instanceGenerations": {
                    "description": "List of instance generation names. Default is any generation.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "localStorage": {
                    "description": "Indicate whether instance types with local storage volumes are included, excluded, or required. Default is included.",
                    "type": "string"
                  },
                  "localStorageTypes": {
                    "description": "List of local storage type names. Default any storage type.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "maxSpotPriceAsPercentageOfOptimalOnDemandPrice": {
                    "description": "The price protection threshold for Spot Instances. This is the maximum you\u2019ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Conflicts with spot_max_price_percentage_over_lowest_price",
                    "type": "number"
                  },
                  "memoryGibPerVcpu": {
                    "description": "Block describing the minimum and maximum amount of memory (GiB) per vCPU. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "memoryMib": {
                    "description": "Block describing the minimum and maximum amount of memory (MiB). Default is no maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "networkBandwidthGbps": {
                    "description": "Block describing the minimum and maximum amount of network bandwidth, in gigabits per second (Gbps). Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "networkInterfaceCount": {
                    "description": "Block describing the minimum and maximum number of network interfaces. Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "onDemandMaxPricePercentageOverLowestPrice": {
                    "description": "The price protection threshold for On-Demand Instances. This is the maximum you\u2019ll pay for an On-Demand Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 20.",
                    "type": "number"
                  },
                  "requireHibernateSupport": {
                    "description": "Indicate whether instance types must support On-Demand Instance Hibernation, either true or false. Default is false.",
                    "type": "boolean"
                  },
                  "spotMaxPricePercentageOverLowestPrice": {
                    "description": "The price protection threshold for Spot Instances. This is the maximum you\u2019ll pay for a Spot Instance, expressed as a percentage higher than the cheapest M, C, or R instance type with your specified attributes. When Amazon EC2 Auto Scaling selects instance types with your attributes, we will exclude instance types whose price is higher than your threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling interprets as a percentage. To turn off price protection, specify a high value, such as 999999. Default is 100. Conflicts with max_spot_price_as_percentage_of_optimal_on_demand_price",
                    "type": "number"
                  },
                  "totalLocalStorageGb": {
                    "description": "Block describing the minimum and maximum total local storage (GB). Default is no minimum or maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "vcpuCount": {
                    "description": "Block describing the minimum and maximum number of vCPUs. Default is no maximum.",
                    "items": {
                      "properties": {
                        "max": {
                          "description": "Maximum.",
                          "type": "number"
                        },
                        "min": {
                          "description": "Minimum.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "instanceType": {
              "description": "The type of the instance. If present then instance_requirements cannot be present.",
              "type": "string"
            },
            "kernelId": {
              "description": "The kernel ID.",
              "type": "string"
            },
            "keyName": {
              "description": "The key name to use for the instance.",
              "type": "string"
            },
            "latestVersion": {
              "description": "The latest version of the launch template.",
              "type": "number"
            },
            "licenseSpecification": {
              "description": "A list of license specifications to associate with. See License Specification below for more details.",
              "items": {
                "properties": {
                  "licenseConfigurationArn": {
                    "description": "ARN of the license configuration.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "maintenanceOptions": {
              "description": "The maintenance options for the instance. See Maintenance Options below for more details.",
              "items": {
                "properties": {
                  "autoRecovery": {
                    "description": "Disables the automatic recovery behavior of your instance or sets it to default. Can be \"default\" or \"disabled\". See Recover your instance for more details.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "metadataOptions": {
              "description": "Customize the metadata options for the instance. See Metadata Options below for more details.",
              "items": {
                "properties": {
                  "httpEndpoint": {
                    "description": "Whether the metadata service is available. Can be \"enabled\" or \"disabled\". (Default: \"enabled\").",
                    "type": "string"
                  },
                  "httpProtocolIpv6": {
                    "description": "Enables or disables the IPv6 endpoint for the instance metadata service. Can be \"enabled\" or \"disabled\".",
                    "type": "string"
                  },
                  "httpPutResponseHopLimit": {
                    "description": "The desired HTTP PUT response hop limit for instance metadata requests. The larger the number, the further instance metadata requests can travel. Can be an integer from 1 to 64. (Default: 1).",
                    "type": "number"
                  },
                  "httpTokens": {
                    "description": "Whether or not the metadata service requires session tokens, also referred to as Instance Metadata Service Version 2 (IMDSv2). Can be \"optional\" or \"required\". (Default: \"optional\").",
                    "type": "string"
                  },
                  "instanceMetadataTags": {
                    "description": "Enables or disables access to instance tags from the instance metadata service. Can be \"enabled\" or \"disabled\".",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "monitoring": {
              "description": "The monitoring option for the instance. See Monitoring below for more details.",
              "items": {
                "properties": {
                  "enabled": {
                    "description": "If true, the launched EC2 instance will have detailed monitoring enabled.",
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "name": {
              "description": "The name of the launch template.",
              "type": "string"
            },
            "networkInterfaces": {
              "description": "Customize network interfaces to be attached at instance boot time. See Network\nInterfaces below for more details.",
              "items": {
                "properties": {
                  "associateCarrierIpAddress": {
                    "description": "Associate a Carrier IP address with eth0 for a new network interface. Use this option when you launch an instance in a Wavelength Zone and want to associate a Carrier IP address with the network interface. Boolean value, can be left unset.",
                    "type": "string"
                  },
                  "associatePublicIpAddress": {
                    "description": "Associate a public ip address with the network interface. Boolean value, can be left unset.",
                    "type": "string"
                  },
                  "connectionTrackingSpecification": {
                    "description": "The Connection Tracking Configuration for the network interface. See Amazon EC2 security group connection tracking",
                    "items": {
                      "properties": {
                        "tcpEstablishedTimeout": {
                          "description": "Timeout (in seconds) for idle TCP connections in an established state. Min: 60 seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended: Less than 432000 seconds.",
                          "type": "number"
                        },
                        "udpStreamTimeout": {
                          "description": "Timeout (in seconds) for idle UDP flows that have seen traffic only in a single direction or a single request-response transaction. Min: 30 seconds. Max: 60 seconds. Default: 30 seconds.",
                          "type": "number"
                        },
                        "udpTimeout": {
                          "description": "Timeout (in seconds) for idle UDP flows classified as streams which have seen more than one request-response transaction. Min: 60 seconds. Max: 180 seconds (3 minutes). Default: 180 seconds.",
                          "type": "number"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "deleteOnTermination": {
                    "description": "Whether the network interface should be destroyed on instance termination.",
                    "type": "string"
                  },
                  "description": {
                    "description": "Description of the network interface.",
                    "type": "string"
                  },
                  "deviceIndex": {
                    "description": "The integer index of the network interface attachment.",
                    "type": "number"
                  },
                  "enaSrdSpecification": {
                    "description": "Configuration for Elastic Network Adapter (ENA) Express settings. Applies to network interfaces that use the ena Express feature. See details below.",
                    "items": {
                      "properties": {
                        "enaSrdEnabled": {
                          "description": "Whether to enable ENA Express. ENA Express uses AWS Scalable Reliable Datagram (SRD) technology to improve the performance of TCP traffic.",
                          "type": "boolean"
                        },
                        "enaSrdUdpSpecification": {
                          "description": "Configuration for ENA Express UDP optimization. See details below.",
                          "items": {
                            "properties": {
                              "enaSrdUdpEnabled": {
                                "description": "Whether to enable UDP traffic optimization through ENA Express. Requires ena_srd_enabled to be true.",
                                "type": "boolean"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "interfaceType": {
                    "description": "The type of network interface. To create an Elastic Fabric Adapter (EFA), specify efa.",
                    "type": "string"
                  },
                  "ipv4AddressCount": {
                    "description": "The number of secondary private IPv4 addresses to assign to a network interface. Conflicts with ipv4_addresses",
                    "type": "number"
                  },
                  "ipv4Addresses": {
                    "description": "One or more private IPv4 addresses to associate. Conflicts with ipv4_address_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "ipv4PrefixCount": {
                    "description": "The number of IPv4 prefixes to be automatically assigned to the network interface. Conflicts with ipv4_prefixes",
                    "type": "number"
                  },
                  "ipv4Prefixes": {
                    "description": "One or more IPv4 prefixes to be assigned to the network interface. Conflicts with ipv4_prefix_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "ipv6AddressCount": {
                    "description": "The number of IPv6 addresses to assign to a network interface. Conflicts with ipv6_addresses",
                    "type": "number"
                  },
                  "ipv6Addresses": {
                    "description": "One or more specific IPv6 addresses from the IPv6 CIDR block range of your subnet. Conflicts with ipv6_address_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "ipv6PrefixCount": {
                    "description": "The number of IPv6 prefixes to be automatically assigned to the network interface. Conflicts with ipv6_prefixes",
                    "type": "number"
                  },
                  "ipv6Prefixes": {
                    "description": "One or more IPv6 prefixes to be assigned to the network interface. Conflicts with ipv6_prefix_count",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "networkCardIndex": {
                    "description": "The index of the network card. Some instance types support multiple network cards. The primary network interface must be assigned to network card index 0. The default is network card index 0.",
                    "type": "number"
                  },
                  "networkInterfaceId": {
                    "description": "The ID of the network interface to attach.",
                    "type": "string"
                  },
                  "primaryIpv6": {
                    "description": "Whether the first IPv6 GUA will be made the primary IPv6 address.",
                    "type": "string"
                  },
                  "privateIpAddress": {
                    "description": "The primary private IPv4 address.",
                    "type": "string"
                  },
                  "securityGroups": {
                    "description": "A list of security group IDs to associate.",
                    "items": {
                      "type": "string"
                    },
                    "type": "array",
                    "x-kubernetes-list-type": "set"
                  },
                  "subnetId": {
                    "description": "The VPC Subnet ID to associate.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "placement": {
              "description": "The placement of the instance. See Placement below for more details.",
              "items": {
                "properties": {
                  "affinity": {
                    "description": "The affinity setting for an instance on a Dedicated Host.",
                    "type": "string"
                  },
                  "availabilityZone": {
                    "description": "The Availability Zone for the instance.",
                    "type": "string"
                  },
                  "groupId": {
                    "description": "The ID of the placement group for the instance. Conflicts with group_name.",
                    "type": "string"
                  },
                  "groupName": {
                    "description": "The name of the placement group for the instance. Conflicts with group_id.",
                    "type": "string"
                  },
                  "hostId": {
                    "description": "The ID of the Dedicated Host for the instance.",
                    "type": "string"
                  },
                  "hostResourceGroupArn": {
                    "description": "The ARN of the Host Resource Group in which to launch instances.",
                    "type": "string"
                  },
                  "partitionNumber": {
                    "description": "The number of the partition the instance should launch in. Valid only if the placement group strategy is set to partition.",
                    "type": "number"
                  },
                  "spreadDomain": {
                    "description": "Reserved for future use.",
                    "type": "string"
                  },
                  "tenancy": {
                    "description": "The tenancy of the instance (if the instance is running in a VPC). Can be default, dedicated, or host.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "privateDnsNameOptions": {
              "description": "The options for the instance hostname. The default values are inherited from the subnet. See Private DNS Name Options below for more details.",
              "items": {
                "properties": {
                  "enableResourceNameDnsARecord": {
                    "description": "Indicates whether to respond to DNS queries for instance hostnames with DNS A records.",
                    "type": "boolean"
                  },
                  "enableResourceNameDnsAaaaRecord": {
                    "description": "Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA records.",
                    "type": "boolean"
                  },
                  "hostnameType": {
                    "description": "The type of hostname for Amazon EC2 instances. For IPv4 only subnets, an instance DNS name must be based on the instance IPv4 address. For IPv6 native subnets, an instance DNS name must be based on the instance ID. For dual-stack subnets, you can specify whether DNS names use the instance IPv4 address or the instance ID. Valid values: ip-name and resource-name.",
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "ramDiskId": {
              "description": "The ID of the RAM disk.",
              "type": "string"
            },
            "region": {
              "description": "Region where this resource will be managed. Defaults to the Region set in the provider configuration.\nRegion is the region you'd like your resource to be created in.",
              "type": "string"
            },
            "securityGroupNames": {
              "description": "A list of security group names to associate with. If you are creating Instances in a VPC, use\nvpc_security_group_ids instead.",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            },
            "tagSpecifications": {
              "description": "The tags to apply to the resources during launch. See Tag Specifications below for more details. Default tags are currently not propagated to ASG created resources so you may wish to inject your default tags into this variable against the relevant child resource types created.",
              "items": {
                "properties": {
                  "resourceType": {
                    "description": "The type of resource to tag.",
                    "type": "string"
                  },
                  "tags": {
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "A map of tags to assign to the resource.",
                    "type": "object",
                    "x-kubernetes-map-type": "granular"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": "array"
            },
            "tags": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "Key-value map of resource tags.",
              "type": "object",
              "x-kubernetes-map-type": "granular"
            },
            "tagsAll": {
              "additionalProperties": {
                "type": "string"
              },
              "description": "A map of tags assigned to the resource, including those inherited from the provider default_tags configuration block.",
              "type": "object",
              "x-kubernetes-map-type": "granular"
            },
            "updateDefaultVersion": {
              "description": "Whether to update Default Version each update. Conflicts with default_version.",
              "type": "boolean"
            },
            "userData": {
              "description": "The base64-encoded user data to provide when launching the instance.",
              "type": "string"
            },
            "vpcSecurityGroupIds": {
              "description": "A list of security group IDs to associate with. Conflicts with network_interfaces.security_groups",
              "items": {
                "type": "string"
              },
              "type": "array",
              "x-kubernetes-list-type": "set"
            }
          },
          "type": "object",
          "additionalProperties": false
        },
        "conditions": {
          "description": "Conditions of the resource.",
          "items": {
            "description": "A Condition that may apply to a resource.",
            "properties": {
              "lastTransitionTime": {
                "description": "LastTransitionTime is the last time this condition transitioned from one\nstatus to another.",
                "format": "date-time",
                "type": "string"
              },
              "message": {
                "description": "A Message containing details about this condition's last transition from\none status to another, if any.",
                "type": "string"
              },
              "observedGeneration": {
                "description": "ObservedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
                "format": "int64",
                "type": "integer"
              },
              "reason": {
                "description": "A Reason for this condition's last transition from one status to another.",
                "type": "string"
              },
              "status": {
                "description": "Status of this condition; is it currently True, False, or Unknown?",
                "type": "string"
              },
              "type": {
                "description": "Type of this condition. At most one of each condition type may apply to\na resource at any point in time.",
                "type": "string"
              }
            },
            "required": [
              "lastTransitionTime",
              "reason",
              "status",
              "type"
            ],
            "type": "object",
            "additionalProperties": false
          },
          "type": "array",
          "x-kubernetes-list-map-keys": [
            "type"
          ],
          "x-kubernetes-list-type": "map"
        },
        "observedGeneration": {
          "description": "ObservedGeneration is the latest metadata.generation\nwhich resulted in either a ready state, or stalled due to error\nit can not recover from without human intervention.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "required": [
    "spec"
  ],
  "type": "object"
}
