# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['ManagedInstanceArgs', 'ManagedInstance']

@pulumi.input_type
class ManagedInstanceArgs:
    def __init__(__self__, *,
                 image_id: pulumi.Input[str],
                 instance_types: pulumi.Input[Sequence[pulumi.Input[str]]],
                 persist_block_devices: pulumi.Input[bool],
                 product: pulumi.Input[str],
                 subnet_ids: pulumi.Input[Sequence[pulumi.Input[str]]],
                 vpc_id: pulumi.Input[str],
                 auto_healing: Optional[pulumi.Input[bool]] = None,
                 block_device_mappings: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceBlockDeviceMappingArgs']]]] = None,
                 block_devices_mode: Optional[pulumi.Input[str]] = None,
                 cpu_credits: Optional[pulumi.Input[str]] = None,
                 deletes: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceDeleteArgs']]]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 draining_timeout: Optional[pulumi.Input[int]] = None,
                 ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 elastic_ip: Optional[pulumi.Input[str]] = None,
                 enable_monitoring: Optional[pulumi.Input[bool]] = None,
                 fallback_to_ondemand: Optional[pulumi.Input[bool]] = None,
                 grace_period: Optional[pulumi.Input[int]] = None,
                 health_check_type: Optional[pulumi.Input[str]] = None,
                 iam_instance_profile: Optional[pulumi.Input[str]] = None,
                 integration_route53: Optional[pulumi.Input['ManagedInstanceIntegrationRoute53Args']] = None,
                 key_pair: Optional[pulumi.Input[str]] = None,
                 life_cycle: Optional[pulumi.Input[str]] = None,
                 load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceLoadBalancerArgs']]]] = None,
                 managed_instance_action: Optional[pulumi.Input['ManagedInstanceManagedInstanceActionArgs']] = None,
                 minimum_instance_lifetime: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceNetworkInterfaceArgs']]]] = None,
                 optimization_windows: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 orientation: Optional[pulumi.Input[str]] = None,
                 persist_private_ip: Optional[pulumi.Input[bool]] = None,
                 persist_root_device: Optional[pulumi.Input[bool]] = None,
                 placement_tenancy: Optional[pulumi.Input[str]] = None,
                 preferred_type: Optional[pulumi.Input[str]] = None,
                 private_ip: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 resource_tag_specifications: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceResourceTagSpecificationArgs']]]] = None,
                 revert_to_spot: Optional[pulumi.Input['ManagedInstanceRevertToSpotArgs']] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceScheduledTaskArgs']]]] = None,
                 security_group_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 shutdown_script: Optional[pulumi.Input[str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceTagArgs']]]] = None,
                 unhealthy_duration: Optional[pulumi.Input[int]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 utilize_reserved_instances: Optional[pulumi.Input[bool]] = None):
        """
        The set of arguments for constructing a ManagedInstance resource.
        """
        pulumi.set(__self__, "image_id", image_id)
        pulumi.set(__self__, "instance_types", instance_types)
        pulumi.set(__self__, "persist_block_devices", persist_block_devices)
        pulumi.set(__self__, "product", product)
        pulumi.set(__self__, "subnet_ids", subnet_ids)
        pulumi.set(__self__, "vpc_id", vpc_id)
        if auto_healing is not None:
            pulumi.set(__self__, "auto_healing", auto_healing)
        if block_device_mappings is not None:
            pulumi.set(__self__, "block_device_mappings", block_device_mappings)
        if block_devices_mode is not None:
            pulumi.set(__self__, "block_devices_mode", block_devices_mode)
        if cpu_credits is not None:
            pulumi.set(__self__, "cpu_credits", cpu_credits)
        if deletes is not None:
            pulumi.set(__self__, "deletes", deletes)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if draining_timeout is not None:
            pulumi.set(__self__, "draining_timeout", draining_timeout)
        if ebs_optimized is not None:
            pulumi.set(__self__, "ebs_optimized", ebs_optimized)
        if elastic_ip is not None:
            pulumi.set(__self__, "elastic_ip", elastic_ip)
        if enable_monitoring is not None:
            pulumi.set(__self__, "enable_monitoring", enable_monitoring)
        if fallback_to_ondemand is not None:
            pulumi.set(__self__, "fallback_to_ondemand", fallback_to_ondemand)
        if grace_period is not None:
            pulumi.set(__self__, "grace_period", grace_period)
        if health_check_type is not None:
            pulumi.set(__self__, "health_check_type", health_check_type)
        if iam_instance_profile is not None:
            pulumi.set(__self__, "iam_instance_profile", iam_instance_profile)
        if integration_route53 is not None:
            pulumi.set(__self__, "integration_route53", integration_route53)
        if key_pair is not None:
            pulumi.set(__self__, "key_pair", key_pair)
        if life_cycle is not None:
            pulumi.set(__self__, "life_cycle", life_cycle)
        if load_balancers is not None:
            pulumi.set(__self__, "load_balancers", load_balancers)
        if managed_instance_action is not None:
            pulumi.set(__self__, "managed_instance_action", managed_instance_action)
        if minimum_instance_lifetime is not None:
            pulumi.set(__self__, "minimum_instance_lifetime", minimum_instance_lifetime)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network_interfaces is not None:
            pulumi.set(__self__, "network_interfaces", network_interfaces)
        if optimization_windows is not None:
            pulumi.set(__self__, "optimization_windows", optimization_windows)
        if orientation is not None:
            pulumi.set(__self__, "orientation", orientation)
        if persist_private_ip is not None:
            pulumi.set(__self__, "persist_private_ip", persist_private_ip)
        if persist_root_device is not None:
            pulumi.set(__self__, "persist_root_device", persist_root_device)
        if placement_tenancy is not None:
            pulumi.set(__self__, "placement_tenancy", placement_tenancy)
        if preferred_type is not None:
            pulumi.set(__self__, "preferred_type", preferred_type)
        if private_ip is not None:
            pulumi.set(__self__, "private_ip", private_ip)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if resource_tag_specifications is not None:
            pulumi.set(__self__, "resource_tag_specifications", resource_tag_specifications)
        if revert_to_spot is not None:
            pulumi.set(__self__, "revert_to_spot", revert_to_spot)
        if scheduled_tasks is not None:
            pulumi.set(__self__, "scheduled_tasks", scheduled_tasks)
        if security_group_ids is not None:
            pulumi.set(__self__, "security_group_ids", security_group_ids)
        if shutdown_script is not None:
            pulumi.set(__self__, "shutdown_script", shutdown_script)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if unhealthy_duration is not None:
            pulumi.set(__self__, "unhealthy_duration", unhealthy_duration)
        if user_data is not None:
            pulumi.set(__self__, "user_data", user_data)
        if utilize_reserved_instances is not None:
            pulumi.set(__self__, "utilize_reserved_instances", utilize_reserved_instances)

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "image_id")

    @image_id.setter
    def image_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "image_id", value)

    @property
    @pulumi.getter(name="instanceTypes")
    def instance_types(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        return pulumi.get(self, "instance_types")

    @instance_types.setter
    def instance_types(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "instance_types", value)

    @property
    @pulumi.getter(name="persistBlockDevices")
    def persist_block_devices(self) -> pulumi.Input[bool]:
        return pulumi.get(self, "persist_block_devices")

    @persist_block_devices.setter
    def persist_block_devices(self, value: pulumi.Input[bool]):
        pulumi.set(self, "persist_block_devices", value)

    @property
    @pulumi.getter
    def product(self) -> pulumi.Input[str]:
        return pulumi.get(self, "product")

    @product.setter
    def product(self, value: pulumi.Input[str]):
        pulumi.set(self, "product", value)

    @property
    @pulumi.getter(name="subnetIds")
    def subnet_ids(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]:
        return pulumi.get(self, "subnet_ids")

    @subnet_ids.setter
    def subnet_ids(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]):
        pulumi.set(self, "subnet_ids", value)

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> pulumi.Input[str]:
        return pulumi.get(self, "vpc_id")

    @vpc_id.setter
    def vpc_id(self, value: pulumi.Input[str]):
        pulumi.set(self, "vpc_id", value)

    @property
    @pulumi.getter(name="autoHealing")
    def auto_healing(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "auto_healing")

    @auto_healing.setter
    def auto_healing(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "auto_healing", value)

    @property
    @pulumi.getter(name="blockDeviceMappings")
    def block_device_mappings(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceBlockDeviceMappingArgs']]]]:
        return pulumi.get(self, "block_device_mappings")

    @block_device_mappings.setter
    def block_device_mappings(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceBlockDeviceMappingArgs']]]]):
        pulumi.set(self, "block_device_mappings", value)

    @property
    @pulumi.getter(name="blockDevicesMode")
    def block_devices_mode(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "block_devices_mode")

    @block_devices_mode.setter
    def block_devices_mode(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "block_devices_mode", value)

    @property
    @pulumi.getter(name="cpuCredits")
    def cpu_credits(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "cpu_credits")

    @cpu_credits.setter
    def cpu_credits(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "cpu_credits", value)

    @property
    @pulumi.getter
    def deletes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceDeleteArgs']]]]:
        return pulumi.get(self, "deletes")

    @deletes.setter
    def deletes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceDeleteArgs']]]]):
        pulumi.set(self, "deletes", value)

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter(name="drainingTimeout")
    def draining_timeout(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "draining_timeout")

    @draining_timeout.setter
    def draining_timeout(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "draining_timeout", value)

    @property
    @pulumi.getter(name="ebsOptimized")
    def ebs_optimized(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "ebs_optimized")

    @ebs_optimized.setter
    def ebs_optimized(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "ebs_optimized", value)

    @property
    @pulumi.getter(name="elasticIp")
    def elastic_ip(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "elastic_ip")

    @elastic_ip.setter
    def elastic_ip(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "elastic_ip", value)

    @property
    @pulumi.getter(name="enableMonitoring")
    def enable_monitoring(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "enable_monitoring")

    @enable_monitoring.setter
    def enable_monitoring(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "enable_monitoring", value)

    @property
    @pulumi.getter(name="fallbackToOndemand")
    def fallback_to_ondemand(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "fallback_to_ondemand")

    @fallback_to_ondemand.setter
    def fallback_to_ondemand(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "fallback_to_ondemand", value)

    @property
    @pulumi.getter(name="gracePeriod")
    def grace_period(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "grace_period")

    @grace_period.setter
    def grace_period(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "grace_period", value)

    @property
    @pulumi.getter(name="healthCheckType")
    def health_check_type(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "health_check_type")

    @health_check_type.setter
    def health_check_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "health_check_type", value)

    @property
    @pulumi.getter(name="iamInstanceProfile")
    def iam_instance_profile(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "iam_instance_profile")

    @iam_instance_profile.setter
    def iam_instance_profile(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "iam_instance_profile", value)

    @property
    @pulumi.getter(name="integrationRoute53")
    def integration_route53(self) -> Optional[pulumi.Input['ManagedInstanceIntegrationRoute53Args']]:
        return pulumi.get(self, "integration_route53")

    @integration_route53.setter
    def integration_route53(self, value: Optional[pulumi.Input['ManagedInstanceIntegrationRoute53Args']]):
        pulumi.set(self, "integration_route53", value)

    @property
    @pulumi.getter(name="keyPair")
    def key_pair(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "key_pair")

    @key_pair.setter
    def key_pair(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_pair", value)

    @property
    @pulumi.getter(name="lifeCycle")
    def life_cycle(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "life_cycle")

    @life_cycle.setter
    def life_cycle(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "life_cycle", value)

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceLoadBalancerArgs']]]]:
        return pulumi.get(self, "load_balancers")

    @load_balancers.setter
    def load_balancers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceLoadBalancerArgs']]]]):
        pulumi.set(self, "load_balancers", value)

    @property
    @pulumi.getter(name="managedInstanceAction")
    def managed_instance_action(self) -> Optional[pulumi.Input['ManagedInstanceManagedInstanceActionArgs']]:
        return pulumi.get(self, "managed_instance_action")

    @managed_instance_action.setter
    def managed_instance_action(self, value: Optional[pulumi.Input['ManagedInstanceManagedInstanceActionArgs']]):
        pulumi.set(self, "managed_instance_action", value)

    @property
    @pulumi.getter(name="minimumInstanceLifetime")
    def minimum_instance_lifetime(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "minimum_instance_lifetime")

    @minimum_instance_lifetime.setter
    def minimum_instance_lifetime(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "minimum_instance_lifetime", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="networkInterfaces")
    def network_interfaces(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceNetworkInterfaceArgs']]]]:
        return pulumi.get(self, "network_interfaces")

    @network_interfaces.setter
    def network_interfaces(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceNetworkInterfaceArgs']]]]):
        pulumi.set(self, "network_interfaces", value)

    @property
    @pulumi.getter(name="optimizationWindows")
    def optimization_windows(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "optimization_windows")

    @optimization_windows.setter
    def optimization_windows(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "optimization_windows", value)

    @property
    @pulumi.getter
    def orientation(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "orientation")

    @orientation.setter
    def orientation(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "orientation", value)

    @property
    @pulumi.getter(name="persistPrivateIp")
    def persist_private_ip(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "persist_private_ip")

    @persist_private_ip.setter
    def persist_private_ip(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "persist_private_ip", value)

    @property
    @pulumi.getter(name="persistRootDevice")
    def persist_root_device(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "persist_root_device")

    @persist_root_device.setter
    def persist_root_device(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "persist_root_device", value)

    @property
    @pulumi.getter(name="placementTenancy")
    def placement_tenancy(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "placement_tenancy")

    @placement_tenancy.setter
    def placement_tenancy(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "placement_tenancy", value)

    @property
    @pulumi.getter(name="preferredType")
    def preferred_type(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "preferred_type")

    @preferred_type.setter
    def preferred_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "preferred_type", value)

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "private_ip")

    @private_ip.setter
    def private_ip(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip", value)

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter(name="resourceTagSpecifications")
    def resource_tag_specifications(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceResourceTagSpecificationArgs']]]]:
        return pulumi.get(self, "resource_tag_specifications")

    @resource_tag_specifications.setter
    def resource_tag_specifications(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceResourceTagSpecificationArgs']]]]):
        pulumi.set(self, "resource_tag_specifications", value)

    @property
    @pulumi.getter(name="revertToSpot")
    def revert_to_spot(self) -> Optional[pulumi.Input['ManagedInstanceRevertToSpotArgs']]:
        return pulumi.get(self, "revert_to_spot")

    @revert_to_spot.setter
    def revert_to_spot(self, value: Optional[pulumi.Input['ManagedInstanceRevertToSpotArgs']]):
        pulumi.set(self, "revert_to_spot", value)

    @property
    @pulumi.getter(name="scheduledTasks")
    def scheduled_tasks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceScheduledTaskArgs']]]]:
        return pulumi.get(self, "scheduled_tasks")

    @scheduled_tasks.setter
    def scheduled_tasks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceScheduledTaskArgs']]]]):
        pulumi.set(self, "scheduled_tasks", value)

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "security_group_ids")

    @security_group_ids.setter
    def security_group_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "security_group_ids", value)

    @property
    @pulumi.getter(name="shutdownScript")
    def shutdown_script(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "shutdown_script")

    @shutdown_script.setter
    def shutdown_script(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "shutdown_script", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceTagArgs']]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceTagArgs']]]]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter(name="unhealthyDuration")
    def unhealthy_duration(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "unhealthy_duration")

    @unhealthy_duration.setter
    def unhealthy_duration(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "unhealthy_duration", value)

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "user_data")

    @user_data.setter
    def user_data(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "user_data", value)

    @property
    @pulumi.getter(name="utilizeReservedInstances")
    def utilize_reserved_instances(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "utilize_reserved_instances")

    @utilize_reserved_instances.setter
    def utilize_reserved_instances(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "utilize_reserved_instances", value)


