All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.awsnative.ec2.kotlin.InstanceArgs.kt Maven / Gradle / Ivy

@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.awsnative.ec2.kotlin

import com.pulumi.awsnative.ec2.InstanceArgs.builder
import com.pulumi.awsnative.ec2.kotlin.enums.InstanceAffinity
import com.pulumi.awsnative.ec2.kotlin.inputs.CpuOptionsPropertiesArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.CpuOptionsPropertiesArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.CreditSpecificationPropertiesArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.CreditSpecificationPropertiesArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.EnclaveOptionsPropertiesArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.EnclaveOptionsPropertiesArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.HibernationOptionsPropertiesArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.HibernationOptionsPropertiesArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceBlockDeviceMappingArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceBlockDeviceMappingArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceElasticGpuSpecificationArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceElasticGpuSpecificationArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceElasticInferenceAcceleratorArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceElasticInferenceAcceleratorArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceIpv6AddressArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceIpv6AddressArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceLaunchTemplateSpecificationArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceLaunchTemplateSpecificationArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceLicenseSpecificationArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceLicenseSpecificationArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceNetworkInterfaceArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceNetworkInterfaceArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstancePrivateDnsNameOptionsArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstancePrivateDnsNameOptionsArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceSsmAssociationArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceSsmAssociationArgsBuilder
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceVolumeArgs
import com.pulumi.awsnative.ec2.kotlin.inputs.InstanceVolumeArgsBuilder
import com.pulumi.awsnative.kotlin.inputs.TagArgs
import com.pulumi.awsnative.kotlin.inputs.TagArgsBuilder
import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.Boolean
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.jvm.JvmName

/**
 * Resource Type definition for AWS::EC2::Instance
 * @property additionalInfo This property is reserved for internal use. If you use it, the stack fails with this error: Bad property set: [Testing this property] (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 0XXXXXX-49c7-4b40-8bcc-76885dcXXXXX).
 * @property affinity Indicates whether the instance is associated with a dedicated host. If you want the instance to always restart on the same host on which it was launched, specify host. If you want the instance to restart on any available host, but try to launch onto the last host it ran on (on a best-effort basis), specify default.
 * @property availabilityZone The Availability Zone of the instance.
 * @property blockDeviceMappings The block device mapping entries that defines the block devices to attach to the instance at launch.
 * @property cpuOptions The CPU options for the instance.
 * @property creditSpecification The credit option for CPU usage of the burstable performance instance. Valid values are standard and unlimited.
 * @property disableApiTermination If you set this parameter to true, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can.
 * @property ebsOptimized Indicates whether the instance is optimized for Amazon EBS I/O.
 * @property elasticGpuSpecifications An elastic GPU to associate with the instance.
 * @property elasticInferenceAccelerators An elastic inference accelerator to associate with the instance.
 * @property enclaveOptions Indicates whether the instance is enabled for AWS Nitro Enclaves.
 * @property hibernationOptions Indicates whether an instance is enabled for hibernation.
 * @property hostId If you specify host for the Affinity property, the ID of a dedicated host that the instance is associated with. If you don't specify an ID, Amazon EC2 launches the instance onto any available, compatible dedicated host in your account.
 * @property hostResourceGroupArn The ARN of the host resource group in which to launch the instances. If you specify a host resource group ARN, omit the Tenancy parameter or set it to host.
 * @property iamInstanceProfile The IAM instance profile.
 * @property imageId The ID of the AMI. An AMI ID is required to launch an instance and must be specified here or in a launch template.
 * @property instanceInitiatedShutdownBehavior Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).
 * @property instanceType The instance type.
 * @property ipv6AddressCount [EC2-VPC] The number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet.
 * @property ipv6Addresses [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface.
 * @property kernelId The ID of the kernel.
 * @property keyName The name of the key pair.
 * @property launchTemplate The launch template to use to launch the instances.
 * @property licenseSpecifications The license configurations.
 * @property monitoring Specifies whether detailed monitoring is enabled for the instance.
 * @property networkInterfaces The network interfaces to associate with the instance.
 * @property placementGroupName The name of an existing placement group that you want to launch the instance into (cluster | partition | spread).
 * @property privateDnsNameOptions The options for the instance hostname.
 * @property privateIpAddress [EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet.
 * @property propagateTagsToVolumeOnCreation Indicates whether to assign the tags from the instance to all of the volumes attached to the instance at launch. If you specify true and you assign tags to the instance, those tags are automatically assigned to all of the volumes that you attach to the instance at launch. If you specify false, those tags are not assigned to the attached volumes.
 * @property ramdiskId The ID of the RAM disk to select.
 * @property securityGroupIds The IDs of the security groups.
 * @property securityGroups the names of the security groups. For a nondefault VPC, you must use security group IDs instead.
 * @property sourceDestCheck Specifies whether to enable an instance launched in a VPC to perform NAT.
 * @property ssmAssociations The SSM document and parameter values in AWS Systems Manager to associate with this instance.
 * @property subnetId [EC2-VPC] The ID of the subnet to launch the instance into.
 * @property tags The tags to add to the instance.
 * @property tenancy The tenancy of the instance (if the instance is running in a VPC). An instance with a tenancy of dedicated runs on single-tenant hardware.
 * @property userData The user data to make available to the instance.
 * @property volumes The volumes to attach to the instance.
 */
public data class InstanceArgs(
    public val additionalInfo: Output? = null,
    public val affinity: Output? = null,
    public val availabilityZone: Output? = null,
    public val blockDeviceMappings: Output>? = null,
    public val cpuOptions: Output? = null,
    public val creditSpecification: Output? = null,
    public val disableApiTermination: Output? = null,
    public val ebsOptimized: Output? = null,
    public val elasticGpuSpecifications: Output>? = null,
    public val elasticInferenceAccelerators: Output>? =
        null,
    public val enclaveOptions: Output? = null,
    public val hibernationOptions: Output? = null,
    public val hostId: Output? = null,
    public val hostResourceGroupArn: Output? = null,
    public val iamInstanceProfile: Output? = null,
    public val imageId: Output? = null,
    public val instanceInitiatedShutdownBehavior: Output? = null,
    public val instanceType: Output? = null,
    public val ipv6AddressCount: Output? = null,
    public val ipv6Addresses: Output>? = null,
    public val kernelId: Output? = null,
    public val keyName: Output? = null,
    public val launchTemplate: Output? = null,
    public val licenseSpecifications: Output>? = null,
    public val monitoring: Output? = null,
    public val networkInterfaces: Output>? = null,
    public val placementGroupName: Output? = null,
    public val privateDnsNameOptions: Output? = null,
    public val privateIpAddress: Output? = null,
    public val propagateTagsToVolumeOnCreation: Output? = null,
    public val ramdiskId: Output? = null,
    public val securityGroupIds: Output>? = null,
    public val securityGroups: Output>? = null,
    public val sourceDestCheck: Output? = null,
    public val ssmAssociations: Output>? = null,
    public val subnetId: Output? = null,
    public val tags: Output>? = null,
    public val tenancy: Output? = null,
    public val userData: Output? = null,
    public val volumes: Output>? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.awsnative.ec2.InstanceArgs =
        com.pulumi.awsnative.ec2.InstanceArgs.builder()
            .additionalInfo(additionalInfo?.applyValue({ args0 -> args0 }))
            .affinity(affinity?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .availabilityZone(availabilityZone?.applyValue({ args0 -> args0 }))
            .blockDeviceMappings(
                blockDeviceMappings?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 -> args0.toJava() })
                    })
                }),
            )
            .cpuOptions(cpuOptions?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .creditSpecification(
                creditSpecification?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .disableApiTermination(disableApiTermination?.applyValue({ args0 -> args0 }))
            .ebsOptimized(ebsOptimized?.applyValue({ args0 -> args0 }))
            .elasticGpuSpecifications(
                elasticGpuSpecifications?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 -> args0.toJava() })
                    })
                }),
            )
            .elasticInferenceAccelerators(
                elasticInferenceAccelerators?.applyValue({ args0 ->
                    args0.map({ args0 -> args0.let({ args0 -> args0.toJava() }) })
                }),
            )
            .enclaveOptions(enclaveOptions?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .hibernationOptions(
                hibernationOptions?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .hostId(hostId?.applyValue({ args0 -> args0 }))
            .hostResourceGroupArn(hostResourceGroupArn?.applyValue({ args0 -> args0 }))
            .iamInstanceProfile(iamInstanceProfile?.applyValue({ args0 -> args0 }))
            .imageId(imageId?.applyValue({ args0 -> args0 }))
            .instanceInitiatedShutdownBehavior(
                instanceInitiatedShutdownBehavior?.applyValue({ args0 ->
                    args0
                }),
            )
            .instanceType(instanceType?.applyValue({ args0 -> args0 }))
            .ipv6AddressCount(ipv6AddressCount?.applyValue({ args0 -> args0 }))
            .ipv6Addresses(
                ipv6Addresses?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .kernelId(kernelId?.applyValue({ args0 -> args0 }))
            .keyName(keyName?.applyValue({ args0 -> args0 }))
            .launchTemplate(launchTemplate?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .licenseSpecifications(
                licenseSpecifications?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 -> args0.toJava() })
                    })
                }),
            )
            .monitoring(monitoring?.applyValue({ args0 -> args0 }))
            .networkInterfaces(
                networkInterfaces?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .placementGroupName(placementGroupName?.applyValue({ args0 -> args0 }))
            .privateDnsNameOptions(
                privateDnsNameOptions?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .privateIpAddress(privateIpAddress?.applyValue({ args0 -> args0 }))
            .propagateTagsToVolumeOnCreation(propagateTagsToVolumeOnCreation?.applyValue({ args0 -> args0 }))
            .ramdiskId(ramdiskId?.applyValue({ args0 -> args0 }))
            .securityGroupIds(securityGroupIds?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .securityGroups(securityGroups?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .sourceDestCheck(sourceDestCheck?.applyValue({ args0 -> args0 }))
            .ssmAssociations(
                ssmAssociations?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .subnetId(subnetId?.applyValue({ args0 -> args0 }))
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.let({ args0 -> args0.toJava() }) }) }))
            .tenancy(tenancy?.applyValue({ args0 -> args0 }))
            .userData(userData?.applyValue({ args0 -> args0 }))
            .volumes(
                volumes?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            ).build()
}

/**
 * Builder for [InstanceArgs].
 */
@PulumiTagMarker
public class InstanceArgsBuilder internal constructor() {
    private var additionalInfo: Output? = null

    private var affinity: Output? = null

    private var availabilityZone: Output? = null

    private var blockDeviceMappings: Output>? = null

    private var cpuOptions: Output? = null

    private var creditSpecification: Output? = null

    private var disableApiTermination: Output? = null

    private var ebsOptimized: Output? = null

    private var elasticGpuSpecifications: Output>? = null

    private var elasticInferenceAccelerators: Output>? =
        null

    private var enclaveOptions: Output? = null

    private var hibernationOptions: Output? = null

    private var hostId: Output? = null

    private var hostResourceGroupArn: Output? = null

    private var iamInstanceProfile: Output? = null

    private var imageId: Output? = null

    private var instanceInitiatedShutdownBehavior: Output? = null

    private var instanceType: Output? = null

    private var ipv6AddressCount: Output? = null

    private var ipv6Addresses: Output>? = null

    private var kernelId: Output? = null

    private var keyName: Output? = null

    private var launchTemplate: Output? = null

    private var licenseSpecifications: Output>? = null

    private var monitoring: Output? = null

    private var networkInterfaces: Output>? = null

    private var placementGroupName: Output? = null

    private var privateDnsNameOptions: Output? = null

    private var privateIpAddress: Output? = null

    private var propagateTagsToVolumeOnCreation: Output? = null

    private var ramdiskId: Output? = null

    private var securityGroupIds: Output>? = null

    private var securityGroups: Output>? = null

    private var sourceDestCheck: Output? = null

    private var ssmAssociations: Output>? = null

    private var subnetId: Output? = null

    private var tags: Output>? = null

    private var tenancy: Output? = null

    private var userData: Output? = null

    private var volumes: Output>? = null

    /**
     * @param value This property is reserved for internal use. If you use it, the stack fails with this error: Bad property set: [Testing this property] (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 0XXXXXX-49c7-4b40-8bcc-76885dcXXXXX).
     */
    @JvmName("veftiskvgporjecn")
    public suspend fun additionalInfo(`value`: Output) {
        this.additionalInfo = value
    }