@pulumi.input_type
class _ManagedInstanceState:
    def __init__(__self__, *,
                 auto_healing: Optional[pulumi.Input[bool]] = None,
                 block_device_mappings: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceBlockDeviceMappingArgs']]]] = None,
                 block_devices_mode: Optional[pulumi.Input[str]] = None,
                 cpu_credits: Optional[pulumi.Input[str]] = None,
                 deletes: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceDeleteArgs']]]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 draining_timeout: Optional[pulumi.Input[int]] = None,
                 ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 elastic_ip: Optional[pulumi.Input[str]] = None,
                 enable_monitoring: Optional[pulumi.Input[bool]] = None,
                 fallback_to_ondemand: Optional[pulumi.Input[bool]] = None,
                 grace_period: Optional[pulumi.Input[int]] = None,
                 health_check_type: Optional[pulumi.Input[str]] = None,
                 iam_instance_profile: Optional[pulumi.Input[str]] = None,
                 image_id: Optional[pulumi.Input[str]] = None,
                 instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 integration_route53: Optional[pulumi.Input['ManagedInstanceIntegrationRoute53Args']] = None,
                 key_pair: Optional[pulumi.Input[str]] = None,
                 life_cycle: Optional[pulumi.Input[str]] = None,
                 load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceLoadBalancerArgs']]]] = None,
                 managed_instance_action: Optional[pulumi.Input['ManagedInstanceManagedInstanceActionArgs']] = None,
                 minimum_instance_lifetime: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceNetworkInterfaceArgs']]]] = None,
                 optimization_windows: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 orientation: Optional[pulumi.Input[str]] = None,
                 persist_block_devices: Optional[pulumi.Input[bool]] = None,
                 persist_private_ip: Optional[pulumi.Input[bool]] = None,
                 persist_root_device: Optional[pulumi.Input[bool]] = None,
                 placement_tenancy: Optional[pulumi.Input[str]] = None,
                 preferred_type: Optional[pulumi.Input[str]] = None,
                 private_ip: Optional[pulumi.Input[str]] = None,
                 product: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 resource_tag_specifications: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceResourceTagSpecificationArgs']]]] = None,
                 revert_to_spot: Optional[pulumi.Input['ManagedInstanceRevertToSpotArgs']] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceScheduledTaskArgs']]]] = None,
                 security_group_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 shutdown_script: Optional[pulumi.Input[str]] = None,
                 subnet_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceTagArgs']]]] = None,
                 unhealthy_duration: Optional[pulumi.Input[int]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 utilize_reserved_instances: Optional[pulumi.Input[bool]] = None,
                 vpc_id: Optional[pulumi.Input[str]] = None):
        """
        Input properties used for looking up and filtering ManagedInstance resources.
        """
        if auto_healing is not None:
            pulumi.set(__self__, "auto_healing", auto_healing)
        if block_device_mappings is not None:
            pulumi.set(__self__, "block_device_mappings", block_device_mappings)
        if block_devices_mode is not None:
            pulumi.set(__self__, "block_devices_mode", block_devices_mode)
        if cpu_credits is not None:
            pulumi.set(__self__, "cpu_credits", cpu_credits)
        if deletes is not None:
            pulumi.set(__self__, "deletes", deletes)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if draining_timeout is not None:
            pulumi.set(__self__, "draining_timeout", draining_timeout)
        if ebs_optimized is not None:
            pulumi.set(__self__, "ebs_optimized", ebs_optimized)
        if elastic_ip is not None:
            pulumi.set(__self__, "elastic_ip", elastic_ip)
        if enable_monitoring is not None:
            pulumi.set(__self__, "enable_monitoring", enable_monitoring)
        if fallback_to_ondemand is not None:
            pulumi.set(__self__, "fallback_to_ondemand", fallback_to_ondemand)
        if grace_period is not None:
            pulumi.set(__self__, "grace_period", grace_period)
        if health_check_type is not None:
            pulumi.set(__self__, "health_check_type", health_check_type)
        if iam_instance_profile is not None:
            pulumi.set(__self__, "iam_instance_profile", iam_instance_profile)
        if image_id is not None:
            pulumi.set(__self__, "image_id", image_id)
        if instance_types is not None:
            pulumi.set(__self__, "instance_types", instance_types)
        if integration_route53 is not None:
            pulumi.set(__self__, "integration_route53", integration_route53)
        if key_pair is not None:
            pulumi.set(__self__, "key_pair", key_pair)
        if life_cycle is not None:
            pulumi.set(__self__, "life_cycle", life_cycle)
        if load_balancers is not None:
            pulumi.set(__self__, "load_balancers", load_balancers)
        if managed_instance_action is not None:
            pulumi.set(__self__, "managed_instance_action", managed_instance_action)
        if minimum_instance_lifetime is not None:
            pulumi.set(__self__, "minimum_instance_lifetime", minimum_instance_lifetime)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if network_interfaces is not None:
            pulumi.set(__self__, "network_interfaces", network_interfaces)
        if optimization_windows is not None:
            pulumi.set(__self__, "optimization_windows", optimization_windows)
        if orientation is not None:
            pulumi.set(__self__, "orientation", orientation)
        if persist_block_devices is not None:
            pulumi.set(__self__, "persist_block_devices", persist_block_devices)
        if persist_private_ip is not None:
            pulumi.set(__self__, "persist_private_ip", persist_private_ip)
        if persist_root_device is not None:
            pulumi.set(__self__, "persist_root_device", persist_root_device)
        if placement_tenancy is not None:
            pulumi.set(__self__, "placement_tenancy", placement_tenancy)
        if preferred_type is not None:
            pulumi.set(__self__, "preferred_type", preferred_type)
        if private_ip is not None:
            pulumi.set(__self__, "private_ip", private_ip)
        if product is not None:
            pulumi.set(__self__, "product", product)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if resource_tag_specifications is not None:
            pulumi.set(__self__, "resource_tag_specifications", resource_tag_specifications)
        if revert_to_spot is not None:
            pulumi.set(__self__, "revert_to_spot", revert_to_spot)
        if scheduled_tasks is not None:
            pulumi.set(__self__, "scheduled_tasks", scheduled_tasks)
        if security_group_ids is not None:
            pulumi.set(__self__, "security_group_ids", security_group_ids)
        if shutdown_script is not None:
            pulumi.set(__self__, "shutdown_script", shutdown_script)
        if subnet_ids is not None:
            pulumi.set(__self__, "subnet_ids", subnet_ids)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if unhealthy_duration is not None:
            pulumi.set(__self__, "unhealthy_duration", unhealthy_duration)
        if user_data is not None:
            pulumi.set(__self__, "user_data", user_data)
        if utilize_reserved_instances is not None:
            pulumi.set(__self__, "utilize_reserved_instances", utilize_reserved_instances)
        if vpc_id is not None:
            pulumi.set(__self__, "vpc_id", vpc_id)

    @property
    @pulumi.getter(name="autoHealing")
    def auto_healing(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "auto_healing")

    @auto_healing.setter
    def auto_healing(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "auto_healing", value)

    @property
    @pulumi.getter(name="blockDeviceMappings")
    def block_device_mappings(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceBlockDeviceMappingArgs']]]]:
        return pulumi.get(self, "block_device_mappings")

    @block_device_mappings.setter
    def block_device_mappings(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceBlockDeviceMappingArgs']]]]):
        pulumi.set(self, "block_device_mappings", value)

    @property
    @pulumi.getter(name="blockDevicesMode")
    def block_devices_mode(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "block_devices_mode")

    @block_devices_mode.setter
    def block_devices_mode(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "block_devices_mode", value)

    @property
    @pulumi.getter(name="cpuCredits")
    def cpu_credits(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "cpu_credits")

    @cpu_credits.setter
    def cpu_credits(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "cpu_credits", value)

    @property
    @pulumi.getter
    def deletes(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceDeleteArgs']]]]:
        return pulumi.get(self, "deletes")

    @deletes.setter
    def deletes(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceDeleteArgs']]]]):
        pulumi.set(self, "deletes", value)

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "description")

    @description.setter
    def description(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "description", value)

    @property
    @pulumi.getter(name="drainingTimeout")
    def draining_timeout(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "draining_timeout")

    @draining_timeout.setter
    def draining_timeout(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "draining_timeout", value)

    @property
    @pulumi.getter(name="ebsOptimized")
    def ebs_optimized(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "ebs_optimized")

    @ebs_optimized.setter
    def ebs_optimized(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "ebs_optimized", value)

    @property
    @pulumi.getter(name="elasticIp")
    def elastic_ip(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "elastic_ip")

    @elastic_ip.setter
    def elastic_ip(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "elastic_ip", value)

    @property
    @pulumi.getter(name="enableMonitoring")
    def enable_monitoring(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "enable_monitoring")

    @enable_monitoring.setter
    def enable_monitoring(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "enable_monitoring", value)

    @property
    @pulumi.getter(name="fallbackToOndemand")
    def fallback_to_ondemand(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "fallback_to_ondemand")

    @fallback_to_ondemand.setter
    def fallback_to_ondemand(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "fallback_to_ondemand", value)

    @property
    @pulumi.getter(name="gracePeriod")
    def grace_period(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "grace_period")

    @grace_period.setter
    def grace_period(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "grace_period", value)

    @property
    @pulumi.getter(name="healthCheckType")
    def health_check_type(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "health_check_type")

    @health_check_type.setter
    def health_check_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "health_check_type", value)

    @property
    @pulumi.getter(name="iamInstanceProfile")
    def iam_instance_profile(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "iam_instance_profile")

    @iam_instance_profile.setter
    def iam_instance_profile(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "iam_instance_profile", value)

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "image_id")

    @image_id.setter
    def image_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "image_id", value)

    @property
    @pulumi.getter(name="instanceTypes")
    def instance_types(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "instance_types")

    @instance_types.setter
    def instance_types(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "instance_types", value)

    @property
    @pulumi.getter(name="integrationRoute53")
    def integration_route53(self) -> Optional[pulumi.Input['ManagedInstanceIntegrationRoute53Args']]:
        return pulumi.get(self, "integration_route53")

    @integration_route53.setter
    def integration_route53(self, value: Optional[pulumi.Input['ManagedInstanceIntegrationRoute53Args']]):
        pulumi.set(self, "integration_route53", value)

    @property
    @pulumi.getter(name="keyPair")
    def key_pair(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "key_pair")

    @key_pair.setter
    def key_pair(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "key_pair", value)

    @property
    @pulumi.getter(name="lifeCycle")
    def life_cycle(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "life_cycle")

    @life_cycle.setter
    def life_cycle(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "life_cycle", value)

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceLoadBalancerArgs']]]]:
        return pulumi.get(self, "load_balancers")

    @load_balancers.setter
    def load_balancers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceLoadBalancerArgs']]]]):
        pulumi.set(self, "load_balancers", value)

    @property
    @pulumi.getter(name="managedInstanceAction")
    def managed_instance_action(self) -> Optional[pulumi.Input['ManagedInstanceManagedInstanceActionArgs']]:
        return pulumi.get(self, "managed_instance_action")

    @managed_instance_action.setter
    def managed_instance_action(self, value: Optional[pulumi.Input['ManagedInstanceManagedInstanceActionArgs']]):
        pulumi.set(self, "managed_instance_action", value)

    @property
    @pulumi.getter(name="minimumInstanceLifetime")
    def minimum_instance_lifetime(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "minimum_instance_lifetime")

    @minimum_instance_lifetime.setter
    def minimum_instance_lifetime(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "minimum_instance_lifetime", value)

    @property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "name", value)

    @property
    @pulumi.getter(name="networkInterfaces")
    def network_interfaces(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceNetworkInterfaceArgs']]]]:
        return pulumi.get(self, "network_interfaces")

    @network_interfaces.setter
    def network_interfaces(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceNetworkInterfaceArgs']]]]):
        pulumi.set(self, "network_interfaces", value)

    @property
    @pulumi.getter(name="optimizationWindows")
    def optimization_windows(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "optimization_windows")

    @optimization_windows.setter
    def optimization_windows(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "optimization_windows", value)

    @property
    @pulumi.getter
    def orientation(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "orientation")

    @orientation.setter
    def orientation(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "orientation", value)

    @property
    @pulumi.getter(name="persistBlockDevices")
    def persist_block_devices(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "persist_block_devices")

    @persist_block_devices.setter
    def persist_block_devices(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "persist_block_devices", value)

    @property
    @pulumi.getter(name="persistPrivateIp")
    def persist_private_ip(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "persist_private_ip")

    @persist_private_ip.setter
    def persist_private_ip(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "persist_private_ip", value)

    @property
    @pulumi.getter(name="persistRootDevice")
    def persist_root_device(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "persist_root_device")

    @persist_root_device.setter
    def persist_root_device(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "persist_root_device", value)

    @property
    @pulumi.getter(name="placementTenancy")
    def placement_tenancy(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "placement_tenancy")

    @placement_tenancy.setter
    def placement_tenancy(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "placement_tenancy", value)

    @property
    @pulumi.getter(name="preferredType")
    def preferred_type(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "preferred_type")

    @preferred_type.setter
    def preferred_type(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "preferred_type", value)

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "private_ip")

    @private_ip.setter
    def private_ip(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "private_ip", value)

    @property
    @pulumi.getter
    def product(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "product")

    @product.setter
    def product(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "product", value)

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "region", value)

    @property
    @pulumi.getter(name="resourceTagSpecifications")
    def resource_tag_specifications(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceResourceTagSpecificationArgs']]]]:
        return pulumi.get(self, "resource_tag_specifications")

    @resource_tag_specifications.setter
    def resource_tag_specifications(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceResourceTagSpecificationArgs']]]]):
        pulumi.set(self, "resource_tag_specifications", value)

    @property
    @pulumi.getter(name="revertToSpot")
    def revert_to_spot(self) -> Optional[pulumi.Input['ManagedInstanceRevertToSpotArgs']]:
        return pulumi.get(self, "revert_to_spot")

    @revert_to_spot.setter
    def revert_to_spot(self, value: Optional[pulumi.Input['ManagedInstanceRevertToSpotArgs']]):
        pulumi.set(self, "revert_to_spot", value)

    @property
    @pulumi.getter(name="scheduledTasks")
    def scheduled_tasks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceScheduledTaskArgs']]]]:
        return pulumi.get(self, "scheduled_tasks")

    @scheduled_tasks.setter
    def scheduled_tasks(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceScheduledTaskArgs']]]]):
        pulumi.set(self, "scheduled_tasks", value)

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "security_group_ids")

    @security_group_ids.setter
    def security_group_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "security_group_ids", value)

    @property
    @pulumi.getter(name="shutdownScript")
    def shutdown_script(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "shutdown_script")

    @shutdown_script.setter
    def shutdown_script(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "shutdown_script", value)

    @property
    @pulumi.getter(name="subnetIds")
    def subnet_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        return pulumi.get(self, "subnet_ids")

    @subnet_ids.setter
    def subnet_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]):
        pulumi.set(self, "subnet_ids", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceTagArgs']]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ManagedInstanceTagArgs']]]]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter(name="unhealthyDuration")
    def unhealthy_duration(self) -> Optional[pulumi.Input[int]]:
        return pulumi.get(self, "unhealthy_duration")

    @unhealthy_duration.setter
    def unhealthy_duration(self, value: Optional[pulumi.Input[int]]):
        pulumi.set(self, "unhealthy_duration", value)

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "user_data")

    @user_data.setter
    def user_data(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "user_data", value)

    @property
    @pulumi.getter(name="utilizeReservedInstances")
    def utilize_reserved_instances(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "utilize_reserved_instances")

    @utilize_reserved_instances.setter
    def utilize_reserved_instances(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "utilize_reserved_instances", value)

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "vpc_id")

    @vpc_id.setter
    def vpc_id(self, value: Optional[pulumi.Input[str]]):
        pulumi.set(self, "vpc_id", value)