    /**
     * @param value Indicates whether the instance is associated with a dedicated host. If you want the instance to always restart on the same host on which it was launched, specify host. If you want the instance to restart on any available host, but try to launch onto the last host it ran on (on a best-effort basis), specify default.
     */
    @JvmName("jjhelnjiauvlahvt")
    public suspend fun affinity(`value`: Output) {
        this.affinity = value
    }

    /**
     * @param value The Availability Zone of the instance.
     */
    @JvmName("fdiubirwbifxxwll")
    public suspend fun availabilityZone(`value`: Output) {
        this.availabilityZone = value
    }

    /**
     * @param value The block device mapping entries that defines the block devices to attach to the instance at launch.
     */
    @JvmName("xkcxehuwnkqsielb")
    public suspend fun blockDeviceMappings(`value`: Output>) {
        this.blockDeviceMappings = value
    }

    @JvmName("qolydbhgkusudpdx")
    public suspend fun blockDeviceMappings(vararg values: Output) {
        this.blockDeviceMappings = Output.all(values.asList())
    }

    /**
     * @param values The block device mapping entries that defines the block devices to attach to the instance at launch.
     */
    @JvmName("mmdxfkkqneevdeuo")
    public suspend fun blockDeviceMappings(values: List>) {
        this.blockDeviceMappings = Output.all(values)
    }

    /**
     * @param value The CPU options for the instance.
     */
    @JvmName("kmbqqnkjcnqgakph")
    public suspend fun cpuOptions(`value`: Output) {
        this.cpuOptions = value
    }

    /**
     * @param value The credit option for CPU usage of the burstable performance instance. Valid values are standard and unlimited.
     */
    @JvmName("wnyjbhpdrtsopswr")
    public suspend fun creditSpecification(`value`: Output) {
        this.creditSpecification = value
    }

    /**
     * @param value If you set this parameter to true, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can.
     */
    @JvmName("qblwvnwsomxvbdmo")
    public suspend fun disableApiTermination(`value`: Output) {
        this.disableApiTermination = value
    }

    /**
     * @param value Indicates whether the instance is optimized for Amazon EBS I/O.
     */
    @JvmName("twvedtsxpfbhgdcu")
    public suspend fun ebsOptimized(`value`: Output) {
        this.ebsOptimized = value
    }

    /**
     * @param value An elastic GPU to associate with the instance.
     */
    @JvmName("qmujiombgasxwghk")
    public suspend fun elasticGpuSpecifications(`value`: Output>) {
        this.elasticGpuSpecifications = value
    }

    @JvmName("loysceykngbgtyxv")
    public suspend fun elasticGpuSpecifications(vararg values: Output) {
        this.elasticGpuSpecifications = Output.all(values.asList())
    }

    /**
     * @param values An elastic GPU to associate with the instance.
     */
    @JvmName("khhknaqwtfsmremf")
    public suspend fun elasticGpuSpecifications(values: List>) {
        this.elasticGpuSpecifications = Output.all(values)
    }

    /**
     * @param value An elastic inference accelerator to associate with the instance.
     */
    @JvmName("xtcyokfvbbrtkalq")
    public suspend fun elasticInferenceAccelerators(`value`: Output>) {
        this.elasticInferenceAccelerators = value
    }

    @JvmName("usewytopuhxoroix")
    public suspend fun elasticInferenceAccelerators(vararg values: Output) {
        this.elasticInferenceAccelerators = Output.all(values.asList())
    }

    /**
     * @param values An elastic inference accelerator to associate with the instance.
     */
    @JvmName("mtbywgflofmomrpj")
    public suspend fun elasticInferenceAccelerators(values: List>) {
        this.elasticInferenceAccelerators = Output.all(values)
    }

    /**
     * @param value Indicates whether the instance is enabled for AWS Nitro Enclaves.
     */
    @JvmName("qxjtsohsyiiwjsrm")
    public suspend fun enclaveOptions(`value`: Output) {
        this.enclaveOptions = value
    }

    /**
     * @param value Indicates whether an instance is enabled for hibernation.
     */
    @JvmName("krjsnbtkrjermaxe")
    public suspend fun hibernationOptions(`value`: Output) {
        this.hibernationOptions = value
    }

    /**
     * @param value If you specify host for the Affinity property, the ID of a dedicated host that the instance is associated with. If you don't specify an ID, Amazon EC2 launches the instance onto any available, compatible dedicated host in your account.
     */
    @JvmName("qjlasqbwyqpbwtqh")
    public suspend fun hostId(`value`: Output) {
        this.hostId = value
    }

    /**
     * @param value The ARN of the host resource group in which to launch the instances. If you specify a host resource group ARN, omit the Tenancy parameter or set it to host.
     */
    @JvmName("kaibjvigspqhjvek")
    public suspend fun hostResourceGroupArn(`value`: Output) {
        this.hostResourceGroupArn = value
    }

    /**
     * @param value The IAM instance profile.
     */
    @JvmName("ybafxpjtdcquvikf")
    public suspend fun iamInstanceProfile(`value`: Output) {
        this.iamInstanceProfile = value
    }

    /**
     * @param value The ID of the AMI. An AMI ID is required to launch an instance and must be specified here or in a launch template.
     */
    @JvmName("mqvnemkgkdjqpsnj")
    public suspend fun imageId(`value`: Output) {
        this.imageId = value
    }

    /**
     * @param value Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).
     */
    @JvmName("ieccuojhvutnlawa")
    public suspend fun instanceInitiatedShutdownBehavior(`value`: Output) {
        this.instanceInitiatedShutdownBehavior = value
    }

    /**
     * @param value The instance type.
     */
    @JvmName("cqjvltlytupmyele")
    public suspend fun instanceType(`value`: Output) {
        this.instanceType = value
    }

    /**
     * @param value [EC2-VPC] The number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet.
     */
    @JvmName("jagbsqgxlsgaesjb")
    public suspend fun ipv6AddressCount(`value`: Output) {
        this.ipv6AddressCount = value
    }

    /**
     * @param value [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface.
     */
    @JvmName("wjjonrfghaonahqy")
    public suspend fun ipv6Addresses(`value`: Output>) {
        this.ipv6Addresses = value
    }

    @JvmName("ffxpjabwmlwggcqq")
    public suspend fun ipv6Addresses(vararg values: Output) {
        this.ipv6Addresses = Output.all(values.asList())
    }

    /**
     * @param values [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface.
     */
    @JvmName("gsbkxgcyoltdmfwd")
    public suspend fun ipv6Addresses(values: List>) {
        this.ipv6Addresses = Output.all(values)
    }

    /**
     * @param value The ID of the kernel.
     */
    @JvmName("afqjmcnhkrrclyro")
    public suspend fun kernelId(`value`: Output) {
        this.kernelId = value
    }

    /**
     * @param value The name of the key pair.
     */
    @JvmName("yjpmnyifcmoqrrcw")
    public suspend fun keyName(`value`: Output) {
        this.keyName = value
    }

    /**
     * @param value The launch template to use to launch the instances.
     */
    @JvmName("mhdjjhutofukcwjc")
    public suspend fun launchTemplate(`value`: Output) {
        this.launchTemplate = value
    }

    /**
     * @param value The license configurations.
     */
    @JvmName("xujchglwdurlluqf")
    public suspend fun licenseSpecifications(`value`: Output>) {
        this.licenseSpecifications = value
    }

    @JvmName("gyhcbvldyuugyayl")
    public suspend fun licenseSpecifications(vararg values: Output) {
        this.licenseSpecifications = Output.all(values.asList())
    }

    /**
     * @param values The license configurations.
     */
    @JvmName("pukcpirltbulrcvy")
    public suspend fun licenseSpecifications(values: List>) {
        this.licenseSpecifications = Output.all(values)
    }

    /**
     * @param value Specifies whether detailed monitoring is enabled for the instance.
     */
    @JvmName("uvfhcqyieduyjbqt")
    public suspend fun monitoring(`value`: Output) {
        this.monitoring = value
    }

    /**
     * @param value The network interfaces to associate with the instance.
     */
    @JvmName("uxdhfawaieaacvmu")
    public suspend fun networkInterfaces(`value`: Output>) {
        this.networkInterfaces = value
    }

    @JvmName("njdtshfnawfrqbux")
    public suspend fun networkInterfaces(vararg values: Output) {
        this.networkInterfaces = Output.all(values.asList())
    }

    /**
     * @param values The network interfaces to associate with the instance.
     */
    @JvmName("ovnjfppujwxkoisy")
    public suspend fun networkInterfaces(values: List>) {
        this.networkInterfaces = Output.all(values)
    }

    /**
     * @param value The name of an existing placement group that you want to launch the instance into (cluster | partition | spread).
     */
    @JvmName("lsspvvngrofnekgc")
    public suspend fun placementGroupName(`value`: Output) {
        this.placementGroupName = value
    }

    /**
     * @param value The options for the instance hostname.
     */
    @JvmName("cvxnycuppqscryln")
    public suspend fun privateDnsNameOptions(`value`: Output) {
        this.privateDnsNameOptions = value
    }

    /**
     * @param value [EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet.
     */
    @JvmName("relylkqbwwkwovvs")
    public suspend fun privateIpAddress(`value`: Output) {
        this.privateIpAddress = value
    }

    /**
     * @param value Indicates whether to assign the tags from the instance to all of the volumes attached to the instance at launch. If you specify true and you assign tags to the instance, those tags are automatically assigned to all of the volumes that you attach to the instance at launch. If you specify false, those tags are not assigned to the attached volumes.
     */
    @JvmName("kuigcyokedftbqvm")
    public suspend fun propagateTagsToVolumeOnCreation(`value`: Output) {
        this.propagateTagsToVolumeOnCreation = value
    }

    /**
     * @param value The ID of the RAM disk to select.
     */
    @JvmName("geosfbmxfownsflx")
    public suspend fun ramdiskId(`value`: Output) {
        this.ramdiskId = value
    }

    /**
     * @param value The IDs of the security groups.
     */
    @JvmName("jnauhqjrqnfipcty")
    public suspend fun securityGroupIds(`value`: Output>) {
        this.securityGroupIds = value
    }

    @JvmName("imeccwfbffthjuhl")
    public suspend fun securityGroupIds(vararg values: Output) {
        this.securityGroupIds = Output.all(values.asList())
    }

    /**
     * @param values The IDs of the security groups.
     */
    @JvmName("etocfcrjsadwdwvq")
    public suspend fun securityGroupIds(values: List>) {
        this.securityGroupIds = Output.all(values)
    }

    /**
     * @param value the names of the security groups. For a nondefault VPC, you must use security group IDs instead.
     */
    @JvmName("xaypcbyekwtpnkbx")
    public suspend fun securityGroups(`value`: Output>) {
        this.securityGroups = value
    }

    @JvmName("rfcqftcoejmloxpd")
    public suspend fun securityGroups(vararg values: Output) {
        this.securityGroups = Output.all(values.asList())
    }

    /**
     * @param values the names of the security groups. For a nondefault VPC, you must use security group IDs instead.
     */
    @JvmName("qrcjlvgcdqpgmojh")
    public suspend fun securityGroups(values: List>) {
        this.securityGroups = Output.all(values)
    }

    /**
     * @param value Specifies whether to enable an instance launched in a VPC to perform NAT.
     */
    @JvmName("ougwasaokgllghda")
    public suspend fun sourceDestCheck(`value`: Output) {
        this.sourceDestCheck = value
    }

    /**
     * @param value The SSM document and parameter values in AWS Systems Manager to associate with this instance.
     */
    @JvmName("nhwpktoypyxbxbbh")
    public suspend fun ssmAssociations(`value`: Output>) {
        this.ssmAssociations = value
    }

    @JvmName("rrsuotkyplmxatcm")
    public suspend fun ssmAssociations(vararg values: Output) {
        this.ssmAssociations = Output.all(values.asList())
    }

    /**
     * @param values The SSM document and parameter values in AWS Systems Manager to associate with this instance.
     */
    @JvmName("dunbpcvbrupbjtrb")
    public suspend fun ssmAssociations(values: List>) {
        this.ssmAssociations = Output.all(values)
    }

    /**
     * @param value [EC2-VPC] The ID of the subnet to launch the instance into.
     */
    @JvmName("tuvwbfsosvwrvstn")
    public suspend fun subnetId(`value`: Output) {
        this.subnetId = value
    }