class ManagedInstance(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 auto_healing: Optional[pulumi.Input[bool]] = None,
                 block_device_mappings: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceBlockDeviceMappingArgs']]]]] = None,
                 block_devices_mode: Optional[pulumi.Input[str]] = None,
                 cpu_credits: Optional[pulumi.Input[str]] = None,
                 deletes: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceDeleteArgs']]]]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 draining_timeout: Optional[pulumi.Input[int]] = None,
                 ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 elastic_ip: Optional[pulumi.Input[str]] = None,
                 enable_monitoring: Optional[pulumi.Input[bool]] = None,
                 fallback_to_ondemand: Optional[pulumi.Input[bool]] = None,
                 grace_period: Optional[pulumi.Input[int]] = None,
                 health_check_type: Optional[pulumi.Input[str]] = None,
                 iam_instance_profile: Optional[pulumi.Input[str]] = None,
                 image_id: Optional[pulumi.Input[str]] = None,
                 instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 integration_route53: Optional[pulumi.Input[pulumi.InputType['ManagedInstanceIntegrationRoute53Args']]] = None,
                 key_pair: Optional[pulumi.Input[str]] = None,
                 life_cycle: Optional[pulumi.Input[str]] = None,
                 load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceLoadBalancerArgs']]]]] = None,
                 managed_instance_action: Optional[pulumi.Input[pulumi.InputType['ManagedInstanceManagedInstanceActionArgs']]] = None,
                 minimum_instance_lifetime: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceNetworkInterfaceArgs']]]]] = None,
                 optimization_windows: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 orientation: Optional[pulumi.Input[str]] = None,
                 persist_block_devices: Optional[pulumi.Input[bool]] = None,
                 persist_private_ip: Optional[pulumi.Input[bool]] = None,
                 persist_root_device: Optional[pulumi.Input[bool]] = None,
                 placement_tenancy: Optional[pulumi.Input[str]] = None,
                 preferred_type: Optional[pulumi.Input[str]] = None,
                 private_ip: Optional[pulumi.Input[str]] = None,
                 product: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 resource_tag_specifications: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceResourceTagSpecificationArgs']]]]] = None,
                 revert_to_spot: Optional[pulumi.Input[pulumi.InputType['ManagedInstanceRevertToSpotArgs']]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceScheduledTaskArgs']]]]] = None,
                 security_group_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 shutdown_script: Optional[pulumi.Input[str]] = None,
                 subnet_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceTagArgs']]]]] = None,
                 unhealthy_duration: Optional[pulumi.Input[int]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 utilize_reserved_instances: Optional[pulumi.Input[bool]] = None,
                 vpc_id: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        Create a ManagedInstance resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: ManagedInstanceArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Create a ManagedInstance resource with the given unique name, props, and options.
        :param str resource_name: The name of the resource.
        :param ManagedInstanceArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(ManagedInstanceArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 auto_healing: Optional[pulumi.Input[bool]] = None,
                 block_device_mappings: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceBlockDeviceMappingArgs']]]]] = None,
                 block_devices_mode: Optional[pulumi.Input[str]] = None,
                 cpu_credits: Optional[pulumi.Input[str]] = None,
                 deletes: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceDeleteArgs']]]]] = None,
                 description: Optional[pulumi.Input[str]] = None,
                 draining_timeout: Optional[pulumi.Input[int]] = None,
                 ebs_optimized: Optional[pulumi.Input[bool]] = None,
                 elastic_ip: Optional[pulumi.Input[str]] = None,
                 enable_monitoring: Optional[pulumi.Input[bool]] = None,
                 fallback_to_ondemand: Optional[pulumi.Input[bool]] = None,
                 grace_period: Optional[pulumi.Input[int]] = None,
                 health_check_type: Optional[pulumi.Input[str]] = None,
                 iam_instance_profile: Optional[pulumi.Input[str]] = None,
                 image_id: Optional[pulumi.Input[str]] = None,
                 instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 integration_route53: Optional[pulumi.Input[pulumi.InputType['ManagedInstanceIntegrationRoute53Args']]] = None,
                 key_pair: Optional[pulumi.Input[str]] = None,
                 life_cycle: Optional[pulumi.Input[str]] = None,
                 load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceLoadBalancerArgs']]]]] = None,
                 managed_instance_action: Optional[pulumi.Input[pulumi.InputType['ManagedInstanceManagedInstanceActionArgs']]] = None,
                 minimum_instance_lifetime: Optional[pulumi.Input[int]] = None,
                 name: Optional[pulumi.Input[str]] = None,
                 network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceNetworkInterfaceArgs']]]]] = None,
                 optimization_windows: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 orientation: Optional[pulumi.Input[str]] = None,
                 persist_block_devices: Optional[pulumi.Input[bool]] = None,
                 persist_private_ip: Optional[pulumi.Input[bool]] = None,
                 persist_root_device: Optional[pulumi.Input[bool]] = None,
                 placement_tenancy: Optional[pulumi.Input[str]] = None,
                 preferred_type: Optional[pulumi.Input[str]] = None,
                 private_ip: Optional[pulumi.Input[str]] = None,
                 product: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 resource_tag_specifications: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceResourceTagSpecificationArgs']]]]] = None,
                 revert_to_spot: Optional[pulumi.Input[pulumi.InputType['ManagedInstanceRevertToSpotArgs']]] = None,
                 scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceScheduledTaskArgs']]]]] = None,
                 security_group_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 shutdown_script: Optional[pulumi.Input[str]] = None,
                 subnet_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceTagArgs']]]]] = None,
                 unhealthy_duration: Optional[pulumi.Input[int]] = None,
                 user_data: Optional[pulumi.Input[str]] = None,
                 utilize_reserved_instances: Optional[pulumi.Input[bool]] = None,
                 vpc_id: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = ManagedInstanceArgs.__new__(ManagedInstanceArgs)

            __props__.__dict__["auto_healing"] = auto_healing
            __props__.__dict__["block_device_mappings"] = block_device_mappings
            __props__.__dict__["block_devices_mode"] = block_devices_mode
            __props__.__dict__["cpu_credits"] = cpu_credits
            __props__.__dict__["deletes"] = deletes
            __props__.__dict__["description"] = description
            __props__.__dict__["draining_timeout"] = draining_timeout
            __props__.__dict__["ebs_optimized"] = ebs_optimized
            __props__.__dict__["elastic_ip"] = elastic_ip
            __props__.__dict__["enable_monitoring"] = enable_monitoring
            __props__.__dict__["fallback_to_ondemand"] = fallback_to_ondemand
            __props__.__dict__["grace_period"] = grace_period
            __props__.__dict__["health_check_type"] = health_check_type
            __props__.__dict__["iam_instance_profile"] = iam_instance_profile
            if image_id is None and not opts.urn:
                raise TypeError("Missing required property 'image_id'")
            __props__.__dict__["image_id"] = image_id
            if instance_types is None and not opts.urn:
                raise TypeError("Missing required property 'instance_types'")
            __props__.__dict__["instance_types"] = instance_types
            __props__.__dict__["integration_route53"] = integration_route53
            __props__.__dict__["key_pair"] = key_pair
            __props__.__dict__["life_cycle"] = life_cycle
            __props__.__dict__["load_balancers"] = load_balancers
            __props__.__dict__["managed_instance_action"] = managed_instance_action
            __props__.__dict__["minimum_instance_lifetime"] = minimum_instance_lifetime
            __props__.__dict__["name"] = name
            __props__.__dict__["network_interfaces"] = network_interfaces
            __props__.__dict__["optimization_windows"] = optimization_windows
            __props__.__dict__["orientation"] = orientation
            if persist_block_devices is None and not opts.urn:
                raise TypeError("Missing required property 'persist_block_devices'")
            __props__.__dict__["persist_block_devices"] = persist_block_devices
            __props__.__dict__["persist_private_ip"] = persist_private_ip
            __props__.__dict__["persist_root_device"] = persist_root_device
            __props__.__dict__["placement_tenancy"] = placement_tenancy
            __props__.__dict__["preferred_type"] = preferred_type
            __props__.__dict__["private_ip"] = private_ip
            if product is None and not opts.urn:
                raise TypeError("Missing required property 'product'")
            __props__.__dict__["product"] = product
            __props__.__dict__["region"] = region
            __props__.__dict__["resource_tag_specifications"] = resource_tag_specifications
            __props__.__dict__["revert_to_spot"] = revert_to_spot
            __props__.__dict__["scheduled_tasks"] = scheduled_tasks
            __props__.__dict__["security_group_ids"] = security_group_ids
            __props__.__dict__["shutdown_script"] = shutdown_script
            if subnet_ids is None and not opts.urn:
                raise TypeError("Missing required property 'subnet_ids'")
            __props__.__dict__["subnet_ids"] = subnet_ids
            __props__.__dict__["tags"] = tags
            __props__.__dict__["unhealthy_duration"] = unhealthy_duration
            __props__.__dict__["user_data"] = user_data
            __props__.__dict__["utilize_reserved_instances"] = utilize_reserved_instances
            if vpc_id is None and not opts.urn:
                raise TypeError("Missing required property 'vpc_id'")
            __props__.__dict__["vpc_id"] = vpc_id
        super(ManagedInstance, __self__).__init__(
            'spotinst:aws/managedInstance:ManagedInstance',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            auto_healing: Optional[pulumi.Input[bool]] = None,
            block_device_mappings: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceBlockDeviceMappingArgs']]]]] = None,
            block_devices_mode: Optional[pulumi.Input[str]] = None,
            cpu_credits: Optional[pulumi.Input[str]] = None,
            deletes: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceDeleteArgs']]]]] = None,
            description: Optional[pulumi.Input[str]] = None,
            draining_timeout: Optional[pulumi.Input[int]] = None,
            ebs_optimized: Optional[pulumi.Input[bool]] = None,
            elastic_ip: Optional[pulumi.Input[str]] = None,
            enable_monitoring: Optional[pulumi.Input[bool]] = None,
            fallback_to_ondemand: Optional[pulumi.Input[bool]] = None,
            grace_period: Optional[pulumi.Input[int]] = None,
            health_check_type: Optional[pulumi.Input[str]] = None,
            iam_instance_profile: Optional[pulumi.Input[str]] = None,
            image_id: Optional[pulumi.Input[str]] = None,
            instance_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            integration_route53: Optional[pulumi.Input[pulumi.InputType['ManagedInstanceIntegrationRoute53Args']]] = None,
            key_pair: Optional[pulumi.Input[str]] = None,
            life_cycle: Optional[pulumi.Input[str]] = None,
            load_balancers: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceLoadBalancerArgs']]]]] = None,
            managed_instance_action: Optional[pulumi.Input[pulumi.InputType['ManagedInstanceManagedInstanceActionArgs']]] = None,
            minimum_instance_lifetime: Optional[pulumi.Input[int]] = None,
            name: Optional[pulumi.Input[str]] = None,
            network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceNetworkInterfaceArgs']]]]] = None,
            optimization_windows: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            orientation: Optional[pulumi.Input[str]] = None,
            persist_block_devices: Optional[pulumi.Input[bool]] = None,
            persist_private_ip: Optional[pulumi.Input[bool]] = None,
            persist_root_device: Optional[pulumi.Input[bool]] = None,
            placement_tenancy: Optional[pulumi.Input[str]] = None,
            preferred_type: Optional[pulumi.Input[str]] = None,
            private_ip: Optional[pulumi.Input[str]] = None,
            product: Optional[pulumi.Input[str]] = None,
            region: Optional[pulumi.Input[str]] = None,
            resource_tag_specifications: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceResourceTagSpecificationArgs']]]]] = None,
            revert_to_spot: Optional[pulumi.Input[pulumi.InputType['ManagedInstanceRevertToSpotArgs']]] = None,
            scheduled_tasks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceScheduledTaskArgs']]]]] = None,
            security_group_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            shutdown_script: Optional[pulumi.Input[str]] = None,
            subnet_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ManagedInstanceTagArgs']]]]] = None,
            unhealthy_duration: Optional[pulumi.Input[int]] = None,
            user_data: Optional[pulumi.Input[str]] = None,
            utilize_reserved_instances: Optional[pulumi.Input[bool]] = None,
            vpc_id: Optional[pulumi.Input[str]] = None) -> 'ManagedInstance':
        """
        Get an existing ManagedInstance resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _ManagedInstanceState.__new__(_ManagedInstanceState)

        __props__.__dict__["auto_healing"] = auto_healing
        __props__.__dict__["block_device_mappings"] = block_device_mappings
        __props__.__dict__["block_devices_mode"] = block_devices_mode
        __props__.__dict__["cpu_credits"] = cpu_credits
        __props__.__dict__["deletes"] = deletes
        __props__.__dict__["description"] = description
        __props__.__dict__["draining_timeout"] = draining_timeout
        __props__.__dict__["ebs_optimized"] = ebs_optimized
        __props__.__dict__["elastic_ip"] = elastic_ip
        __props__.__dict__["enable_monitoring"] = enable_monitoring
        __props__.__dict__["fallback_to_ondemand"] = fallback_to_ondemand
        __props__.__dict__["grace_period"] = grace_period
        __props__.__dict__["health_check_type"] = health_check_type
        __props__.__dict__["iam_instance_profile"] = iam_instance_profile
        __props__.__dict__["image_id"] = image_id
        __props__.__dict__["instance_types"] = instance_types
        __props__.__dict__["integration_route53"] = integration_route53
        __props__.__dict__["key_pair"] = key_pair
        __props__.__dict__["life_cycle"] = life_cycle
        __props__.__dict__["load_balancers"] = load_balancers
        __props__.__dict__["managed_instance_action"] = managed_instance_action
        __props__.__dict__["minimum_instance_lifetime"] = minimum_instance_lifetime
        __props__.__dict__["name"] = name
        __props__.__dict__["network_interfaces"] = network_interfaces
        __props__.__dict__["optimization_windows"] = optimization_windows
        __props__.__dict__["orientation"] = orientation
        __props__.__dict__["persist_block_devices"] = persist_block_devices
        __props__.__dict__["persist_private_ip"] = persist_private_ip
        __props__.__dict__["persist_root_device"] = persist_root_device
        __props__.__dict__["placement_tenancy"] = placement_tenancy
        __props__.__dict__["preferred_type"] = preferred_type
        __props__.__dict__["private_ip"] = private_ip
        __props__.__dict__["product"] = product
        __props__.__dict__["region"] = region
        __props__.__dict__["resource_tag_specifications"] = resource_tag_specifications
        __props__.__dict__["revert_to_spot"] = revert_to_spot
        __props__.__dict__["scheduled_tasks"] = scheduled_tasks
        __props__.__dict__["security_group_ids"] = security_group_ids
        __props__.__dict__["shutdown_script"] = shutdown_script
        __props__.__dict__["subnet_ids"] = subnet_ids
        __props__.__dict__["tags"] = tags
        __props__.__dict__["unhealthy_duration"] = unhealthy_duration
        __props__.__dict__["user_data"] = user_data
        __props__.__dict__["utilize_reserved_instances"] = utilize_reserved_instances
        __props__.__dict__["vpc_id"] = vpc_id
        return ManagedInstance(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="autoHealing")
    def auto_healing(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "auto_healing")

    @property
    @pulumi.getter(name="blockDeviceMappings")
    def block_device_mappings(self) -> pulumi.Output[Optional[Sequence['outputs.ManagedInstanceBlockDeviceMapping']]]:
        return pulumi.get(self, "block_device_mappings")

    @property
    @pulumi.getter(name="blockDevicesMode")
    def block_devices_mode(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "block_devices_mode")

    @property
    @pulumi.getter(name="cpuCredits")
    def cpu_credits(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "cpu_credits")

    @property
    @pulumi.getter
    def deletes(self) -> pulumi.Output[Optional[Sequence['outputs.ManagedInstanceDelete']]]:
        return pulumi.get(self, "deletes")

    @property
    @pulumi.getter
    def description(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="drainingTimeout")
    def draining_timeout(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "draining_timeout")

    @property
    @pulumi.getter(name="ebsOptimized")
    def ebs_optimized(self) -> pulumi.Output[bool]:
        return pulumi.get(self, "ebs_optimized")

    @property
    @pulumi.getter(name="elasticIp")
    def elastic_ip(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "elastic_ip")

    @property
    @pulumi.getter(name="enableMonitoring")
    def enable_monitoring(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "enable_monitoring")

    @property
    @pulumi.getter(name="fallbackToOndemand")
    def fallback_to_ondemand(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "fallback_to_ondemand")

    @property
    @pulumi.getter(name="gracePeriod")
    def grace_period(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "grace_period")

    @property
    @pulumi.getter(name="healthCheckType")
    def health_check_type(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "health_check_type")

    @property
    @pulumi.getter(name="iamInstanceProfile")
    def iam_instance_profile(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "iam_instance_profile")

    @property
    @pulumi.getter(name="imageId")
    def image_id(self) -> pulumi.Output[str]:
        return pulumi.get(self, "image_id")

    @property
    @pulumi.getter(name="instanceTypes")
    def instance_types(self) -> pulumi.Output[Sequence[str]]:
        return pulumi.get(self, "instance_types")

    @property
    @pulumi.getter(name="integrationRoute53")
    def integration_route53(self) -> pulumi.Output[Optional['outputs.ManagedInstanceIntegrationRoute53']]:
        return pulumi.get(self, "integration_route53")

    @property
    @pulumi.getter(name="keyPair")
    def key_pair(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "key_pair")

    @property
    @pulumi.getter(name="lifeCycle")
    def life_cycle(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "life_cycle")

    @property
    @pulumi.getter(name="loadBalancers")
    def load_balancers(self) -> pulumi.Output[Optional[Sequence['outputs.ManagedInstanceLoadBalancer']]]:
        return pulumi.get(self, "load_balancers")

    @property
    @pulumi.getter(name="managedInstanceAction")
    def managed_instance_action(self) -> pulumi.Output[Optional['outputs.ManagedInstanceManagedInstanceAction']]:
        return pulumi.get(self, "managed_instance_action")

    @property
    @pulumi.getter(name="minimumInstanceLifetime")
    def minimum_instance_lifetime(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "minimum_instance_lifetime")

    @property
    @pulumi.getter
    def name(self) -> pulumi.Output[str]:
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="networkInterfaces")
    def network_interfaces(self) -> pulumi.Output[Optional[Sequence['outputs.ManagedInstanceNetworkInterface']]]:
        return pulumi.get(self, "network_interfaces")

    @property
    @pulumi.getter(name="optimizationWindows")
    def optimization_windows(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "optimization_windows")

    @property
    @pulumi.getter
    def orientation(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "orientation")

    @property
    @pulumi.getter(name="persistBlockDevices")
    def persist_block_devices(self) -> pulumi.Output[bool]:
        return pulumi.get(self, "persist_block_devices")

    @property
    @pulumi.getter(name="persistPrivateIp")
    def persist_private_ip(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "persist_private_ip")

    @property
    @pulumi.getter(name="persistRootDevice")
    def persist_root_device(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "persist_root_device")

    @property
    @pulumi.getter(name="placementTenancy")
    def placement_tenancy(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "placement_tenancy")

    @property
    @pulumi.getter(name="preferredType")
    def preferred_type(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "preferred_type")

    @property
    @pulumi.getter(name="privateIp")
    def private_ip(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "private_ip")

    @property
    @pulumi.getter
    def product(self) -> pulumi.Output[str]:
        return pulumi.get(self, "product")

    @property
    @pulumi.getter
    def region(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="resourceTagSpecifications")
    def resource_tag_specifications(self) -> pulumi.Output[Optional[Sequence['outputs.ManagedInstanceResourceTagSpecification']]]:
        return pulumi.get(self, "resource_tag_specifications")

    @property
    @pulumi.getter(name="revertToSpot")
    def revert_to_spot(self) -> pulumi.Output[Optional['outputs.ManagedInstanceRevertToSpot']]:
        return pulumi.get(self, "revert_to_spot")

    @property
    @pulumi.getter(name="scheduledTasks")
    def scheduled_tasks(self) -> pulumi.Output[Optional[Sequence['outputs.ManagedInstanceScheduledTask']]]:
        return pulumi.get(self, "scheduled_tasks")

    @property
    @pulumi.getter(name="securityGroupIds")
    def security_group_ids(self) -> pulumi.Output[Optional[Sequence[str]]]:
        return pulumi.get(self, "security_group_ids")

    @property
    @pulumi.getter(name="shutdownScript")
    def shutdown_script(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "shutdown_script")

    @property
    @pulumi.getter(name="subnetIds")
    def subnet_ids(self) -> pulumi.Output[Sequence[str]]:
        return pulumi.get(self, "subnet_ids")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Sequence['outputs.ManagedInstanceTag']]]:
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="unhealthyDuration")
    def unhealthy_duration(self) -> pulumi.Output[Optional[int]]:
        return pulumi.get(self, "unhealthy_duration")

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "user_data")

    @property
    @pulumi.getter(name="utilizeReservedInstances")
    def utilize_reserved_instances(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "utilize_reserved_instances")

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> pulumi.Output[str]:
        return pulumi.get(self, "vpc_id")