    /**
     * @param value The tags to add to the instance.
     */
    @JvmName("nxsauyjppqapldgw")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    @JvmName("yymredieorfeurcc")
    public suspend fun tags(vararg values: Output) {
        this.tags = Output.all(values.asList())
    }

    /**
     * @param values The tags to add to the instance.
     */
    @JvmName("wgxnokhoytrnvkyx")
    public suspend fun tags(values: List>) {
        this.tags = Output.all(values)
    }

    /**
     * @param value The tenancy of the instance (if the instance is running in a VPC). An instance with a tenancy of dedicated runs on single-tenant hardware.
     */
    @JvmName("qhcswlptbqkgnfva")
    public suspend fun tenancy(`value`: Output) {
        this.tenancy = value
    }

    /**
     * @param value The user data to make available to the instance.
     */
    @JvmName("nbkpmarvkgtwimpq")
    public suspend fun userData(`value`: Output) {
        this.userData = value
    }

    /**
     * @param value The volumes to attach to the instance.
     */
    @JvmName("tjllrolwaqgwoppg")
    public suspend fun volumes(`value`: Output>) {
        this.volumes = value
    }

    @JvmName("fchsdhxciijfyqtd")
    public suspend fun volumes(vararg values: Output) {
        this.volumes = Output.all(values.asList())
    }

    /**
     * @param values The volumes to attach to the instance.
     */
    @JvmName("fsmciqksvftavaaa")
    public suspend fun volumes(values: List>) {
        this.volumes = Output.all(values)
    }

    /**
     * @param value This property is reserved for internal use. If you use it, the stack fails with this error: Bad property set: [Testing this property] (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterCombination; Request ID: 0XXXXXX-49c7-4b40-8bcc-76885dcXXXXX).
     */
    @JvmName("wompbaiwtlcbrfsq")
    public suspend fun additionalInfo(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.additionalInfo = mapped
    }

    /**
     * @param value Indicates whether the instance is associated with a dedicated host. If you want the instance to always restart on the same host on which it was launched, specify host. If you want the instance to restart on any available host, but try to launch onto the last host it ran on (on a best-effort basis), specify default.
     */
    @JvmName("iajlqvfywfbpokyt")
    public suspend fun affinity(`value`: InstanceAffinity?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.affinity = mapped
    }

    /**
     * @param value The Availability Zone of the instance.
     */
    @JvmName("ppehwdcmepmydtfx")
    public suspend fun availabilityZone(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.availabilityZone = mapped
    }

    /**
     * @param value The block device mapping entries that defines the block devices to attach to the instance at launch.
     */
    @JvmName("nhchwaxlsnsnlbus")
    public suspend fun blockDeviceMappings(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.blockDeviceMappings = mapped
    }

    /**
     * @param argument The block device mapping entries that defines the block devices to attach to the instance at launch.
     */
    @JvmName("klyikwielpdyxaqd")
    public suspend fun blockDeviceMappings(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            InstanceBlockDeviceMappingArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.blockDeviceMappings = mapped
    }

    /**
     * @param argument The block device mapping entries that defines the block devices to attach to the instance at launch.
     */
    @JvmName("tfdbsymxqubcxyog")
    public suspend fun blockDeviceMappings(vararg argument: suspend InstanceBlockDeviceMappingArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            InstanceBlockDeviceMappingArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.blockDeviceMappings = mapped
    }

    /**
     * @param argument The block device mapping entries that defines the block devices to attach to the instance at launch.
     */
    @JvmName("npcrxddsjkkrdjoc")
    public suspend fun blockDeviceMappings(argument: suspend InstanceBlockDeviceMappingArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            InstanceBlockDeviceMappingArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.blockDeviceMappings = mapped
    }

    /**
     * @param values The block device mapping entries that defines the block devices to attach to the instance at launch.
     */
    @JvmName("npivsmkpbpvbvbcs")
    public suspend fun blockDeviceMappings(vararg values: InstanceBlockDeviceMappingArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.blockDeviceMappings = mapped
    }

    /**
     * @param value The CPU options for the instance.
     */
    @JvmName("areoshcrlmgjivyw")
    public suspend fun cpuOptions(`value`: CpuOptionsPropertiesArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.cpuOptions = mapped
    }

    /**
     * @param argument The CPU options for the instance.
     */
    @JvmName("ddgbbmemfamrapig")
    public suspend fun cpuOptions(argument: suspend CpuOptionsPropertiesArgsBuilder.() -> Unit) {
        val toBeMapped = CpuOptionsPropertiesArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.cpuOptions = mapped
    }

    /**
     * @param value The credit option for CPU usage of the burstable performance instance. Valid values are standard and unlimited.
     */
    @JvmName("pkcyvwqkpwuhwotn")
    public suspend fun creditSpecification(`value`: CreditSpecificationPropertiesArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.creditSpecification = mapped
    }

    /**
     * @param argument The credit option for CPU usage of the burstable performance instance. Valid values are standard and unlimited.
     */
    @JvmName("vvqgkaqftaymnqct")
    public suspend fun creditSpecification(argument: suspend CreditSpecificationPropertiesArgsBuilder.() -> Unit) {
        val toBeMapped = CreditSpecificationPropertiesArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.creditSpecification = mapped
    }

    /**
     * @param value If you set this parameter to true, you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can.
     */
    @JvmName("ntuxhbcxwuvkahvo")
    public suspend fun disableApiTermination(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.disableApiTermination = mapped
    }

    /**
     * @param value Indicates whether the instance is optimized for Amazon EBS I/O.
     */
    @JvmName("qblppddvjetyxswb")
    public suspend fun ebsOptimized(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ebsOptimized = mapped
    }

    /**
     * @param value An elastic GPU to associate with the instance.
     */
    @JvmName("qxjuwjvtkxtiteio")
    public suspend fun elasticGpuSpecifications(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.elasticGpuSpecifications = mapped
    }

    /**
     * @param argument An elastic GPU to associate with the instance.
     */
    @JvmName("xfounjlikyfpelsw")
    public suspend fun elasticGpuSpecifications(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            InstanceElasticGpuSpecificationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.elasticGpuSpecifications = mapped
    }

    /**
     * @param argument An elastic GPU to associate with the instance.
     */
    @JvmName("uoeifcskkbyfprdv")
    public suspend fun elasticGpuSpecifications(vararg argument: suspend InstanceElasticGpuSpecificationArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            InstanceElasticGpuSpecificationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.elasticGpuSpecifications = mapped
    }

    /**
     * @param argument An elastic GPU to associate with the instance.
     */
    @JvmName("sdwqfryswnckxpsw")
    public suspend fun elasticGpuSpecifications(argument: suspend InstanceElasticGpuSpecificationArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            InstanceElasticGpuSpecificationArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.elasticGpuSpecifications = mapped
    }

    /**
     * @param values An elastic GPU to associate with the instance.
     */
    @JvmName("gepqnnstcfyqndfd")
    public suspend fun elasticGpuSpecifications(vararg values: InstanceElasticGpuSpecificationArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.elasticGpuSpecifications = mapped
    }

    /**
     * @param value An elastic inference accelerator to associate with the instance.
     */
    @JvmName("mgtcpnsbjgxfioyg")
    public suspend fun elasticInferenceAccelerators(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.elasticInferenceAccelerators = mapped
    }

    /**
     * @param argument An elastic inference accelerator to associate with the instance.
     */
    @JvmName("bsxjnrekcbdrlleg")
    public suspend fun elasticInferenceAccelerators(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            InstanceElasticInferenceAcceleratorArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.elasticInferenceAccelerators = mapped
    }

    /**
     * @param argument An elastic inference accelerator to associate with the instance.
     */
    @JvmName("xpnaqryxpcvamssb")
    public suspend fun elasticInferenceAccelerators(vararg argument: suspend InstanceElasticInferenceAcceleratorArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            InstanceElasticInferenceAcceleratorArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.elasticInferenceAccelerators = mapped
    }

    /**
     * @param argument An elastic inference accelerator to associate with the instance.
     */
    @JvmName("pxcanxsjxgslokgq")
    public suspend fun elasticInferenceAccelerators(argument: suspend InstanceElasticInferenceAcceleratorArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            InstanceElasticInferenceAcceleratorArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.elasticInferenceAccelerators = mapped
    }

    /**
     * @param values An elastic inference accelerator to associate with the instance.
     */
    @JvmName("yfsyspgqklujuoxd")
    public suspend fun elasticInferenceAccelerators(vararg values: InstanceElasticInferenceAcceleratorArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.elasticInferenceAccelerators = mapped
    }

    /**
     * @param value Indicates whether the instance is enabled for AWS Nitro Enclaves.
     */
    @JvmName("qqkvpqtomloiwltp")
    public suspend fun enclaveOptions(`value`: EnclaveOptionsPropertiesArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.enclaveOptions = mapped
    }

    /**
     * @param argument Indicates whether the instance is enabled for AWS Nitro Enclaves.
     */
    @JvmName("cuhjptruvliwffps")
    public suspend fun enclaveOptions(argument: suspend EnclaveOptionsPropertiesArgsBuilder.() -> Unit) {
        val toBeMapped = EnclaveOptionsPropertiesArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.enclaveOptions = mapped
    }

    /**
     * @param value Indicates whether an instance is enabled for hibernation.
     */
    @JvmName("xsityfvaanpyhmle")
    public suspend fun hibernationOptions(`value`: HibernationOptionsPropertiesArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.hibernationOptions = mapped
    }

    /**
     * @param argument Indicates whether an instance is enabled for hibernation.
     */
    @JvmName("fadiuhuaipckvakx")
    public suspend fun hibernationOptions(argument: suspend HibernationOptionsPropertiesArgsBuilder.() -> Unit) {
        val toBeMapped = HibernationOptionsPropertiesArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.hibernationOptions = mapped
    }

    /**
     * @param value If you specify host for the Affinity property, the ID of a dedicated host that the instance is associated with. If you don't specify an ID, Amazon EC2 launches the instance onto any available, compatible dedicated host in your account.
     */
    @JvmName("bqeqcaertpxcyovy")
    public suspend fun hostId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.hostId = mapped
    }

    /**
     * @param value The ARN of the host resource group in which to launch the instances. If you specify a host resource group ARN, omit the Tenancy parameter or set it to host.
     */
    @JvmName("thcqlrtrnfygchwg")
    public suspend fun hostResourceGroupArn(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.hostResourceGroupArn = mapped
    }

    /**
     * @param value The IAM instance profile.
     */
    @JvmName("egcpnilralomesfj")
    public suspend fun iamInstanceProfile(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.iamInstanceProfile = mapped
    }

    /**
     * @param value The ID of the AMI. An AMI ID is required to launch an instance and must be specified here or in a launch template.
     */
    @JvmName("kujunnanmnqdvadp")
    public suspend fun imageId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.imageId = mapped
    }

    /**
     * @param value Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).
     */
    @JvmName("phoqjgcvypbopqng")
    public suspend fun instanceInitiatedShutdownBehavior(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.instanceInitiatedShutdownBehavior = mapped
    }

    /**
     * @param value The instance type.
     */
    @JvmName("fdqgcunweiohtlrq")
    public suspend fun instanceType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.instanceType = mapped
    }

    /**
     * @param value [EC2-VPC] The number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet.
     */
    @JvmName("soqpmujbnbfeheos")
    public suspend fun ipv6AddressCount(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ipv6AddressCount = mapped
    }

    /**
     * @param value [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface.
     */
    @JvmName("lqfadxenppibmqme")
    public suspend fun ipv6Addresses(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ipv6Addresses = mapped
    }

    /**
     * @param argument [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface.
     */
    @JvmName("spjiynwtrqtdygbe")
    public suspend fun ipv6Addresses(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            InstanceIpv6AddressArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.ipv6Addresses = mapped
    }

    /**
     * @param argument [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface.
     */
    @JvmName("gwqbcolffkcajixa")
    public suspend fun ipv6Addresses(vararg argument: suspend InstanceIpv6AddressArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            InstanceIpv6AddressArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.ipv6Addresses = mapped
    }

    /**
     * @param argument [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface.
     */
    @JvmName("aboqpssbhrobyfym")
    public suspend fun ipv6Addresses(argument: suspend InstanceIpv6AddressArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(InstanceIpv6AddressArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.ipv6Addresses = mapped
    }

    /**
     * @param values [EC2-VPC] The IPv6 addresses from the range of the subnet to associate with the primary network interface.
     */
    @JvmName("ihbgtkhkqqocomkm")
    public suspend fun ipv6Addresses(vararg values: InstanceIpv6AddressArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.ipv6Addresses = mapped
    }

    /**
     * @param value The ID of the kernel.
     */
    @JvmName("vgljhoxvikycjgnt")
    public suspend fun kernelId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.kernelId = mapped
    }

    /**
     * @param value The name of the key pair.
     */
    @JvmName("kolkipvmlmwmamfv")
    public suspend fun keyName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.keyName = mapped
    }

    /**
     * @param value The launch template to use to launch the instances.
     */
    @JvmName("jxilkgfnfbfloufh")
    public suspend fun launchTemplate(`value`: InstanceLaunchTemplateSpecificationArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.launchTemplate = mapped
    }

    /**
     * @param argument The launch template to use to launch the instances.
     */
    @JvmName("ucriwcmepsmotlbe")
    public suspend fun launchTemplate(argument: suspend InstanceLaunchTemplateSpecificationArgsBuilder.() -> Unit) {
        val toBeMapped = InstanceLaunchTemplateSpecificationArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.launchTemplate = mapped
    }

    /**
     * @param value The license configurations.
     */
    @JvmName("ihsegetpbqwrgunt")
    public suspend fun licenseSpecifications(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.licenseSpecifications = mapped
    }

    /**
     * @param argument The license configurations.
     */
    @JvmName("xoihpfehvvkejnov")
    public suspend fun licenseSpecifications(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            InstanceLicenseSpecificationArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.licenseSpecifications = mapped
    }

    /**
     * @param argument The license configurations.
     */
    @JvmName("btgrkxwavnuarjjy")
    public suspend fun licenseSpecifications(vararg argument: suspend InstanceLicenseSpecificationArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            InstanceLicenseSpecificationArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.licenseSpecifications = mapped
    }

    /**
     * @param argument The license configurations.
     */
    @JvmName("jqckgjgugitptrok")
    public suspend fun licenseSpecifications(argument: suspend InstanceLicenseSpecificationArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            InstanceLicenseSpecificationArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.licenseSpecifications = mapped
    }

    /**
     * @param values The license configurations.
     */
    @JvmName("ebefctftixutooyy")
    public suspend fun licenseSpecifications(vararg values: InstanceLicenseSpecificationArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.licenseSpecifications = mapped
    }

    /**
     * @param value Specifies whether detailed monitoring is enabled for the instance.
     */
    @JvmName("iomykwivbbaadipr")
    public suspend fun monitoring(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.monitoring = mapped
    }

    /**
     * @param value The network interfaces to associate with the instance.
     */
    @JvmName("aboiwfadmiakymoe")
    public suspend fun networkInterfaces(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.networkInterfaces = mapped
    }

    /**
     * @param argument The network interfaces to associate with the instance.
     */
    @JvmName("wtnnoarxycmljtba")
    public suspend fun networkInterfaces(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            InstanceNetworkInterfaceArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.networkInterfaces = mapped
    }

    /**
     * @param argument The network interfaces to associate with the instance.
     */
    @JvmName("vmrmqitafxcttdcs")
    public suspend fun networkInterfaces(vararg argument: suspend InstanceNetworkInterfaceArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            InstanceNetworkInterfaceArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.networkInterfaces = mapped
    }

    /**
     * @param argument The network interfaces to associate with the instance.
     */
    @JvmName("wbiibjcbulhwysuk")
    public suspend fun networkInterfaces(argument: suspend InstanceNetworkInterfaceArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            InstanceNetworkInterfaceArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.networkInterfaces = mapped
    }

    /**
     * @param values The network interfaces to associate with the instance.
     */
    @JvmName("qilhtyjgdpyadglf")
    public suspend fun networkInterfaces(vararg values: InstanceNetworkInterfaceArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.networkInterfaces = mapped
    }

    /**
     * @param value The name of an existing placement group that you want to launch the instance into (cluster | partition | spread).
     */
    @JvmName("ftcukpegkccqkxmi")
    public suspend fun placementGroupName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.placementGroupName = mapped
    }

    /**
     * @param value The options for the instance hostname.
     */
    @JvmName("onogjubspgsyngyn")
    public suspend fun privateDnsNameOptions(`value`: InstancePrivateDnsNameOptionsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.privateDnsNameOptions = mapped
    }

    /**
     * @param argument The options for the instance hostname.
     */
    @JvmName("yfiwcfvmmmwxuwem")
    public suspend fun privateDnsNameOptions(argument: suspend InstancePrivateDnsNameOptionsArgsBuilder.() -> Unit) {
        val toBeMapped = InstancePrivateDnsNameOptionsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.privateDnsNameOptions = mapped
    }

    /**
     * @param value [EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet.
     */
    @JvmName("stwrpbrltcbnlmri")
    public suspend fun privateIpAddress(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.privateIpAddress = mapped
    }

    /**
     * @param value Indicates whether to assign the tags from the instance to all of the volumes attached to the instance at launch. If you specify true and you assign tags to the instance, those tags are automatically assigned to all of the volumes that you attach to the instance at launch. If you specify false, those tags are not assigned to the attached volumes.
     */
    @JvmName("trfesroewkevliak")
    public suspend fun propagateTagsToVolumeOnCreation(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.propagateTagsToVolumeOnCreation = mapped
    }

    /**
     * @param value The ID of the RAM disk to select.
     */
    @JvmName("dletkpldisqjndpv")
    public suspend fun ramdiskId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ramdiskId = mapped
    }

    /**
     * @param value The IDs of the security groups.
     */
    @JvmName("fhhrpokyvadsfbjh")
    public suspend fun securityGroupIds(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.securityGroupIds = mapped
    }

    /**
     * @param values The IDs of the security groups.
     */
    @JvmName("capvyhfaqbbdfwly")
    public suspend fun securityGroupIds(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.securityGroupIds = mapped
    }

    /**
     * @param value the names of the security groups. For a nondefault VPC, you must use security group IDs instead.
     */
    @JvmName("ckcdfjeukshahlub")
    public suspend fun securityGroups(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.securityGroups = mapped
    }

    /**
     * @param values the names of the security groups. For a nondefault VPC, you must use security group IDs instead.
     */
    @JvmName("qiipnrfmidhlydyg")
    public suspend fun securityGroups(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.securityGroups = mapped
    }

    /**
     * @param value Specifies whether to enable an instance launched in a VPC to perform NAT.
     */
    @JvmName("skamhpytrcwmhcfu")
    public suspend fun sourceDestCheck(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sourceDestCheck = mapped
    }

    /**
     * @param value The SSM document and parameter values in AWS Systems Manager to associate with this instance.
     */
    @JvmName("pkxbqgwknorugbbb")
    public suspend fun ssmAssociations(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ssmAssociations = mapped
    }

    /**
     * @param argument The SSM document and parameter values in AWS Systems Manager to associate with this instance.
     */
    @JvmName("cekuoodasehxpyvd")
    public suspend fun ssmAssociations(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            InstanceSsmAssociationArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.ssmAssociations = mapped
    }

    /**
     * @param argument The SSM document and parameter values in AWS Systems Manager to associate with this instance.
     */
    @JvmName("hlvpecqohwjihrkd")
    public suspend fun ssmAssociations(vararg argument: suspend InstanceSsmAssociationArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            InstanceSsmAssociationArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.ssmAssociations = mapped
    }

    /**
     * @param argument The SSM document and parameter values in AWS Systems Manager to associate with this instance.
     */
    @JvmName("xwlpauhmungnyfmg")
    public suspend fun ssmAssociations(argument: suspend InstanceSsmAssociationArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(InstanceSsmAssociationArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.ssmAssociations = mapped
    }

    /**
     * @param values The SSM document and parameter values in AWS Systems Manager to associate with this instance.
     */
    @JvmName("padkxtxkgcdaxdmu")
    public suspend fun ssmAssociations(vararg values: InstanceSsmAssociationArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.ssmAssociations = mapped
    }

    /**
     * @param value [EC2-VPC] The ID of the subnet to launch the instance into.
     */
    @JvmName("rggtjnclqtfgqiot")
    public suspend fun subnetId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.subnetId = mapped
    }

    /**
     * @param value The tags to add to the instance.
     */
    @JvmName("eegoosvnuntiyfdl")
    public suspend fun tags(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param argument The tags to add to the instance.
     */
    @JvmName("xddpmbsuoynpssnc")
    public suspend fun tags(argument: List Unit>) {
        val toBeMapped = argument.toList().map { TagArgsBuilder().applySuspend { it() }.build() }
        val mapped = of(toBeMapped)
        this.tags = mapped
    }

    /**
     * @param argument The tags to add to the instance.
     */
    @JvmName("srbqiumgkbxdidiq")
    public suspend fun tags(vararg argument: suspend TagArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map { TagArgsBuilder().applySuspend { it() }.build() }
        val mapped = of(toBeMapped)
        this.tags = mapped
    }

    /**
     * @param argument The tags to add to the instance.
     */
    @JvmName("pjndhbptkyropggm")
    public suspend fun tags(argument: suspend TagArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(TagArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.tags = mapped
    }

    /**
     * @param values The tags to add to the instance.
     */
    @JvmName("ctyifepiwoaporio")
    public suspend fun tags(vararg values: TagArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value The tenancy of the instance (if the instance is running in a VPC). An instance with a tenancy of dedicated runs on single-tenant hardware.
     */
    @JvmName("hodacnhopdmkhhkp")
    public suspend fun tenancy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tenancy = mapped
    }

    /**
     * @param value The user data to make available to the instance.
     */
    @JvmName("morfxotnkooygldg")
    public suspend fun userData(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.userData = mapped
    }

    /**
     * @param value The volumes to attach to the instance.
     */
    @JvmName("urwhndotybgrplvj")
    public suspend fun volumes(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.volumes = mapped
    }

    /**
     * @param argument The volumes to attach to the instance.
     */
    @JvmName("urlcqduevccaragg")
    public suspend fun volumes(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            InstanceVolumeArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.volumes = mapped
    }

    /**
     * @param argument The volumes to attach to the instance.
     */
    @JvmName("wcgfdpxetrhcwxwp")
    public suspend fun volumes(vararg argument: suspend InstanceVolumeArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            InstanceVolumeArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.volumes = mapped
    }

    /**
     * @param argument The volumes to attach to the instance.
     */
    @JvmName("eoanrjuliempweca")
    public suspend fun volumes(argument: suspend InstanceVolumeArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(InstanceVolumeArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.volumes = mapped
    }

    /**
     * @param values The volumes to attach to the instance.
     */
    @JvmName("cngxbekcyfvjnfur")
    public suspend fun volumes(vararg values: InstanceVolumeArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.volumes = mapped
    }

    internal fun build(): InstanceArgs = InstanceArgs(
        additionalInfo = additionalInfo,
        affinity = affinity,
        availabilityZone = availabilityZone,
        blockDeviceMappings = blockDeviceMappings,
        cpuOptions = cpuOptions,
        creditSpecification = creditSpecification,
        disableApiTermination = disableApiTermination,
        ebsOptimized = ebsOptimized,
        elasticGpuSpecifications = elasticGpuSpecifications,
        elasticInferenceAccelerators = elasticInferenceAccelerators,
        enclaveOptions = enclaveOptions,
        hibernationOptions = hibernationOptions,
        hostId = hostId,
        hostResourceGroupArn = hostResourceGroupArn,
        iamInstanceProfile = iamInstanceProfile,
        imageId = imageId,
        instanceInitiatedShutdownBehavior = instanceInitiatedShutdownBehavior,
        instanceType = instanceType,
        ipv6AddressCount = ipv6AddressCount,
        ipv6Addresses = ipv6Addresses,
        kernelId = kernelId,
        keyName = keyName,
        launchTemplate = launchTemplate,
        licenseSpecifications = licenseSpecifications,
        monitoring = monitoring,
        networkInterfaces = networkInterfaces,
        placementGroupName = placementGroupName,
        privateDnsNameOptions = privateDnsNameOptions,
        privateIpAddress = privateIpAddress,
        propagateTagsToVolumeOnCreation = propagateTagsToVolumeOnCreation,
        ramdiskId = ramdiskId,
        securityGroupIds = securityGroupIds,
        securityGroups = securityGroups,
        sourceDestCheck = sourceDestCheck,
        ssmAssociations = ssmAssociations,
        subnetId = subnetId,
        tags = tags,
        tenancy = tenancy,
        userData = userData,
        volumes = volumes,
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy