# 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 builtins
import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['InstanceArgs', 'Instance']

@pulumi.input_type
class InstanceArgs:
    def __init__(__self__, *,
                 image: pulumi.Input['InstanceImageArgs'],
                 instance_name: pulumi.Input[builtins.str],
                 instance_type: pulumi.Input[builtins.str],
                 primary_network_interface: pulumi.Input['InstancePrimaryNetworkInterfaceArgs'],
                 system_volume: pulumi.Input['InstanceSystemVolumeArgs'],
                 zone_id: pulumi.Input[builtins.str],
                 affinity_group_size: Optional[pulumi.Input[builtins.int]] = None,
                 auto_renew: Optional[pulumi.Input[builtins.bool]] = None,
                 auto_renew_period: Optional[pulumi.Input[builtins.int]] = None,
                 cpu_max_frequency: Optional[pulumi.Input[builtins.float]] = None,
                 credit_specification: Optional[pulumi.Input[builtins.str]] = None,
                 deletion_protection: Optional[pulumi.Input[builtins.bool]] = None,
                 deployment_set_group_number: Optional[pulumi.Input[builtins.int]] = None,
                 deployment_set_id: Optional[pulumi.Input[builtins.str]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 eip_address: Optional[pulumi.Input['InstanceEipAddressArgs']] = None,
                 hostname: Optional[pulumi.Input[builtins.str]] = None,
                 hpc_cluster_id: Optional[pulumi.Input[builtins.str]] = None,
                 instance_charge_type: Optional[pulumi.Input[builtins.str]] = None,
                 key_pair: Optional[pulumi.Input['InstanceKeyPairArgs']] = None,
                 operation_system: Optional[pulumi.Input['InstanceOperationSystemArgs']] = None,
                 password: Optional[pulumi.Input[builtins.str]] = None,
                 period: Optional[pulumi.Input[builtins.int]] = None,
                 period_unit: Optional[pulumi.Input[builtins.str]] = None,
                 placement: Optional[pulumi.Input['InstancePlacementArgs']] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 secondary_network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceSecondaryNetworkInterfaceArgs']]]] = None,
                 spot_price_limit: Optional[pulumi.Input[builtins.float]] = None,
                 spot_strategy: Optional[pulumi.Input[builtins.str]] = None,
                 status: Optional[pulumi.Input[builtins.str]] = None,
                 stopped_mode: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceTagArgs']]]] = None,
                 user_data: Optional[pulumi.Input[builtins.str]] = None,
                 vpc_id: Optional[pulumi.Input[builtins.str]] = None):
        """
        The set of arguments for constructing a Instance resource.
        :param pulumi.Input['InstanceImageArgs'] image: 实例的镜像。
        :param pulumi.Input[builtins.str] instance_name: 实例的名称。 - 以字母或中文开头。 -
               只能包含中文、字母、数字、下划线“_”、中划线“-”和点号“.”。 -
               长度限制为1～128个字符。
        :param pulumi.Input[builtins.str] instance_type: 实例规格。 -
               产品选型：您可以参考[实例规格介绍](https://www.volcengine.com/docs/6396/70840)或者调用[DescribeInstanceTypes](https://www.volcengine.com/docs/6396/92769)查看实例规格的性能数据，也可以参考[实例选型最佳实践](https://www.volcengine.com/docs/6396/74174)了解如何选择实例规格。
               -
               查询库存：您可以调用[DescribeAvailableResource](https://www.volcengine.com/docs/6396/76279)查询可用区中计算资源的库存信息。
        :param pulumi.Input['InstancePrimaryNetworkInterfaceArgs'] primary_network_interface: 实例的主网卡。
        :param pulumi.Input['InstanceSystemVolumeArgs'] system_volume: 实例的系统卷。
        :param pulumi.Input[builtins.str] zone_id: 实例所在的可用区ID。
        :param pulumi.Input[builtins.int] affinity_group_size: 亲和组规格，取值：2。 **提示:** - 当前仅高性能计算NPU型hpcpci3实例（邀测）支持亲和组。
               - 该功能正在邀测中，如需试用，请联系客户经理申请。
        :param pulumi.Input[builtins.bool] auto_renew: 实例到期后是否自动续费，取值： - true：自动续费。 - false（默认）：不自动续费。
               **提示:** 仅当参数`InstanceChargeType`取值为`PrePaid`时生效。
        :param pulumi.Input[builtins.int] auto_renew_period: 每次自动续费的时长。 - 仅当参数`AutoRenew`取值为`True`时，该参数生效，默认值为1。 -
               `PeriodUnit`取值为`Month`时，该参数取值为1、2、3、6、12。
        :param pulumi.Input[builtins.float] cpu_max_frequency: 指定CPU最大频率，单位：GHz，取值范围：CPU的主频到睿频之间。 **提示:** -
               当前仅g3al、c3al、r3al、g4i、c4i、r4i、g4ie、c4ie、r4ie实例支持设置该参数。规格的主频/睿频及更多信息，请参见[实例规格介绍](https://www.volcengine.com/docs/6396/70840)。
               - 该功能正在邀测中，如需使用，请联系客户经理申请。
        :param pulumi.Input[builtins.str] credit_specification: 突发性能实例的运行模式，取值： - Standard：标准模式。 -
               Unlimited：无性能约束模式（暂不支持）。 **提示:** -
               仅当`InstanceTypeId`取值为ecs.t2系列，即突发性能实例时该参数生效。 -
               不传或传入空值时，突发性能实例默认为`Standard`标准模式。
        :param pulumi.Input[builtins.bool] deletion_protection: 实例删除保护属性，指定是否支持通过控制台或API删除实例。取值： -
               true：开启实例删除保护。 - false（默认）：关闭实例删除保护。
               开启实例删除保护后，在控制台或调用API删除实例时，会收到删除失败的错误码。如需删除，请先关闭实例删除保护。
        :param pulumi.Input[builtins.int] deployment_set_group_number: 当ECS实例要加入或调整的部署集策略为部署集组高可用策略（AvailabilityGroup）时，可以通过该参数指定实例在部署集中的分组号，取值范围：1～7。
        :param pulumi.Input[builtins.str] deployment_set_id: 实例需要加入的部署集ID。 -
               您可以调用[DescribeDeploymentSets](https://www.volcengine.com/docs/6396/70873)接口，查询已创建的部署集。
               - 关于部署集的更多信息，请参见[部署集](https://www.volcengine.com/docs/6396/70871)。
        :param pulumi.Input[builtins.str] description: 实例的描述，默认为空字符串。 - 必须以字母或中文开头。 -
               只能包含中文、字母、数字、点号“.”、空格、下划线“_”、中划线“-”、等号“=”、英文逗号“,”、中文逗号“，”和中文句号“。”
               - 长度限制在255个字符以内。
        :param pulumi.Input['InstanceEipAddressArgs'] eip_address: 实例的EIP地址。
        :param pulumi.Input[builtins.str] hostname: 实例主机名，即实例操作系统内部的计算机名。 - Linux实例： -
               允许使用字母、数字、点号“.”或中划线“-”。 -
               不能以中划线、点号开头或结尾，且不能连续使用中划线和点号。 -
               Linux系统长度限制在2～63个字符之间。 - Windows实例： -
               允许使用字母、数字或中划线“-”，不能完全是数字。 -
               不能以中划线开头或结尾，且不能连续使用中划线。 -
               Windows系统长度限制在2～15个字符之间。
        :param pulumi.Input[builtins.str] hpc_cluster_id: 实例所属的高性能计算集群ID。 **提示:**
               仅当创建高性能计算GPU型实例时，该参数生效且为必填项。
        :param pulumi.Input[builtins.str] instance_charge_type: 实例和云盘的计费类型，取值： - PostPaid：按量计费。 -
               PrePaid：包年包月。请确认您的账号支持余额支付或者信控支付，否则将返回InvalidInstanceChargeType的错误提示。
        :param pulumi.Input['InstanceKeyPairArgs'] key_pair: 实例的密钥对名称。
        :param pulumi.Input['InstanceOperationSystemArgs'] operation_system: 实例的操作系统类型。
        :param pulumi.Input[builtins.str] password: 实例的密码。
        :param pulumi.Input[builtins.int] period: 购买资源的时长（N）。 -
               `PeriodUnit`为`Month`（默认）时，取值：1、2、3、4、5、6、7、8、9、12、24、36、48、60。 -
               `PeriodUnit`为`Year`时，取值：1、2、3、4、5。 **提示:**
               仅当`InstanceChargeType`取值为`PrePaid`时生效，且为必填。
        :param pulumi.Input[builtins.str] period_unit: 购买资源的时长单位。取值： - Month（默认）：月。 - Year：年。 **提示:**
               仅当`InstanceChargeType`取值为`PrePaid`时生效。
        :param pulumi.Input['InstancePlacementArgs'] placement: 实例的部署信息。
        :param pulumi.Input[builtins.str] project_name: 实例所属的项目名称。
        :param pulumi.Input[builtins.float] spot_price_limit: 竞价实例的每小时最高价格。 - 支持小数点后3位的精度。 -
               仅当`SpotStrategy`取值为`SpotWithPriceLimit`时生效。 -
               当`SpotStrategy`取值为`SpotWithPriceLimit`时，您可以自定义设置竞价实例的价格上限，当市场价格高于您的出价时，实例会被释放；当`SpotStrategy`取值为`SpotAsPriceGo`时，则代表您接受系统自动出价，跟随当前市场实际价格，此时无需填写该参数。
        :param pulumi.Input[builtins.str] spot_strategy: 竞价策略。取值： - NoSpot（默认）：非竞价实例。 -
               SpotWithPriceLimit：设置价格上限的竞ga价实例。 -
               SpotAsPriceGo：系统自动出价，跟随当前市场实际价格的竞价实例。
        :param pulumi.Input[builtins.str] status: 实例的状态。实例的状态，取值： CREATING：创建中 RUNNING：运行中 STOPPING：停止中
               STOPPED：已停止 REBOOTING: 重启中 STARTING：启动中 REBUILDING：重装中 RESIZING：更配中 ERROR：错误
               DELETING：删除中。
        :param pulumi.Input[builtins.str] stopped_mode: StoppedMode string 可选 示例值：KeepCharging 停机模式，取值：
               KeepCharging：普通停机模式。停机后实例及其相关资源仍被保留且持续计费，费用和停机前一致。
               StopCharging：节省停机模式。停机后实例的计算资源（vCPU、GPU和内存）将被回收且停止计费，所挂载的云盘、镜像、公网IP仍被保留且持续计费。
               有关节省停机的启用条件，请参见按量计费节省停机模式说明。
               默认值：若您在云服务器控制台开启了默认节省停机模式，并且符合启用条件，则默认值为StopCharging。否则，默认值为KeepCharging。
        :param pulumi.Input[builtins.str] user_data: 实例的自定义数据，默认为空。最终传入的UserData会被Base64转码。 -
               Linux实例：脚本内容不能超过16KB，且必须经过Base64编码。 -
               Windows实例：脚本内容不能超过8KB，且无需Base64编码。
        :param pulumi.Input[builtins.str] vpc_id: 实例所属的私有网络ID。您可以调用[DescribeVpcs](https://www.volcengine.com/docs/6563/66127)接口获取目标地域下的VPC信息。
        """
        pulumi.set(__self__, "image", image)
        pulumi.set(__self__, "instance_name", instance_name)
        pulumi.set(__self__, "instance_type", instance_type)
        pulumi.set(__self__, "primary_network_interface", primary_network_interface)
        pulumi.set(__self__, "system_volume", system_volume)
        pulumi.set(__self__, "zone_id", zone_id)
        if affinity_group_size is not None:
            pulumi.set(__self__, "affinity_group_size", affinity_group_size)
        if auto_renew is not None:
            pulumi.set(__self__, "auto_renew", auto_renew)
        if auto_renew_period is not None:
            pulumi.set(__self__, "auto_renew_period", auto_renew_period)
        if cpu_max_frequency is not None:
            pulumi.set(__self__, "cpu_max_frequency", cpu_max_frequency)
        if credit_specification is not None:
            pulumi.set(__self__, "credit_specification", credit_specification)
        if deletion_protection is not None:
            pulumi.set(__self__, "deletion_protection", deletion_protection)
        if deployment_set_group_number is not None:
            pulumi.set(__self__, "deployment_set_group_number", deployment_set_group_number)
        if deployment_set_id is not None:
            pulumi.set(__self__, "deployment_set_id", deployment_set_id)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if eip_address is not None:
            pulumi.set(__self__, "eip_address", eip_address)
        if hostname is not None:
            pulumi.set(__self__, "hostname", hostname)
        if hpc_cluster_id is not None:
            pulumi.set(__self__, "hpc_cluster_id", hpc_cluster_id)
        if instance_charge_type is not None:
            pulumi.set(__self__, "instance_charge_type", instance_charge_type)
        if key_pair is not None:
            pulumi.set(__self__, "key_pair", key_pair)
        if operation_system is not None:
            pulumi.set(__self__, "operation_system", operation_system)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if period is not None:
            pulumi.set(__self__, "period", period)
        if period_unit is not None:
            pulumi.set(__self__, "period_unit", period_unit)
        if placement is not None:
            pulumi.set(__self__, "placement", placement)
        if project_name is not None:
            pulumi.set(__self__, "project_name", project_name)
        if secondary_network_interfaces is not None:
            pulumi.set(__self__, "secondary_network_interfaces", secondary_network_interfaces)
        if spot_price_limit is not None:
            pulumi.set(__self__, "spot_price_limit", spot_price_limit)
        if spot_strategy is not None:
            pulumi.set(__self__, "spot_strategy", spot_strategy)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if stopped_mode is not None:
            pulumi.set(__self__, "stopped_mode", stopped_mode)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if user_data is not None:
            pulumi.set(__self__, "user_data", user_data)
        if vpc_id is not None:
            pulumi.set(__self__, "vpc_id", vpc_id)

    @property
    @pulumi.getter
    def image(self) -> pulumi.Input['InstanceImageArgs']:
        """
        实例的镜像。
        """
        return pulumi.get(self, "image")

    @image.setter
    def image(self, value: pulumi.Input['InstanceImageArgs']):
        pulumi.set(self, "image", value)

    @property
    @pulumi.getter(name="instanceName")
    def instance_name(self) -> pulumi.Input[builtins.str]:
        """
        实例的名称。 - 以字母或中文开头。 -
        只能包含中文、字母、数字、下划线“_”、中划线“-”和点号“.”。 -
        长度限制为1～128个字符。
        """
        return pulumi.get(self, "instance_name")

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

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Input[builtins.str]:
        """
        实例规格。 -
        产品选型：您可以参考[实例规格介绍](https://www.volcengine.com/docs/6396/70840)或者调用[DescribeInstanceTypes](https://www.volcengine.com/docs/6396/92769)查看实例规格的性能数据，也可以参考[实例选型最佳实践](https://www.volcengine.com/docs/6396/74174)了解如何选择实例规格。
        -
        查询库存：您可以调用[DescribeAvailableResource](https://www.volcengine.com/docs/6396/76279)查询可用区中计算资源的库存信息。
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="primaryNetworkInterface")
    def primary_network_interface(self) -> pulumi.Input['InstancePrimaryNetworkInterfaceArgs']:
        """
        实例的主网卡。
        """
        return pulumi.get(self, "primary_network_interface")

    @primary_network_interface.setter
    def primary_network_interface(self, value: pulumi.Input['InstancePrimaryNetworkInterfaceArgs']):
        pulumi.set(self, "primary_network_interface", value)

    @property
    @pulumi.getter(name="systemVolume")
    def system_volume(self) -> pulumi.Input['InstanceSystemVolumeArgs']:
        """
        实例的系统卷。
        """
        return pulumi.get(self, "system_volume")

    @system_volume.setter
    def system_volume(self, value: pulumi.Input['InstanceSystemVolumeArgs']):
        pulumi.set(self, "system_volume", value)

    @property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> pulumi.Input[builtins.str]:
        """
        实例所在的可用区ID。
        """
        return pulumi.get(self, "zone_id")

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

    @property
    @pulumi.getter(name="affinityGroupSize")
    def affinity_group_size(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        亲和组规格，取值：2。 **提示:** - 当前仅高性能计算NPU型hpcpci3实例（邀测）支持亲和组。
        - 该功能正在邀测中，如需试用，请联系客户经理申请。
        """
        return pulumi.get(self, "affinity_group_size")

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

    @property
    @pulumi.getter(name="autoRenew")
    def auto_renew(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        实例到期后是否自动续费，取值： - true：自动续费。 - false（默认）：不自动续费。
        **提示:** 仅当参数`InstanceChargeType`取值为`PrePaid`时生效。
        """
        return pulumi.get(self, "auto_renew")

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

    @property
    @pulumi.getter(name="autoRenewPeriod")
    def auto_renew_period(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        每次自动续费的时长。 - 仅当参数`AutoRenew`取值为`True`时，该参数生效，默认值为1。 -
        `PeriodUnit`取值为`Month`时，该参数取值为1、2、3、6、12。
        """
        return pulumi.get(self, "auto_renew_period")

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

    @property
    @pulumi.getter(name="cpuMaxFrequency")
    def cpu_max_frequency(self) -> Optional[pulumi.Input[builtins.float]]:
        """
        指定CPU最大频率，单位：GHz，取值范围：CPU的主频到睿频之间。 **提示:** -
        当前仅g3al、c3al、r3al、g4i、c4i、r4i、g4ie、c4ie、r4ie实例支持设置该参数。规格的主频/睿频及更多信息，请参见[实例规格介绍](https://www.volcengine.com/docs/6396/70840)。
        - 该功能正在邀测中，如需使用，请联系客户经理申请。
        """
        return pulumi.get(self, "cpu_max_frequency")

    @cpu_max_frequency.setter
    def cpu_max_frequency(self, value: Optional[pulumi.Input[builtins.float]]):
        pulumi.set(self, "cpu_max_frequency", value)

    @property
    @pulumi.getter(name="creditSpecification")
    def credit_specification(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        突发性能实例的运行模式，取值： - Standard：标准模式。 -
        Unlimited：无性能约束模式（暂不支持）。 **提示:** -
        仅当`InstanceTypeId`取值为ecs.t2系列，即突发性能实例时该参数生效。 -
        不传或传入空值时，突发性能实例默认为`Standard`标准模式。
        """
        return pulumi.get(self, "credit_specification")

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

    @property
    @pulumi.getter(name="deletionProtection")
    def deletion_protection(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        实例删除保护属性，指定是否支持通过控制台或API删除实例。取值： -
        true：开启实例删除保护。 - false（默认）：关闭实例删除保护。
        开启实例删除保护后，在控制台或调用API删除实例时，会收到删除失败的错误码。如需删除，请先关闭实例删除保护。
        """
        return pulumi.get(self, "deletion_protection")

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

    @property
    @pulumi.getter(name="deploymentSetGroupNumber")
    def deployment_set_group_number(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        当ECS实例要加入或调整的部署集策略为部署集组高可用策略（AvailabilityGroup）时，可以通过该参数指定实例在部署集中的分组号，取值范围：1～7。
        """
        return pulumi.get(self, "deployment_set_group_number")

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

    @property
    @pulumi.getter(name="deploymentSetId")
    def deployment_set_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例需要加入的部署集ID。 -
        您可以调用[DescribeDeploymentSets](https://www.volcengine.com/docs/6396/70873)接口，查询已创建的部署集。
        - 关于部署集的更多信息，请参见[部署集](https://www.volcengine.com/docs/6396/70871)。
        """
        return pulumi.get(self, "deployment_set_id")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的描述，默认为空字符串。 - 必须以字母或中文开头。 -
        只能包含中文、字母、数字、点号“.”、空格、下划线“_”、中划线“-”、等号“=”、英文逗号“,”、中文逗号“，”和中文句号“。”
        - 长度限制在255个字符以内。
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="eipAddress")
    def eip_address(self) -> Optional[pulumi.Input['InstanceEipAddressArgs']]:
        """
        实例的EIP地址。
        """
        return pulumi.get(self, "eip_address")

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

    @property
    @pulumi.getter
    def hostname(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例主机名，即实例操作系统内部的计算机名。 - Linux实例： -
        允许使用字母、数字、点号“.”或中划线“-”。 -
        不能以中划线、点号开头或结尾，且不能连续使用中划线和点号。 -
        Linux系统长度限制在2～63个字符之间。 - Windows实例： -
        允许使用字母、数字或中划线“-”，不能完全是数字。 -
        不能以中划线开头或结尾，且不能连续使用中划线。 -
        Windows系统长度限制在2～15个字符之间。
        """
        return pulumi.get(self, "hostname")

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

    @property
    @pulumi.getter(name="hpcClusterId")
    def hpc_cluster_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例所属的高性能计算集群ID。 **提示:**
        仅当创建高性能计算GPU型实例时，该参数生效且为必填项。
        """
        return pulumi.get(self, "hpc_cluster_id")

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

    @property
    @pulumi.getter(name="instanceChargeType")
    def instance_charge_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例和云盘的计费类型，取值： - PostPaid：按量计费。 -
        PrePaid：包年包月。请确认您的账号支持余额支付或者信控支付，否则将返回InvalidInstanceChargeType的错误提示。
        """
        return pulumi.get(self, "instance_charge_type")

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

    @property
    @pulumi.getter(name="keyPair")
    def key_pair(self) -> Optional[pulumi.Input['InstanceKeyPairArgs']]:
        """
        实例的密钥对名称。
        """
        return pulumi.get(self, "key_pair")

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

    @property
    @pulumi.getter(name="operationSystem")
    def operation_system(self) -> Optional[pulumi.Input['InstanceOperationSystemArgs']]:
        """
        实例的操作系统类型。
        """
        return pulumi.get(self, "operation_system")

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

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的密码。
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def period(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        购买资源的时长（N）。 -
        `PeriodUnit`为`Month`（默认）时，取值：1、2、3、4、5、6、7、8、9、12、24、36、48、60。 -
        `PeriodUnit`为`Year`时，取值：1、2、3、4、5。 **提示:**
        仅当`InstanceChargeType`取值为`PrePaid`时生效，且为必填。
        """
        return pulumi.get(self, "period")

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

    @property
    @pulumi.getter(name="periodUnit")
    def period_unit(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        购买资源的时长单位。取值： - Month（默认）：月。 - Year：年。 **提示:**
        仅当`InstanceChargeType`取值为`PrePaid`时生效。
        """
        return pulumi.get(self, "period_unit")

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

    @property
    @pulumi.getter
    def placement(self) -> Optional[pulumi.Input['InstancePlacementArgs']]:
        """
        实例的部署信息。
        """
        return pulumi.get(self, "placement")

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

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例所属的项目名称。
        """
        return pulumi.get(self, "project_name")

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

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

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

    @property
    @pulumi.getter(name="spotPriceLimit")
    def spot_price_limit(self) -> Optional[pulumi.Input[builtins.float]]:
        """
        竞价实例的每小时最高价格。 - 支持小数点后3位的精度。 -
        仅当`SpotStrategy`取值为`SpotWithPriceLimit`时生效。 -
        当`SpotStrategy`取值为`SpotWithPriceLimit`时，您可以自定义设置竞价实例的价格上限，当市场价格高于您的出价时，实例会被释放；当`SpotStrategy`取值为`SpotAsPriceGo`时，则代表您接受系统自动出价，跟随当前市场实际价格，此时无需填写该参数。
        """
        return pulumi.get(self, "spot_price_limit")

    @spot_price_limit.setter
    def spot_price_limit(self, value: Optional[pulumi.Input[builtins.float]]):
        pulumi.set(self, "spot_price_limit", value)

    @property
    @pulumi.getter(name="spotStrategy")
    def spot_strategy(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        竞价策略。取值： - NoSpot（默认）：非竞价实例。 -
        SpotWithPriceLimit：设置价格上限的竞ga价实例。 -
        SpotAsPriceGo：系统自动出价，跟随当前市场实际价格的竞价实例。
        """
        return pulumi.get(self, "spot_strategy")

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

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的状态。实例的状态，取值： CREATING：创建中 RUNNING：运行中 STOPPING：停止中
        STOPPED：已停止 REBOOTING: 重启中 STARTING：启动中 REBUILDING：重装中 RESIZING：更配中 ERROR：错误
        DELETING：删除中。
        """
        return pulumi.get(self, "status")

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

    @property
    @pulumi.getter(name="stoppedMode")
    def stopped_mode(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        StoppedMode string 可选 示例值：KeepCharging 停机模式，取值：
        KeepCharging：普通停机模式。停机后实例及其相关资源仍被保留且持续计费，费用和停机前一致。
        StopCharging：节省停机模式。停机后实例的计算资源（vCPU、GPU和内存）将被回收且停止计费，所挂载的云盘、镜像、公网IP仍被保留且持续计费。
        有关节省停机的启用条件，请参见按量计费节省停机模式说明。
        默认值：若您在云服务器控制台开启了默认节省停机模式，并且符合启用条件，则默认值为StopCharging。否则，默认值为KeepCharging。
        """
        return pulumi.get(self, "stopped_mode")

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

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

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

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的自定义数据，默认为空。最终传入的UserData会被Base64转码。 -
        Linux实例：脚本内容不能超过16KB，且必须经过Base64编码。 -
        Windows实例：脚本内容不能超过8KB，且无需Base64编码。
        """
        return pulumi.get(self, "user_data")

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

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例所属的私有网络ID。您可以调用[DescribeVpcs](https://www.volcengine.com/docs/6563/66127)接口获取目标地域下的VPC信息。
        """
        return pulumi.get(self, "vpc_id")

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


@pulumi.input_type
class _InstanceState:
    def __init__(__self__, *,
                 affinity_group_size: Optional[pulumi.Input[builtins.int]] = None,
                 auto_renew: Optional[pulumi.Input[builtins.bool]] = None,
                 auto_renew_period: Optional[pulumi.Input[builtins.int]] = None,
                 cpu_max_frequency: Optional[pulumi.Input[builtins.float]] = None,
                 cpu_memory: Optional[pulumi.Input['InstanceCpuMemoryArgs']] = None,
                 created_at: Optional[pulumi.Input[builtins.str]] = None,
                 credit_specification: Optional[pulumi.Input[builtins.str]] = None,
                 deletion_protection: Optional[pulumi.Input[builtins.bool]] = None,
                 deployment_set_group_number: Optional[pulumi.Input[builtins.int]] = None,
                 deployment_set_id: Optional[pulumi.Input[builtins.str]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 eip_address: Optional[pulumi.Input['InstanceEipAddressArgs']] = None,
                 expired_at: Optional[pulumi.Input[builtins.str]] = None,
                 hostname: Optional[pulumi.Input[builtins.str]] = None,
                 hpc_cluster_id: Optional[pulumi.Input[builtins.str]] = None,
                 image: Optional[pulumi.Input['InstanceImageArgs']] = None,
                 instance_charge_type: Optional[pulumi.Input[builtins.str]] = None,
                 instance_id: Optional[pulumi.Input[builtins.str]] = None,
                 instance_name: Optional[pulumi.Input[builtins.str]] = None,
                 instance_type: Optional[pulumi.Input[builtins.str]] = None,
                 key_pair: Optional[pulumi.Input['InstanceKeyPairArgs']] = None,
                 operation_system: Optional[pulumi.Input['InstanceOperationSystemArgs']] = None,
                 password: Optional[pulumi.Input[builtins.str]] = None,
                 period: Optional[pulumi.Input[builtins.int]] = None,
                 period_unit: Optional[pulumi.Input[builtins.str]] = None,
                 placement: Optional[pulumi.Input['InstancePlacementArgs']] = None,
                 primary_network_interface: Optional[pulumi.Input['InstancePrimaryNetworkInterfaceArgs']] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 secondary_network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceSecondaryNetworkInterfaceArgs']]]] = None,
                 spot_price_limit: Optional[pulumi.Input[builtins.float]] = None,
                 spot_strategy: Optional[pulumi.Input[builtins.str]] = None,
                 status: Optional[pulumi.Input[builtins.str]] = None,
                 stopped_mode: Optional[pulumi.Input[builtins.str]] = None,
                 system_volume: Optional[pulumi.Input['InstanceSystemVolumeArgs']] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceTagArgs']]]] = None,
                 updated_at: Optional[pulumi.Input[builtins.str]] = None,
                 user_data: Optional[pulumi.Input[builtins.str]] = None,
                 vpc_id: Optional[pulumi.Input[builtins.str]] = None,
                 zone_id: Optional[pulumi.Input[builtins.str]] = None):
        """
        Input properties used for looking up and filtering Instance resources.
        :param pulumi.Input[builtins.int] affinity_group_size: 亲和组规格，取值：2。 **提示:** - 当前仅高性能计算NPU型hpcpci3实例（邀测）支持亲和组。
               - 该功能正在邀测中，如需试用，请联系客户经理申请。
        :param pulumi.Input[builtins.bool] auto_renew: 实例到期后是否自动续费，取值： - true：自动续费。 - false（默认）：不自动续费。
               **提示:** 仅当参数`InstanceChargeType`取值为`PrePaid`时生效。
        :param pulumi.Input[builtins.int] auto_renew_period: 每次自动续费的时长。 - 仅当参数`AutoRenew`取值为`True`时，该参数生效，默认值为1。 -
               `PeriodUnit`取值为`Month`时，该参数取值为1、2、3、6、12。
        :param pulumi.Input[builtins.float] cpu_max_frequency: 指定CPU最大频率，单位：GHz，取值范围：CPU的主频到睿频之间。 **提示:** -
               当前仅g3al、c3al、r3al、g4i、c4i、r4i、g4ie、c4ie、r4ie实例支持设置该参数。规格的主频/睿频及更多信息，请参见[实例规格介绍](https://www.volcengine.com/docs/6396/70840)。
               - 该功能正在邀测中，如需使用，请联系客户经理申请。
        :param pulumi.Input['InstanceCpuMemoryArgs'] cpu_memory: 实例的CPU选项。
        :param pulumi.Input[builtins.str] created_at: 实例的创建时间。
        :param pulumi.Input[builtins.str] credit_specification: 突发性能实例的运行模式，取值： - Standard：标准模式。 -
               Unlimited：无性能约束模式（暂不支持）。 **提示:** -
               仅当`InstanceTypeId`取值为ecs.t2系列，即突发性能实例时该参数生效。 -
               不传或传入空值时，突发性能实例默认为`Standard`标准模式。
        :param pulumi.Input[builtins.bool] deletion_protection: 实例删除保护属性，指定是否支持通过控制台或API删除实例。取值： -
               true：开启实例删除保护。 - false（默认）：关闭实例删除保护。
               开启实例删除保护后，在控制台或调用API删除实例时，会收到删除失败的错误码。如需删除，请先关闭实例删除保护。
        :param pulumi.Input[builtins.int] deployment_set_group_number: 当ECS实例要加入或调整的部署集策略为部署集组高可用策略（AvailabilityGroup）时，可以通过该参数指定实例在部署集中的分组号，取值范围：1～7。
        :param pulumi.Input[builtins.str] deployment_set_id: 实例需要加入的部署集ID。 -
               您可以调用[DescribeDeploymentSets](https://www.volcengine.com/docs/6396/70873)接口，查询已创建的部署集。
               - 关于部署集的更多信息，请参见[部署集](https://www.volcengine.com/docs/6396/70871)。
        :param pulumi.Input[builtins.str] description: 实例的描述，默认为空字符串。 - 必须以字母或中文开头。 -
               只能包含中文、字母、数字、点号“.”、空格、下划线“_”、中划线“-”、等号“=”、英文逗号“,”、中文逗号“，”和中文句号“。”
               - 长度限制在255个字符以内。
        :param pulumi.Input['InstanceEipAddressArgs'] eip_address: 实例的EIP地址。
        :param pulumi.Input[builtins.str] expired_at: 实例的过期时间。
        :param pulumi.Input[builtins.str] hostname: 实例主机名，即实例操作系统内部的计算机名。 - Linux实例： -
               允许使用字母、数字、点号“.”或中划线“-”。 -
               不能以中划线、点号开头或结尾，且不能连续使用中划线和点号。 -
               Linux系统长度限制在2～63个字符之间。 - Windows实例： -
               允许使用字母、数字或中划线“-”，不能完全是数字。 -
               不能以中划线开头或结尾，且不能连续使用中划线。 -
               Windows系统长度限制在2～15个字符之间。
        :param pulumi.Input[builtins.str] hpc_cluster_id: 实例所属的高性能计算集群ID。 **提示:**
               仅当创建高性能计算GPU型实例时，该参数生效且为必填项。
        :param pulumi.Input['InstanceImageArgs'] image: 实例的镜像。
        :param pulumi.Input[builtins.str] instance_charge_type: 实例和云盘的计费类型，取值： - PostPaid：按量计费。 -
               PrePaid：包年包月。请确认您的账号支持余额支付或者信控支付，否则将返回InvalidInstanceChargeType的错误提示。
        :param pulumi.Input[builtins.str] instance_id: ECS实例的ID。
        :param pulumi.Input[builtins.str] instance_name: 实例的名称。 - 以字母或中文开头。 -
               只能包含中文、字母、数字、下划线“_”、中划线“-”和点号“.”。 -
               长度限制为1～128个字符。
        :param pulumi.Input[builtins.str] instance_type: 实例规格。 -
               产品选型：您可以参考[实例规格介绍](https://www.volcengine.com/docs/6396/70840)或者调用[DescribeInstanceTypes](https://www.volcengine.com/docs/6396/92769)查看实例规格的性能数据，也可以参考[实例选型最佳实践](https://www.volcengine.com/docs/6396/74174)了解如何选择实例规格。
               -
               查询库存：您可以调用[DescribeAvailableResource](https://www.volcengine.com/docs/6396/76279)查询可用区中计算资源的库存信息。
        :param pulumi.Input['InstanceKeyPairArgs'] key_pair: 实例的密钥对名称。
        :param pulumi.Input['InstanceOperationSystemArgs'] operation_system: 实例的操作系统类型。
        :param pulumi.Input[builtins.str] password: 实例的密码。
        :param pulumi.Input[builtins.int] period: 购买资源的时长（N）。 -
               `PeriodUnit`为`Month`（默认）时，取值：1、2、3、4、5、6、7、8、9、12、24、36、48、60。 -
               `PeriodUnit`为`Year`时，取值：1、2、3、4、5。 **提示:**
               仅当`InstanceChargeType`取值为`PrePaid`时生效，且为必填。
        :param pulumi.Input[builtins.str] period_unit: 购买资源的时长单位。取值： - Month（默认）：月。 - Year：年。 **提示:**
               仅当`InstanceChargeType`取值为`PrePaid`时生效。
        :param pulumi.Input['InstancePlacementArgs'] placement: 实例的部署信息。
        :param pulumi.Input['InstancePrimaryNetworkInterfaceArgs'] primary_network_interface: 实例的主网卡。
        :param pulumi.Input[builtins.str] project_name: 实例所属的项目名称。
        :param pulumi.Input[builtins.float] spot_price_limit: 竞价实例的每小时最高价格。 - 支持小数点后3位的精度。 -
               仅当`SpotStrategy`取值为`SpotWithPriceLimit`时生效。 -
               当`SpotStrategy`取值为`SpotWithPriceLimit`时，您可以自定义设置竞价实例的价格上限，当市场价格高于您的出价时，实例会被释放；当`SpotStrategy`取值为`SpotAsPriceGo`时，则代表您接受系统自动出价，跟随当前市场实际价格，此时无需填写该参数。
        :param pulumi.Input[builtins.str] spot_strategy: 竞价策略。取值： - NoSpot（默认）：非竞价实例。 -
               SpotWithPriceLimit：设置价格上限的竞ga价实例。 -
               SpotAsPriceGo：系统自动出价，跟随当前市场实际价格的竞价实例。
        :param pulumi.Input[builtins.str] status: 实例的状态。实例的状态，取值： CREATING：创建中 RUNNING：运行中 STOPPING：停止中
               STOPPED：已停止 REBOOTING: 重启中 STARTING：启动中 REBUILDING：重装中 RESIZING：更配中 ERROR：错误
               DELETING：删除中。
        :param pulumi.Input[builtins.str] stopped_mode: StoppedMode string 可选 示例值：KeepCharging 停机模式，取值：
               KeepCharging：普通停机模式。停机后实例及其相关资源仍被保留且持续计费，费用和停机前一致。
               StopCharging：节省停机模式。停机后实例的计算资源（vCPU、GPU和内存）将被回收且停止计费，所挂载的云盘、镜像、公网IP仍被保留且持续计费。
               有关节省停机的启用条件，请参见按量计费节省停机模式说明。
               默认值：若您在云服务器控制台开启了默认节省停机模式，并且符合启用条件，则默认值为StopCharging。否则，默认值为KeepCharging。
        :param pulumi.Input['InstanceSystemVolumeArgs'] system_volume: 实例的系统卷。
        :param pulumi.Input[builtins.str] updated_at: 实例的更新时间。
        :param pulumi.Input[builtins.str] user_data: 实例的自定义数据，默认为空。最终传入的UserData会被Base64转码。 -
               Linux实例：脚本内容不能超过16KB，且必须经过Base64编码。 -
               Windows实例：脚本内容不能超过8KB，且无需Base64编码。
        :param pulumi.Input[builtins.str] vpc_id: 实例所属的私有网络ID。您可以调用[DescribeVpcs](https://www.volcengine.com/docs/6563/66127)接口获取目标地域下的VPC信息。
        :param pulumi.Input[builtins.str] zone_id: 实例所在的可用区ID。
        """
        if affinity_group_size is not None:
            pulumi.set(__self__, "affinity_group_size", affinity_group_size)
        if auto_renew is not None:
            pulumi.set(__self__, "auto_renew", auto_renew)
        if auto_renew_period is not None:
            pulumi.set(__self__, "auto_renew_period", auto_renew_period)
        if cpu_max_frequency is not None:
            pulumi.set(__self__, "cpu_max_frequency", cpu_max_frequency)
        if cpu_memory is not None:
            pulumi.set(__self__, "cpu_memory", cpu_memory)
        if created_at is not None:
            pulumi.set(__self__, "created_at", created_at)
        if credit_specification is not None:
            pulumi.set(__self__, "credit_specification", credit_specification)
        if deletion_protection is not None:
            pulumi.set(__self__, "deletion_protection", deletion_protection)
        if deployment_set_group_number is not None:
            pulumi.set(__self__, "deployment_set_group_number", deployment_set_group_number)
        if deployment_set_id is not None:
            pulumi.set(__self__, "deployment_set_id", deployment_set_id)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if eip_address is not None:
            pulumi.set(__self__, "eip_address", eip_address)
        if expired_at is not None:
            pulumi.set(__self__, "expired_at", expired_at)
        if hostname is not None:
            pulumi.set(__self__, "hostname", hostname)
        if hpc_cluster_id is not None:
            pulumi.set(__self__, "hpc_cluster_id", hpc_cluster_id)
        if image is not None:
            pulumi.set(__self__, "image", image)
        if instance_charge_type is not None:
            pulumi.set(__self__, "instance_charge_type", instance_charge_type)
        if instance_id is not None:
            pulumi.set(__self__, "instance_id", instance_id)
        if instance_name is not None:
            pulumi.set(__self__, "instance_name", instance_name)
        if instance_type is not None:
            pulumi.set(__self__, "instance_type", instance_type)
        if key_pair is not None:
            pulumi.set(__self__, "key_pair", key_pair)
        if operation_system is not None:
            pulumi.set(__self__, "operation_system", operation_system)
        if password is not None:
            pulumi.set(__self__, "password", password)
        if period is not None:
            pulumi.set(__self__, "period", period)
        if period_unit is not None:
            pulumi.set(__self__, "period_unit", period_unit)
        if placement is not None:
            pulumi.set(__self__, "placement", placement)
        if primary_network_interface is not None:
            pulumi.set(__self__, "primary_network_interface", primary_network_interface)
        if project_name is not None:
            pulumi.set(__self__, "project_name", project_name)
        if secondary_network_interfaces is not None:
            pulumi.set(__self__, "secondary_network_interfaces", secondary_network_interfaces)
        if spot_price_limit is not None:
            pulumi.set(__self__, "spot_price_limit", spot_price_limit)
        if spot_strategy is not None:
            pulumi.set(__self__, "spot_strategy", spot_strategy)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if stopped_mode is not None:
            pulumi.set(__self__, "stopped_mode", stopped_mode)
        if system_volume is not None:
            pulumi.set(__self__, "system_volume", system_volume)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if updated_at is not None:
            pulumi.set(__self__, "updated_at", updated_at)
        if user_data is not None:
            pulumi.set(__self__, "user_data", user_data)
        if vpc_id is not None:
            pulumi.set(__self__, "vpc_id", vpc_id)
        if zone_id is not None:
            pulumi.set(__self__, "zone_id", zone_id)

    @property
    @pulumi.getter(name="affinityGroupSize")
    def affinity_group_size(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        亲和组规格，取值：2。 **提示:** - 当前仅高性能计算NPU型hpcpci3实例（邀测）支持亲和组。
        - 该功能正在邀测中，如需试用，请联系客户经理申请。
        """
        return pulumi.get(self, "affinity_group_size")

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

    @property
    @pulumi.getter(name="autoRenew")
    def auto_renew(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        实例到期后是否自动续费，取值： - true：自动续费。 - false（默认）：不自动续费。
        **提示:** 仅当参数`InstanceChargeType`取值为`PrePaid`时生效。
        """
        return pulumi.get(self, "auto_renew")

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

    @property
    @pulumi.getter(name="autoRenewPeriod")
    def auto_renew_period(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        每次自动续费的时长。 - 仅当参数`AutoRenew`取值为`True`时，该参数生效，默认值为1。 -
        `PeriodUnit`取值为`Month`时，该参数取值为1、2、3、6、12。
        """
        return pulumi.get(self, "auto_renew_period")

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

    @property
    @pulumi.getter(name="cpuMaxFrequency")
    def cpu_max_frequency(self) -> Optional[pulumi.Input[builtins.float]]:
        """
        指定CPU最大频率，单位：GHz，取值范围：CPU的主频到睿频之间。 **提示:** -
        当前仅g3al、c3al、r3al、g4i、c4i、r4i、g4ie、c4ie、r4ie实例支持设置该参数。规格的主频/睿频及更多信息，请参见[实例规格介绍](https://www.volcengine.com/docs/6396/70840)。
        - 该功能正在邀测中，如需使用，请联系客户经理申请。
        """
        return pulumi.get(self, "cpu_max_frequency")

    @cpu_max_frequency.setter
    def cpu_max_frequency(self, value: Optional[pulumi.Input[builtins.float]]):
        pulumi.set(self, "cpu_max_frequency", value)

    @property
    @pulumi.getter(name="cpuMemory")
    def cpu_memory(self) -> Optional[pulumi.Input['InstanceCpuMemoryArgs']]:
        """
        实例的CPU选项。
        """
        return pulumi.get(self, "cpu_memory")

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

    @property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的创建时间。
        """
        return pulumi.get(self, "created_at")

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

    @property
    @pulumi.getter(name="creditSpecification")
    def credit_specification(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        突发性能实例的运行模式，取值： - Standard：标准模式。 -
        Unlimited：无性能约束模式（暂不支持）。 **提示:** -
        仅当`InstanceTypeId`取值为ecs.t2系列，即突发性能实例时该参数生效。 -
        不传或传入空值时，突发性能实例默认为`Standard`标准模式。
        """
        return pulumi.get(self, "credit_specification")

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

    @property
    @pulumi.getter(name="deletionProtection")
    def deletion_protection(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        实例删除保护属性，指定是否支持通过控制台或API删除实例。取值： -
        true：开启实例删除保护。 - false（默认）：关闭实例删除保护。
        开启实例删除保护后，在控制台或调用API删除实例时，会收到删除失败的错误码。如需删除，请先关闭实例删除保护。
        """
        return pulumi.get(self, "deletion_protection")

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

    @property
    @pulumi.getter(name="deploymentSetGroupNumber")
    def deployment_set_group_number(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        当ECS实例要加入或调整的部署集策略为部署集组高可用策略（AvailabilityGroup）时，可以通过该参数指定实例在部署集中的分组号，取值范围：1～7。
        """
        return pulumi.get(self, "deployment_set_group_number")

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

    @property
    @pulumi.getter(name="deploymentSetId")
    def deployment_set_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例需要加入的部署集ID。 -
        您可以调用[DescribeDeploymentSets](https://www.volcengine.com/docs/6396/70873)接口，查询已创建的部署集。
        - 关于部署集的更多信息，请参见[部署集](https://www.volcengine.com/docs/6396/70871)。
        """
        return pulumi.get(self, "deployment_set_id")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的描述，默认为空字符串。 - 必须以字母或中文开头。 -
        只能包含中文、字母、数字、点号“.”、空格、下划线“_”、中划线“-”、等号“=”、英文逗号“,”、中文逗号“，”和中文句号“。”
        - 长度限制在255个字符以内。
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter(name="eipAddress")
    def eip_address(self) -> Optional[pulumi.Input['InstanceEipAddressArgs']]:
        """
        实例的EIP地址。
        """
        return pulumi.get(self, "eip_address")

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

    @property
    @pulumi.getter(name="expiredAt")
    def expired_at(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的过期时间。
        """
        return pulumi.get(self, "expired_at")

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

    @property
    @pulumi.getter
    def hostname(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例主机名，即实例操作系统内部的计算机名。 - Linux实例： -
        允许使用字母、数字、点号“.”或中划线“-”。 -
        不能以中划线、点号开头或结尾，且不能连续使用中划线和点号。 -
        Linux系统长度限制在2～63个字符之间。 - Windows实例： -
        允许使用字母、数字或中划线“-”，不能完全是数字。 -
        不能以中划线开头或结尾，且不能连续使用中划线。 -
        Windows系统长度限制在2～15个字符之间。
        """
        return pulumi.get(self, "hostname")

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

    @property
    @pulumi.getter(name="hpcClusterId")
    def hpc_cluster_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例所属的高性能计算集群ID。 **提示:**
        仅当创建高性能计算GPU型实例时，该参数生效且为必填项。
        """
        return pulumi.get(self, "hpc_cluster_id")

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

    @property
    @pulumi.getter
    def image(self) -> Optional[pulumi.Input['InstanceImageArgs']]:
        """
        实例的镜像。
        """
        return pulumi.get(self, "image")

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

    @property
    @pulumi.getter(name="instanceChargeType")
    def instance_charge_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例和云盘的计费类型，取值： - PostPaid：按量计费。 -
        PrePaid：包年包月。请确认您的账号支持余额支付或者信控支付，否则将返回InvalidInstanceChargeType的错误提示。
        """
        return pulumi.get(self, "instance_charge_type")

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

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        ECS实例的ID。
        """
        return pulumi.get(self, "instance_id")

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

    @property
    @pulumi.getter(name="instanceName")
    def instance_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的名称。 - 以字母或中文开头。 -
        只能包含中文、字母、数字、下划线“_”、中划线“-”和点号“.”。 -
        长度限制为1～128个字符。
        """
        return pulumi.get(self, "instance_name")

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

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例规格。 -
        产品选型：您可以参考[实例规格介绍](https://www.volcengine.com/docs/6396/70840)或者调用[DescribeInstanceTypes](https://www.volcengine.com/docs/6396/92769)查看实例规格的性能数据，也可以参考[实例选型最佳实践](https://www.volcengine.com/docs/6396/74174)了解如何选择实例规格。
        -
        查询库存：您可以调用[DescribeAvailableResource](https://www.volcengine.com/docs/6396/76279)查询可用区中计算资源的库存信息。
        """
        return pulumi.get(self, "instance_type")

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

    @property
    @pulumi.getter(name="keyPair")
    def key_pair(self) -> Optional[pulumi.Input['InstanceKeyPairArgs']]:
        """
        实例的密钥对名称。
        """
        return pulumi.get(self, "key_pair")

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

    @property
    @pulumi.getter(name="operationSystem")
    def operation_system(self) -> Optional[pulumi.Input['InstanceOperationSystemArgs']]:
        """
        实例的操作系统类型。
        """
        return pulumi.get(self, "operation_system")

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

    @property
    @pulumi.getter
    def password(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的密码。
        """
        return pulumi.get(self, "password")

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

    @property
    @pulumi.getter
    def period(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        购买资源的时长（N）。 -
        `PeriodUnit`为`Month`（默认）时，取值：1、2、3、4、5、6、7、8、9、12、24、36、48、60。 -
        `PeriodUnit`为`Year`时，取值：1、2、3、4、5。 **提示:**
        仅当`InstanceChargeType`取值为`PrePaid`时生效，且为必填。
        """
        return pulumi.get(self, "period")

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

    @property
    @pulumi.getter(name="periodUnit")
    def period_unit(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        购买资源的时长单位。取值： - Month（默认）：月。 - Year：年。 **提示:**
        仅当`InstanceChargeType`取值为`PrePaid`时生效。
        """
        return pulumi.get(self, "period_unit")

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

    @property
    @pulumi.getter
    def placement(self) -> Optional[pulumi.Input['InstancePlacementArgs']]:
        """
        实例的部署信息。
        """
        return pulumi.get(self, "placement")

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

    @property
    @pulumi.getter(name="primaryNetworkInterface")
    def primary_network_interface(self) -> Optional[pulumi.Input['InstancePrimaryNetworkInterfaceArgs']]:
        """
        实例的主网卡。
        """
        return pulumi.get(self, "primary_network_interface")

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

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例所属的项目名称。
        """
        return pulumi.get(self, "project_name")

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

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

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

    @property
    @pulumi.getter(name="spotPriceLimit")
    def spot_price_limit(self) -> Optional[pulumi.Input[builtins.float]]:
        """
        竞价实例的每小时最高价格。 - 支持小数点后3位的精度。 -
        仅当`SpotStrategy`取值为`SpotWithPriceLimit`时生效。 -
        当`SpotStrategy`取值为`SpotWithPriceLimit`时，您可以自定义设置竞价实例的价格上限，当市场价格高于您的出价时，实例会被释放；当`SpotStrategy`取值为`SpotAsPriceGo`时，则代表您接受系统自动出价，跟随当前市场实际价格，此时无需填写该参数。
        """
        return pulumi.get(self, "spot_price_limit")

    @spot_price_limit.setter
    def spot_price_limit(self, value: Optional[pulumi.Input[builtins.float]]):
        pulumi.set(self, "spot_price_limit", value)

    @property
    @pulumi.getter(name="spotStrategy")
    def spot_strategy(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        竞价策略。取值： - NoSpot（默认）：非竞价实例。 -
        SpotWithPriceLimit：设置价格上限的竞ga价实例。 -
        SpotAsPriceGo：系统自动出价，跟随当前市场实际价格的竞价实例。
        """
        return pulumi.get(self, "spot_strategy")

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

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的状态。实例的状态，取值： CREATING：创建中 RUNNING：运行中 STOPPING：停止中
        STOPPED：已停止 REBOOTING: 重启中 STARTING：启动中 REBUILDING：重装中 RESIZING：更配中 ERROR：错误
        DELETING：删除中。
        """
        return pulumi.get(self, "status")

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

    @property
    @pulumi.getter(name="stoppedMode")
    def stopped_mode(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        StoppedMode string 可选 示例值：KeepCharging 停机模式，取值：
        KeepCharging：普通停机模式。停机后实例及其相关资源仍被保留且持续计费，费用和停机前一致。
        StopCharging：节省停机模式。停机后实例的计算资源（vCPU、GPU和内存）将被回收且停止计费，所挂载的云盘、镜像、公网IP仍被保留且持续计费。
        有关节省停机的启用条件，请参见按量计费节省停机模式说明。
        默认值：若您在云服务器控制台开启了默认节省停机模式，并且符合启用条件，则默认值为StopCharging。否则，默认值为KeepCharging。
        """
        return pulumi.get(self, "stopped_mode")

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

    @property
    @pulumi.getter(name="systemVolume")
    def system_volume(self) -> Optional[pulumi.Input['InstanceSystemVolumeArgs']]:
        """
        实例的系统卷。
        """
        return pulumi.get(self, "system_volume")

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

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

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

    @property
    @pulumi.getter(name="updatedAt")
    def updated_at(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的更新时间。
        """
        return pulumi.get(self, "updated_at")

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

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的自定义数据，默认为空。最终传入的UserData会被Base64转码。 -
        Linux实例：脚本内容不能超过16KB，且必须经过Base64编码。 -
        Windows实例：脚本内容不能超过8KB，且无需Base64编码。
        """
        return pulumi.get(self, "user_data")

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

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例所属的私有网络ID。您可以调用[DescribeVpcs](https://www.volcengine.com/docs/6563/66127)接口获取目标地域下的VPC信息。
        """
        return pulumi.get(self, "vpc_id")

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

    @property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例所在的可用区ID。
        """
        return pulumi.get(self, "zone_id")

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


@pulumi.type_token("bytepluscc:ecs/instance:Instance")
class Instance(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 affinity_group_size: Optional[pulumi.Input[builtins.int]] = None,
                 auto_renew: Optional[pulumi.Input[builtins.bool]] = None,
                 auto_renew_period: Optional[pulumi.Input[builtins.int]] = None,
                 cpu_max_frequency: Optional[pulumi.Input[builtins.float]] = None,
                 credit_specification: Optional[pulumi.Input[builtins.str]] = None,
                 deletion_protection: Optional[pulumi.Input[builtins.bool]] = None,
                 deployment_set_group_number: Optional[pulumi.Input[builtins.int]] = None,
                 deployment_set_id: Optional[pulumi.Input[builtins.str]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 eip_address: Optional[pulumi.Input[Union['InstanceEipAddressArgs', 'InstanceEipAddressArgsDict']]] = None,
                 hostname: Optional[pulumi.Input[builtins.str]] = None,
                 hpc_cluster_id: Optional[pulumi.Input[builtins.str]] = None,
                 image: Optional[pulumi.Input[Union['InstanceImageArgs', 'InstanceImageArgsDict']]] = None,
                 instance_charge_type: Optional[pulumi.Input[builtins.str]] = None,
                 instance_name: Optional[pulumi.Input[builtins.str]] = None,
                 instance_type: Optional[pulumi.Input[builtins.str]] = None,
                 key_pair: Optional[pulumi.Input[Union['InstanceKeyPairArgs', 'InstanceKeyPairArgsDict']]] = None,
                 operation_system: Optional[pulumi.Input[Union['InstanceOperationSystemArgs', 'InstanceOperationSystemArgsDict']]] = None,
                 password: Optional[pulumi.Input[builtins.str]] = None,
                 period: Optional[pulumi.Input[builtins.int]] = None,
                 period_unit: Optional[pulumi.Input[builtins.str]] = None,
                 placement: Optional[pulumi.Input[Union['InstancePlacementArgs', 'InstancePlacementArgsDict']]] = None,
                 primary_network_interface: Optional[pulumi.Input[Union['InstancePrimaryNetworkInterfaceArgs', 'InstancePrimaryNetworkInterfaceArgsDict']]] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 secondary_network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[Union['InstanceSecondaryNetworkInterfaceArgs', 'InstanceSecondaryNetworkInterfaceArgsDict']]]]] = None,
                 spot_price_limit: Optional[pulumi.Input[builtins.float]] = None,
                 spot_strategy: Optional[pulumi.Input[builtins.str]] = None,
                 status: Optional[pulumi.Input[builtins.str]] = None,
                 stopped_mode: Optional[pulumi.Input[builtins.str]] = None,
                 system_volume: Optional[pulumi.Input[Union['InstanceSystemVolumeArgs', 'InstanceSystemVolumeArgsDict']]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['InstanceTagArgs', 'InstanceTagArgsDict']]]]] = None,
                 user_data: Optional[pulumi.Input[builtins.str]] = None,
                 vpc_id: Optional[pulumi.Input[builtins.str]] = None,
                 zone_id: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        """
        表示一个弹性计算服务（ECS）的实例资源。

        ## Import

        ```sh
        $ pulumi import bytepluscc:ecs/instance:Instance example "instance_id"
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[builtins.int] affinity_group_size: 亲和组规格，取值：2。 **提示:** - 当前仅高性能计算NPU型hpcpci3实例（邀测）支持亲和组。
               - 该功能正在邀测中，如需试用，请联系客户经理申请。
        :param pulumi.Input[builtins.bool] auto_renew: 实例到期后是否自动续费，取值： - true：自动续费。 - false（默认）：不自动续费。
               **提示:** 仅当参数`InstanceChargeType`取值为`PrePaid`时生效。
        :param pulumi.Input[builtins.int] auto_renew_period: 每次自动续费的时长。 - 仅当参数`AutoRenew`取值为`True`时，该参数生效，默认值为1。 -
               `PeriodUnit`取值为`Month`时，该参数取值为1、2、3、6、12。
        :param pulumi.Input[builtins.float] cpu_max_frequency: 指定CPU最大频率，单位：GHz，取值范围：CPU的主频到睿频之间。 **提示:** -
               当前仅g3al、c3al、r3al、g4i、c4i、r4i、g4ie、c4ie、r4ie实例支持设置该参数。规格的主频/睿频及更多信息，请参见[实例规格介绍](https://www.volcengine.com/docs/6396/70840)。
               - 该功能正在邀测中，如需使用，请联系客户经理申请。
        :param pulumi.Input[builtins.str] credit_specification: 突发性能实例的运行模式，取值： - Standard：标准模式。 -
               Unlimited：无性能约束模式（暂不支持）。 **提示:** -
               仅当`InstanceTypeId`取值为ecs.t2系列，即突发性能实例时该参数生效。 -
               不传或传入空值时，突发性能实例默认为`Standard`标准模式。
        :param pulumi.Input[builtins.bool] deletion_protection: 实例删除保护属性，指定是否支持通过控制台或API删除实例。取值： -
               true：开启实例删除保护。 - false（默认）：关闭实例删除保护。
               开启实例删除保护后，在控制台或调用API删除实例时，会收到删除失败的错误码。如需删除，请先关闭实例删除保护。
        :param pulumi.Input[builtins.int] deployment_set_group_number: 当ECS实例要加入或调整的部署集策略为部署集组高可用策略（AvailabilityGroup）时，可以通过该参数指定实例在部署集中的分组号，取值范围：1～7。
        :param pulumi.Input[builtins.str] deployment_set_id: 实例需要加入的部署集ID。 -
               您可以调用[DescribeDeploymentSets](https://www.volcengine.com/docs/6396/70873)接口，查询已创建的部署集。
               - 关于部署集的更多信息，请参见[部署集](https://www.volcengine.com/docs/6396/70871)。
        :param pulumi.Input[builtins.str] description: 实例的描述，默认为空字符串。 - 必须以字母或中文开头。 -
               只能包含中文、字母、数字、点号“.”、空格、下划线“_”、中划线“-”、等号“=”、英文逗号“,”、中文逗号“，”和中文句号“。”
               - 长度限制在255个字符以内。
        :param pulumi.Input[Union['InstanceEipAddressArgs', 'InstanceEipAddressArgsDict']] eip_address: 实例的EIP地址。
        :param pulumi.Input[builtins.str] hostname: 实例主机名，即实例操作系统内部的计算机名。 - Linux实例： -
               允许使用字母、数字、点号“.”或中划线“-”。 -
               不能以中划线、点号开头或结尾，且不能连续使用中划线和点号。 -
               Linux系统长度限制在2～63个字符之间。 - Windows实例： -
               允许使用字母、数字或中划线“-”，不能完全是数字。 -
               不能以中划线开头或结尾，且不能连续使用中划线。 -
               Windows系统长度限制在2～15个字符之间。
        :param pulumi.Input[builtins.str] hpc_cluster_id: 实例所属的高性能计算集群ID。 **提示:**
               仅当创建高性能计算GPU型实例时，该参数生效且为必填项。
        :param pulumi.Input[Union['InstanceImageArgs', 'InstanceImageArgsDict']] image: 实例的镜像。
        :param pulumi.Input[builtins.str] instance_charge_type: 实例和云盘的计费类型，取值： - PostPaid：按量计费。 -
               PrePaid：包年包月。请确认您的账号支持余额支付或者信控支付，否则将返回InvalidInstanceChargeType的错误提示。
        :param pulumi.Input[builtins.str] instance_name: 实例的名称。 - 以字母或中文开头。 -
               只能包含中文、字母、数字、下划线“_”、中划线“-”和点号“.”。 -
               长度限制为1～128个字符。
        :param pulumi.Input[builtins.str] instance_type: 实例规格。 -
               产品选型：您可以参考[实例规格介绍](https://www.volcengine.com/docs/6396/70840)或者调用[DescribeInstanceTypes](https://www.volcengine.com/docs/6396/92769)查看实例规格的性能数据，也可以参考[实例选型最佳实践](https://www.volcengine.com/docs/6396/74174)了解如何选择实例规格。
               -
               查询库存：您可以调用[DescribeAvailableResource](https://www.volcengine.com/docs/6396/76279)查询可用区中计算资源的库存信息。
        :param pulumi.Input[Union['InstanceKeyPairArgs', 'InstanceKeyPairArgsDict']] key_pair: 实例的密钥对名称。
        :param pulumi.Input[Union['InstanceOperationSystemArgs', 'InstanceOperationSystemArgsDict']] operation_system: 实例的操作系统类型。
        :param pulumi.Input[builtins.str] password: 实例的密码。
        :param pulumi.Input[builtins.int] period: 购买资源的时长（N）。 -
               `PeriodUnit`为`Month`（默认）时，取值：1、2、3、4、5、6、7、8、9、12、24、36、48、60。 -
               `PeriodUnit`为`Year`时，取值：1、2、3、4、5。 **提示:**
               仅当`InstanceChargeType`取值为`PrePaid`时生效，且为必填。
        :param pulumi.Input[builtins.str] period_unit: 购买资源的时长单位。取值： - Month（默认）：月。 - Year：年。 **提示:**
               仅当`InstanceChargeType`取值为`PrePaid`时生效。
        :param pulumi.Input[Union['InstancePlacementArgs', 'InstancePlacementArgsDict']] placement: 实例的部署信息。
        :param pulumi.Input[Union['InstancePrimaryNetworkInterfaceArgs', 'InstancePrimaryNetworkInterfaceArgsDict']] primary_network_interface: 实例的主网卡。
        :param pulumi.Input[builtins.str] project_name: 实例所属的项目名称。
        :param pulumi.Input[builtins.float] spot_price_limit: 竞价实例的每小时最高价格。 - 支持小数点后3位的精度。 -
               仅当`SpotStrategy`取值为`SpotWithPriceLimit`时生效。 -
               当`SpotStrategy`取值为`SpotWithPriceLimit`时，您可以自定义设置竞价实例的价格上限，当市场价格高于您的出价时，实例会被释放；当`SpotStrategy`取值为`SpotAsPriceGo`时，则代表您接受系统自动出价，跟随当前市场实际价格，此时无需填写该参数。
        :param pulumi.Input[builtins.str] spot_strategy: 竞价策略。取值： - NoSpot（默认）：非竞价实例。 -
               SpotWithPriceLimit：设置价格上限的竞ga价实例。 -
               SpotAsPriceGo：系统自动出价，跟随当前市场实际价格的竞价实例。
        :param pulumi.Input[builtins.str] status: 实例的状态。实例的状态，取值： CREATING：创建中 RUNNING：运行中 STOPPING：停止中
               STOPPED：已停止 REBOOTING: 重启中 STARTING：启动中 REBUILDING：重装中 RESIZING：更配中 ERROR：错误
               DELETING：删除中。
        :param pulumi.Input[builtins.str] stopped_mode: StoppedMode string 可选 示例值：KeepCharging 停机模式，取值：
               KeepCharging：普通停机模式。停机后实例及其相关资源仍被保留且持续计费，费用和停机前一致。
               StopCharging：节省停机模式。停机后实例的计算资源（vCPU、GPU和内存）将被回收且停止计费，所挂载的云盘、镜像、公网IP仍被保留且持续计费。
               有关节省停机的启用条件，请参见按量计费节省停机模式说明。
               默认值：若您在云服务器控制台开启了默认节省停机模式，并且符合启用条件，则默认值为StopCharging。否则，默认值为KeepCharging。
        :param pulumi.Input[Union['InstanceSystemVolumeArgs', 'InstanceSystemVolumeArgsDict']] system_volume: 实例的系统卷。
        :param pulumi.Input[builtins.str] user_data: 实例的自定义数据，默认为空。最终传入的UserData会被Base64转码。 -
               Linux实例：脚本内容不能超过16KB，且必须经过Base64编码。 -
               Windows实例：脚本内容不能超过8KB，且无需Base64编码。
        :param pulumi.Input[builtins.str] vpc_id: 实例所属的私有网络ID。您可以调用[DescribeVpcs](https://www.volcengine.com/docs/6563/66127)接口获取目标地域下的VPC信息。
        :param pulumi.Input[builtins.str] zone_id: 实例所在的可用区ID。
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: InstanceArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        表示一个弹性计算服务（ECS）的实例资源。

        ## Import

        ```sh
        $ pulumi import bytepluscc:ecs/instance:Instance example "instance_id"
        ```

        :param str resource_name: The name of the resource.
        :param InstanceArgs 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(InstanceArgs, 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,
                 affinity_group_size: Optional[pulumi.Input[builtins.int]] = None,
                 auto_renew: Optional[pulumi.Input[builtins.bool]] = None,
                 auto_renew_period: Optional[pulumi.Input[builtins.int]] = None,
                 cpu_max_frequency: Optional[pulumi.Input[builtins.float]] = None,
                 credit_specification: Optional[pulumi.Input[builtins.str]] = None,
                 deletion_protection: Optional[pulumi.Input[builtins.bool]] = None,
                 deployment_set_group_number: Optional[pulumi.Input[builtins.int]] = None,
                 deployment_set_id: Optional[pulumi.Input[builtins.str]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 eip_address: Optional[pulumi.Input[Union['InstanceEipAddressArgs', 'InstanceEipAddressArgsDict']]] = None,
                 hostname: Optional[pulumi.Input[builtins.str]] = None,
                 hpc_cluster_id: Optional[pulumi.Input[builtins.str]] = None,
                 image: Optional[pulumi.Input[Union['InstanceImageArgs', 'InstanceImageArgsDict']]] = None,
                 instance_charge_type: Optional[pulumi.Input[builtins.str]] = None,
                 instance_name: Optional[pulumi.Input[builtins.str]] = None,
                 instance_type: Optional[pulumi.Input[builtins.str]] = None,
                 key_pair: Optional[pulumi.Input[Union['InstanceKeyPairArgs', 'InstanceKeyPairArgsDict']]] = None,
                 operation_system: Optional[pulumi.Input[Union['InstanceOperationSystemArgs', 'InstanceOperationSystemArgsDict']]] = None,
                 password: Optional[pulumi.Input[builtins.str]] = None,
                 period: Optional[pulumi.Input[builtins.int]] = None,
                 period_unit: Optional[pulumi.Input[builtins.str]] = None,
                 placement: Optional[pulumi.Input[Union['InstancePlacementArgs', 'InstancePlacementArgsDict']]] = None,
                 primary_network_interface: Optional[pulumi.Input[Union['InstancePrimaryNetworkInterfaceArgs', 'InstancePrimaryNetworkInterfaceArgsDict']]] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 secondary_network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[Union['InstanceSecondaryNetworkInterfaceArgs', 'InstanceSecondaryNetworkInterfaceArgsDict']]]]] = None,
                 spot_price_limit: Optional[pulumi.Input[builtins.float]] = None,
                 spot_strategy: Optional[pulumi.Input[builtins.str]] = None,
                 status: Optional[pulumi.Input[builtins.str]] = None,
                 stopped_mode: Optional[pulumi.Input[builtins.str]] = None,
                 system_volume: Optional[pulumi.Input[Union['InstanceSystemVolumeArgs', 'InstanceSystemVolumeArgsDict']]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['InstanceTagArgs', 'InstanceTagArgsDict']]]]] = None,
                 user_data: Optional[pulumi.Input[builtins.str]] = None,
                 vpc_id: Optional[pulumi.Input[builtins.str]] = None,
                 zone_id: Optional[pulumi.Input[builtins.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__ = InstanceArgs.__new__(InstanceArgs)

            __props__.__dict__["affinity_group_size"] = affinity_group_size
            __props__.__dict__["auto_renew"] = auto_renew
            __props__.__dict__["auto_renew_period"] = auto_renew_period
            __props__.__dict__["cpu_max_frequency"] = cpu_max_frequency
            __props__.__dict__["credit_specification"] = credit_specification
            __props__.__dict__["deletion_protection"] = deletion_protection
            __props__.__dict__["deployment_set_group_number"] = deployment_set_group_number
            __props__.__dict__["deployment_set_id"] = deployment_set_id
            __props__.__dict__["description"] = description
            __props__.__dict__["eip_address"] = eip_address
            __props__.__dict__["hostname"] = hostname
            __props__.__dict__["hpc_cluster_id"] = hpc_cluster_id
            if image is None and not opts.urn:
                raise TypeError("Missing required property 'image'")
            __props__.__dict__["image"] = image
            __props__.__dict__["instance_charge_type"] = instance_charge_type
            if instance_name is None and not opts.urn:
                raise TypeError("Missing required property 'instance_name'")
            __props__.__dict__["instance_name"] = instance_name
            if instance_type is None and not opts.urn:
                raise TypeError("Missing required property 'instance_type'")
            __props__.__dict__["instance_type"] = instance_type
            __props__.__dict__["key_pair"] = key_pair
            __props__.__dict__["operation_system"] = operation_system
            __props__.__dict__["password"] = password
            __props__.__dict__["period"] = period
            __props__.__dict__["period_unit"] = period_unit
            __props__.__dict__["placement"] = placement
            if primary_network_interface is None and not opts.urn:
                raise TypeError("Missing required property 'primary_network_interface'")
            __props__.__dict__["primary_network_interface"] = primary_network_interface
            __props__.__dict__["project_name"] = project_name
            __props__.__dict__["secondary_network_interfaces"] = secondary_network_interfaces
            __props__.__dict__["spot_price_limit"] = spot_price_limit
            __props__.__dict__["spot_strategy"] = spot_strategy
            __props__.__dict__["status"] = status
            __props__.__dict__["stopped_mode"] = stopped_mode
            if system_volume is None and not opts.urn:
                raise TypeError("Missing required property 'system_volume'")
            __props__.__dict__["system_volume"] = system_volume
            __props__.__dict__["tags"] = tags
            __props__.__dict__["user_data"] = user_data
            __props__.__dict__["vpc_id"] = vpc_id
            if zone_id is None and not opts.urn:
                raise TypeError("Missing required property 'zone_id'")
            __props__.__dict__["zone_id"] = zone_id
            __props__.__dict__["cpu_memory"] = None
            __props__.__dict__["created_at"] = None
            __props__.__dict__["expired_at"] = None
            __props__.__dict__["instance_id"] = None
            __props__.__dict__["updated_at"] = None
        super(Instance, __self__).__init__(
            'bytepluscc:ecs/instance:Instance',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            affinity_group_size: Optional[pulumi.Input[builtins.int]] = None,
            auto_renew: Optional[pulumi.Input[builtins.bool]] = None,
            auto_renew_period: Optional[pulumi.Input[builtins.int]] = None,
            cpu_max_frequency: Optional[pulumi.Input[builtins.float]] = None,
            cpu_memory: Optional[pulumi.Input[Union['InstanceCpuMemoryArgs', 'InstanceCpuMemoryArgsDict']]] = None,
            created_at: Optional[pulumi.Input[builtins.str]] = None,
            credit_specification: Optional[pulumi.Input[builtins.str]] = None,
            deletion_protection: Optional[pulumi.Input[builtins.bool]] = None,
            deployment_set_group_number: Optional[pulumi.Input[builtins.int]] = None,
            deployment_set_id: Optional[pulumi.Input[builtins.str]] = None,
            description: Optional[pulumi.Input[builtins.str]] = None,
            eip_address: Optional[pulumi.Input[Union['InstanceEipAddressArgs', 'InstanceEipAddressArgsDict']]] = None,
            expired_at: Optional[pulumi.Input[builtins.str]] = None,
            hostname: Optional[pulumi.Input[builtins.str]] = None,
            hpc_cluster_id: Optional[pulumi.Input[builtins.str]] = None,
            image: Optional[pulumi.Input[Union['InstanceImageArgs', 'InstanceImageArgsDict']]] = None,
            instance_charge_type: Optional[pulumi.Input[builtins.str]] = None,
            instance_id: Optional[pulumi.Input[builtins.str]] = None,
            instance_name: Optional[pulumi.Input[builtins.str]] = None,
            instance_type: Optional[pulumi.Input[builtins.str]] = None,
            key_pair: Optional[pulumi.Input[Union['InstanceKeyPairArgs', 'InstanceKeyPairArgsDict']]] = None,
            operation_system: Optional[pulumi.Input[Union['InstanceOperationSystemArgs', 'InstanceOperationSystemArgsDict']]] = None,
            password: Optional[pulumi.Input[builtins.str]] = None,
            period: Optional[pulumi.Input[builtins.int]] = None,
            period_unit: Optional[pulumi.Input[builtins.str]] = None,
            placement: Optional[pulumi.Input[Union['InstancePlacementArgs', 'InstancePlacementArgsDict']]] = None,
            primary_network_interface: Optional[pulumi.Input[Union['InstancePrimaryNetworkInterfaceArgs', 'InstancePrimaryNetworkInterfaceArgsDict']]] = None,
            project_name: Optional[pulumi.Input[builtins.str]] = None,
            secondary_network_interfaces: Optional[pulumi.Input[Sequence[pulumi.Input[Union['InstanceSecondaryNetworkInterfaceArgs', 'InstanceSecondaryNetworkInterfaceArgsDict']]]]] = None,
            spot_price_limit: Optional[pulumi.Input[builtins.float]] = None,
            spot_strategy: Optional[pulumi.Input[builtins.str]] = None,
            status: Optional[pulumi.Input[builtins.str]] = None,
            stopped_mode: Optional[pulumi.Input[builtins.str]] = None,
            system_volume: Optional[pulumi.Input[Union['InstanceSystemVolumeArgs', 'InstanceSystemVolumeArgsDict']]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['InstanceTagArgs', 'InstanceTagArgsDict']]]]] = None,
            updated_at: Optional[pulumi.Input[builtins.str]] = None,
            user_data: Optional[pulumi.Input[builtins.str]] = None,
            vpc_id: Optional[pulumi.Input[builtins.str]] = None,
            zone_id: Optional[pulumi.Input[builtins.str]] = None) -> 'Instance':
        """
        Get an existing Instance 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.
        :param pulumi.Input[builtins.int] affinity_group_size: 亲和组规格，取值：2。 **提示:** - 当前仅高性能计算NPU型hpcpci3实例（邀测）支持亲和组。
               - 该功能正在邀测中，如需试用，请联系客户经理申请。
        :param pulumi.Input[builtins.bool] auto_renew: 实例到期后是否自动续费，取值： - true：自动续费。 - false（默认）：不自动续费。
               **提示:** 仅当参数`InstanceChargeType`取值为`PrePaid`时生效。
        :param pulumi.Input[builtins.int] auto_renew_period: 每次自动续费的时长。 - 仅当参数`AutoRenew`取值为`True`时，该参数生效，默认值为1。 -
               `PeriodUnit`取值为`Month`时，该参数取值为1、2、3、6、12。
        :param pulumi.Input[builtins.float] cpu_max_frequency: 指定CPU最大频率，单位：GHz，取值范围：CPU的主频到睿频之间。 **提示:** -
               当前仅g3al、c3al、r3al、g4i、c4i、r4i、g4ie、c4ie、r4ie实例支持设置该参数。规格的主频/睿频及更多信息，请参见[实例规格介绍](https://www.volcengine.com/docs/6396/70840)。
               - 该功能正在邀测中，如需使用，请联系客户经理申请。
        :param pulumi.Input[Union['InstanceCpuMemoryArgs', 'InstanceCpuMemoryArgsDict']] cpu_memory: 实例的CPU选项。
        :param pulumi.Input[builtins.str] created_at: 实例的创建时间。
        :param pulumi.Input[builtins.str] credit_specification: 突发性能实例的运行模式，取值： - Standard：标准模式。 -
               Unlimited：无性能约束模式（暂不支持）。 **提示:** -
               仅当`InstanceTypeId`取值为ecs.t2系列，即突发性能实例时该参数生效。 -
               不传或传入空值时，突发性能实例默认为`Standard`标准模式。
        :param pulumi.Input[builtins.bool] deletion_protection: 实例删除保护属性，指定是否支持通过控制台或API删除实例。取值： -
               true：开启实例删除保护。 - false（默认）：关闭实例删除保护。
               开启实例删除保护后，在控制台或调用API删除实例时，会收到删除失败的错误码。如需删除，请先关闭实例删除保护。
        :param pulumi.Input[builtins.int] deployment_set_group_number: 当ECS实例要加入或调整的部署集策略为部署集组高可用策略（AvailabilityGroup）时，可以通过该参数指定实例在部署集中的分组号，取值范围：1～7。
        :param pulumi.Input[builtins.str] deployment_set_id: 实例需要加入的部署集ID。 -
               您可以调用[DescribeDeploymentSets](https://www.volcengine.com/docs/6396/70873)接口，查询已创建的部署集。
               - 关于部署集的更多信息，请参见[部署集](https://www.volcengine.com/docs/6396/70871)。
        :param pulumi.Input[builtins.str] description: 实例的描述，默认为空字符串。 - 必须以字母或中文开头。 -
               只能包含中文、字母、数字、点号“.”、空格、下划线“_”、中划线“-”、等号“=”、英文逗号“,”、中文逗号“，”和中文句号“。”
               - 长度限制在255个字符以内。
        :param pulumi.Input[Union['InstanceEipAddressArgs', 'InstanceEipAddressArgsDict']] eip_address: 实例的EIP地址。
        :param pulumi.Input[builtins.str] expired_at: 实例的过期时间。
        :param pulumi.Input[builtins.str] hostname: 实例主机名，即实例操作系统内部的计算机名。 - Linux实例： -
               允许使用字母、数字、点号“.”或中划线“-”。 -
               不能以中划线、点号开头或结尾，且不能连续使用中划线和点号。 -
               Linux系统长度限制在2～63个字符之间。 - Windows实例： -
               允许使用字母、数字或中划线“-”，不能完全是数字。 -
               不能以中划线开头或结尾，且不能连续使用中划线。 -
               Windows系统长度限制在2～15个字符之间。
        :param pulumi.Input[builtins.str] hpc_cluster_id: 实例所属的高性能计算集群ID。 **提示:**
               仅当创建高性能计算GPU型实例时，该参数生效且为必填项。
        :param pulumi.Input[Union['InstanceImageArgs', 'InstanceImageArgsDict']] image: 实例的镜像。
        :param pulumi.Input[builtins.str] instance_charge_type: 实例和云盘的计费类型，取值： - PostPaid：按量计费。 -
               PrePaid：包年包月。请确认您的账号支持余额支付或者信控支付，否则将返回InvalidInstanceChargeType的错误提示。
        :param pulumi.Input[builtins.str] instance_id: ECS实例的ID。
        :param pulumi.Input[builtins.str] instance_name: 实例的名称。 - 以字母或中文开头。 -
               只能包含中文、字母、数字、下划线“_”、中划线“-”和点号“.”。 -
               长度限制为1～128个字符。
        :param pulumi.Input[builtins.str] instance_type: 实例规格。 -
               产品选型：您可以参考[实例规格介绍](https://www.volcengine.com/docs/6396/70840)或者调用[DescribeInstanceTypes](https://www.volcengine.com/docs/6396/92769)查看实例规格的性能数据，也可以参考[实例选型最佳实践](https://www.volcengine.com/docs/6396/74174)了解如何选择实例规格。
               -
               查询库存：您可以调用[DescribeAvailableResource](https://www.volcengine.com/docs/6396/76279)查询可用区中计算资源的库存信息。
        :param pulumi.Input[Union['InstanceKeyPairArgs', 'InstanceKeyPairArgsDict']] key_pair: 实例的密钥对名称。
        :param pulumi.Input[Union['InstanceOperationSystemArgs', 'InstanceOperationSystemArgsDict']] operation_system: 实例的操作系统类型。
        :param pulumi.Input[builtins.str] password: 实例的密码。
        :param pulumi.Input[builtins.int] period: 购买资源的时长（N）。 -
               `PeriodUnit`为`Month`（默认）时，取值：1、2、3、4、5、6、7、8、9、12、24、36、48、60。 -
               `PeriodUnit`为`Year`时，取值：1、2、3、4、5。 **提示:**
               仅当`InstanceChargeType`取值为`PrePaid`时生效，且为必填。
        :param pulumi.Input[builtins.str] period_unit: 购买资源的时长单位。取值： - Month（默认）：月。 - Year：年。 **提示:**
               仅当`InstanceChargeType`取值为`PrePaid`时生效。
        :param pulumi.Input[Union['InstancePlacementArgs', 'InstancePlacementArgsDict']] placement: 实例的部署信息。
        :param pulumi.Input[Union['InstancePrimaryNetworkInterfaceArgs', 'InstancePrimaryNetworkInterfaceArgsDict']] primary_network_interface: 实例的主网卡。
        :param pulumi.Input[builtins.str] project_name: 实例所属的项目名称。
        :param pulumi.Input[builtins.float] spot_price_limit: 竞价实例的每小时最高价格。 - 支持小数点后3位的精度。 -
               仅当`SpotStrategy`取值为`SpotWithPriceLimit`时生效。 -
               当`SpotStrategy`取值为`SpotWithPriceLimit`时，您可以自定义设置竞价实例的价格上限，当市场价格高于您的出价时，实例会被释放；当`SpotStrategy`取值为`SpotAsPriceGo`时，则代表您接受系统自动出价，跟随当前市场实际价格，此时无需填写该参数。
        :param pulumi.Input[builtins.str] spot_strategy: 竞价策略。取值： - NoSpot（默认）：非竞价实例。 -
               SpotWithPriceLimit：设置价格上限的竞ga价实例。 -
               SpotAsPriceGo：系统自动出价，跟随当前市场实际价格的竞价实例。
        :param pulumi.Input[builtins.str] status: 实例的状态。实例的状态，取值： CREATING：创建中 RUNNING：运行中 STOPPING：停止中
               STOPPED：已停止 REBOOTING: 重启中 STARTING：启动中 REBUILDING：重装中 RESIZING：更配中 ERROR：错误
               DELETING：删除中。
        :param pulumi.Input[builtins.str] stopped_mode: StoppedMode string 可选 示例值：KeepCharging 停机模式，取值：
               KeepCharging：普通停机模式。停机后实例及其相关资源仍被保留且持续计费，费用和停机前一致。
               StopCharging：节省停机模式。停机后实例的计算资源（vCPU、GPU和内存）将被回收且停止计费，所挂载的云盘、镜像、公网IP仍被保留且持续计费。
               有关节省停机的启用条件，请参见按量计费节省停机模式说明。
               默认值：若您在云服务器控制台开启了默认节省停机模式，并且符合启用条件，则默认值为StopCharging。否则，默认值为KeepCharging。
        :param pulumi.Input[Union['InstanceSystemVolumeArgs', 'InstanceSystemVolumeArgsDict']] system_volume: 实例的系统卷。
        :param pulumi.Input[builtins.str] updated_at: 实例的更新时间。
        :param pulumi.Input[builtins.str] user_data: 实例的自定义数据，默认为空。最终传入的UserData会被Base64转码。 -
               Linux实例：脚本内容不能超过16KB，且必须经过Base64编码。 -
               Windows实例：脚本内容不能超过8KB，且无需Base64编码。
        :param pulumi.Input[builtins.str] vpc_id: 实例所属的私有网络ID。您可以调用[DescribeVpcs](https://www.volcengine.com/docs/6563/66127)接口获取目标地域下的VPC信息。
        :param pulumi.Input[builtins.str] zone_id: 实例所在的可用区ID。
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _InstanceState.__new__(_InstanceState)

        __props__.__dict__["affinity_group_size"] = affinity_group_size
        __props__.__dict__["auto_renew"] = auto_renew
        __props__.__dict__["auto_renew_period"] = auto_renew_period
        __props__.__dict__["cpu_max_frequency"] = cpu_max_frequency
        __props__.__dict__["cpu_memory"] = cpu_memory
        __props__.__dict__["created_at"] = created_at
        __props__.__dict__["credit_specification"] = credit_specification
        __props__.__dict__["deletion_protection"] = deletion_protection
        __props__.__dict__["deployment_set_group_number"] = deployment_set_group_number
        __props__.__dict__["deployment_set_id"] = deployment_set_id
        __props__.__dict__["description"] = description
        __props__.__dict__["eip_address"] = eip_address
        __props__.__dict__["expired_at"] = expired_at
        __props__.__dict__["hostname"] = hostname
        __props__.__dict__["hpc_cluster_id"] = hpc_cluster_id
        __props__.__dict__["image"] = image
        __props__.__dict__["instance_charge_type"] = instance_charge_type
        __props__.__dict__["instance_id"] = instance_id
        __props__.__dict__["instance_name"] = instance_name
        __props__.__dict__["instance_type"] = instance_type
        __props__.__dict__["key_pair"] = key_pair
        __props__.__dict__["operation_system"] = operation_system
        __props__.__dict__["password"] = password
        __props__.__dict__["period"] = period
        __props__.__dict__["period_unit"] = period_unit
        __props__.__dict__["placement"] = placement
        __props__.__dict__["primary_network_interface"] = primary_network_interface
        __props__.__dict__["project_name"] = project_name
        __props__.__dict__["secondary_network_interfaces"] = secondary_network_interfaces
        __props__.__dict__["spot_price_limit"] = spot_price_limit
        __props__.__dict__["spot_strategy"] = spot_strategy
        __props__.__dict__["status"] = status
        __props__.__dict__["stopped_mode"] = stopped_mode
        __props__.__dict__["system_volume"] = system_volume
        __props__.__dict__["tags"] = tags
        __props__.__dict__["updated_at"] = updated_at
        __props__.__dict__["user_data"] = user_data
        __props__.__dict__["vpc_id"] = vpc_id
        __props__.__dict__["zone_id"] = zone_id
        return Instance(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="affinityGroupSize")
    def affinity_group_size(self) -> pulumi.Output[builtins.int]:
        """
        亲和组规格，取值：2。 **提示:** - 当前仅高性能计算NPU型hpcpci3实例（邀测）支持亲和组。
        - 该功能正在邀测中，如需试用，请联系客户经理申请。
        """
        return pulumi.get(self, "affinity_group_size")

    @property
    @pulumi.getter(name="autoRenew")
    def auto_renew(self) -> pulumi.Output[builtins.bool]:
        """
        实例到期后是否自动续费，取值： - true：自动续费。 - false（默认）：不自动续费。
        **提示:** 仅当参数`InstanceChargeType`取值为`PrePaid`时生效。
        """
        return pulumi.get(self, "auto_renew")

    @property
    @pulumi.getter(name="autoRenewPeriod")
    def auto_renew_period(self) -> pulumi.Output[builtins.int]:
        """
        每次自动续费的时长。 - 仅当参数`AutoRenew`取值为`True`时，该参数生效，默认值为1。 -
        `PeriodUnit`取值为`Month`时，该参数取值为1、2、3、6、12。
        """
        return pulumi.get(self, "auto_renew_period")

    @property
    @pulumi.getter(name="cpuMaxFrequency")
    def cpu_max_frequency(self) -> pulumi.Output[builtins.float]:
        """
        指定CPU最大频率，单位：GHz，取值范围：CPU的主频到睿频之间。 **提示:** -
        当前仅g3al、c3al、r3al、g4i、c4i、r4i、g4ie、c4ie、r4ie实例支持设置该参数。规格的主频/睿频及更多信息，请参见[实例规格介绍](https://www.volcengine.com/docs/6396/70840)。
        - 该功能正在邀测中，如需使用，请联系客户经理申请。
        """
        return pulumi.get(self, "cpu_max_frequency")

    @property
    @pulumi.getter(name="cpuMemory")
    def cpu_memory(self) -> pulumi.Output['outputs.InstanceCpuMemory']:
        """
        实例的CPU选项。
        """
        return pulumi.get(self, "cpu_memory")

    @property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> pulumi.Output[builtins.str]:
        """
        实例的创建时间。
        """
        return pulumi.get(self, "created_at")

    @property
    @pulumi.getter(name="creditSpecification")
    def credit_specification(self) -> pulumi.Output[builtins.str]:
        """
        突发性能实例的运行模式，取值： - Standard：标准模式。 -
        Unlimited：无性能约束模式（暂不支持）。 **提示:** -
        仅当`InstanceTypeId`取值为ecs.t2系列，即突发性能实例时该参数生效。 -
        不传或传入空值时，突发性能实例默认为`Standard`标准模式。
        """
        return pulumi.get(self, "credit_specification")

    @property
    @pulumi.getter(name="deletionProtection")
    def deletion_protection(self) -> pulumi.Output[builtins.bool]:
        """
        实例删除保护属性，指定是否支持通过控制台或API删除实例。取值： -
        true：开启实例删除保护。 - false（默认）：关闭实例删除保护。
        开启实例删除保护后，在控制台或调用API删除实例时，会收到删除失败的错误码。如需删除，请先关闭实例删除保护。
        """
        return pulumi.get(self, "deletion_protection")

    @property
    @pulumi.getter(name="deploymentSetGroupNumber")
    def deployment_set_group_number(self) -> pulumi.Output[builtins.int]:
        """
        当ECS实例要加入或调整的部署集策略为部署集组高可用策略（AvailabilityGroup）时，可以通过该参数指定实例在部署集中的分组号，取值范围：1～7。
        """
        return pulumi.get(self, "deployment_set_group_number")

    @property
    @pulumi.getter(name="deploymentSetId")
    def deployment_set_id(self) -> pulumi.Output[builtins.str]:
        """
        实例需要加入的部署集ID。 -
        您可以调用[DescribeDeploymentSets](https://www.volcengine.com/docs/6396/70873)接口，查询已创建的部署集。
        - 关于部署集的更多信息，请参见[部署集](https://www.volcengine.com/docs/6396/70871)。
        """
        return pulumi.get(self, "deployment_set_id")

    @property
    @pulumi.getter
    def description(self) -> pulumi.Output[builtins.str]:
        """
        实例的描述，默认为空字符串。 - 必须以字母或中文开头。 -
        只能包含中文、字母、数字、点号“.”、空格、下划线“_”、中划线“-”、等号“=”、英文逗号“,”、中文逗号“，”和中文句号“。”
        - 长度限制在255个字符以内。
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="eipAddress")
    def eip_address(self) -> pulumi.Output['outputs.InstanceEipAddress']:
        """
        实例的EIP地址。
        """
        return pulumi.get(self, "eip_address")

    @property
    @pulumi.getter(name="expiredAt")
    def expired_at(self) -> pulumi.Output[builtins.str]:
        """
        实例的过期时间。
        """
        return pulumi.get(self, "expired_at")

    @property
    @pulumi.getter
    def hostname(self) -> pulumi.Output[builtins.str]:
        """
        实例主机名，即实例操作系统内部的计算机名。 - Linux实例： -
        允许使用字母、数字、点号“.”或中划线“-”。 -
        不能以中划线、点号开头或结尾，且不能连续使用中划线和点号。 -
        Linux系统长度限制在2～63个字符之间。 - Windows实例： -
        允许使用字母、数字或中划线“-”，不能完全是数字。 -
        不能以中划线开头或结尾，且不能连续使用中划线。 -
        Windows系统长度限制在2～15个字符之间。
        """
        return pulumi.get(self, "hostname")

    @property
    @pulumi.getter(name="hpcClusterId")
    def hpc_cluster_id(self) -> pulumi.Output[builtins.str]:
        """
        实例所属的高性能计算集群ID。 **提示:**
        仅当创建高性能计算GPU型实例时，该参数生效且为必填项。
        """
        return pulumi.get(self, "hpc_cluster_id")

    @property
    @pulumi.getter
    def image(self) -> pulumi.Output['outputs.InstanceImage']:
        """
        实例的镜像。
        """
        return pulumi.get(self, "image")

    @property
    @pulumi.getter(name="instanceChargeType")
    def instance_charge_type(self) -> pulumi.Output[builtins.str]:
        """
        实例和云盘的计费类型，取值： - PostPaid：按量计费。 -
        PrePaid：包年包月。请确认您的账号支持余额支付或者信控支付，否则将返回InvalidInstanceChargeType的错误提示。
        """
        return pulumi.get(self, "instance_charge_type")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> pulumi.Output[builtins.str]:
        """
        ECS实例的ID。
        """
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="instanceName")
    def instance_name(self) -> pulumi.Output[builtins.str]:
        """
        实例的名称。 - 以字母或中文开头。 -
        只能包含中文、字母、数字、下划线“_”、中划线“-”和点号“.”。 -
        长度限制为1～128个字符。
        """
        return pulumi.get(self, "instance_name")

    @property
    @pulumi.getter(name="instanceType")
    def instance_type(self) -> pulumi.Output[builtins.str]:
        """
        实例规格。 -
        产品选型：您可以参考[实例规格介绍](https://www.volcengine.com/docs/6396/70840)或者调用[DescribeInstanceTypes](https://www.volcengine.com/docs/6396/92769)查看实例规格的性能数据，也可以参考[实例选型最佳实践](https://www.volcengine.com/docs/6396/74174)了解如何选择实例规格。
        -
        查询库存：您可以调用[DescribeAvailableResource](https://www.volcengine.com/docs/6396/76279)查询可用区中计算资源的库存信息。
        """
        return pulumi.get(self, "instance_type")

    @property
    @pulumi.getter(name="keyPair")
    def key_pair(self) -> pulumi.Output['outputs.InstanceKeyPair']:
        """
        实例的密钥对名称。
        """
        return pulumi.get(self, "key_pair")

    @property
    @pulumi.getter(name="operationSystem")
    def operation_system(self) -> pulumi.Output['outputs.InstanceOperationSystem']:
        """
        实例的操作系统类型。
        """
        return pulumi.get(self, "operation_system")

    @property
    @pulumi.getter
    def password(self) -> pulumi.Output[builtins.str]:
        """
        实例的密码。
        """
        return pulumi.get(self, "password")

    @property
    @pulumi.getter
    def period(self) -> pulumi.Output[builtins.int]:
        """
        购买资源的时长（N）。 -
        `PeriodUnit`为`Month`（默认）时，取值：1、2、3、4、5、6、7、8、9、12、24、36、48、60。 -
        `PeriodUnit`为`Year`时，取值：1、2、3、4、5。 **提示:**
        仅当`InstanceChargeType`取值为`PrePaid`时生效，且为必填。
        """
        return pulumi.get(self, "period")

    @property
    @pulumi.getter(name="periodUnit")
    def period_unit(self) -> pulumi.Output[builtins.str]:
        """
        购买资源的时长单位。取值： - Month（默认）：月。 - Year：年。 **提示:**
        仅当`InstanceChargeType`取值为`PrePaid`时生效。
        """
        return pulumi.get(self, "period_unit")

    @property
    @pulumi.getter
    def placement(self) -> pulumi.Output['outputs.InstancePlacement']:
        """
        实例的部署信息。
        """
        return pulumi.get(self, "placement")

    @property
    @pulumi.getter(name="primaryNetworkInterface")
    def primary_network_interface(self) -> pulumi.Output['outputs.InstancePrimaryNetworkInterface']:
        """
        实例的主网卡。
        """
        return pulumi.get(self, "primary_network_interface")

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> pulumi.Output[builtins.str]:
        """
        实例所属的项目名称。
        """
        return pulumi.get(self, "project_name")

    @property
    @pulumi.getter(name="secondaryNetworkInterfaces")
    def secondary_network_interfaces(self) -> pulumi.Output[Sequence['outputs.InstanceSecondaryNetworkInterface']]:
        return pulumi.get(self, "secondary_network_interfaces")

    @property
    @pulumi.getter(name="spotPriceLimit")
    def spot_price_limit(self) -> pulumi.Output[builtins.float]:
        """
        竞价实例的每小时最高价格。 - 支持小数点后3位的精度。 -
        仅当`SpotStrategy`取值为`SpotWithPriceLimit`时生效。 -
        当`SpotStrategy`取值为`SpotWithPriceLimit`时，您可以自定义设置竞价实例的价格上限，当市场价格高于您的出价时，实例会被释放；当`SpotStrategy`取值为`SpotAsPriceGo`时，则代表您接受系统自动出价，跟随当前市场实际价格，此时无需填写该参数。
        """
        return pulumi.get(self, "spot_price_limit")

    @property
    @pulumi.getter(name="spotStrategy")
    def spot_strategy(self) -> pulumi.Output[builtins.str]:
        """
        竞价策略。取值： - NoSpot（默认）：非竞价实例。 -
        SpotWithPriceLimit：设置价格上限的竞ga价实例。 -
        SpotAsPriceGo：系统自动出价，跟随当前市场实际价格的竞价实例。
        """
        return pulumi.get(self, "spot_strategy")

    @property
    @pulumi.getter
    def status(self) -> pulumi.Output[builtins.str]:
        """
        实例的状态。实例的状态，取值： CREATING：创建中 RUNNING：运行中 STOPPING：停止中
        STOPPED：已停止 REBOOTING: 重启中 STARTING：启动中 REBUILDING：重装中 RESIZING：更配中 ERROR：错误
        DELETING：删除中。
        """
        return pulumi.get(self, "status")

    @property
    @pulumi.getter(name="stoppedMode")
    def stopped_mode(self) -> pulumi.Output[builtins.str]:
        """
        StoppedMode string 可选 示例值：KeepCharging 停机模式，取值：
        KeepCharging：普通停机模式。停机后实例及其相关资源仍被保留且持续计费，费用和停机前一致。
        StopCharging：节省停机模式。停机后实例的计算资源（vCPU、GPU和内存）将被回收且停止计费，所挂载的云盘、镜像、公网IP仍被保留且持续计费。
        有关节省停机的启用条件，请参见按量计费节省停机模式说明。
        默认值：若您在云服务器控制台开启了默认节省停机模式，并且符合启用条件，则默认值为StopCharging。否则，默认值为KeepCharging。
        """
        return pulumi.get(self, "stopped_mode")

    @property
    @pulumi.getter(name="systemVolume")
    def system_volume(self) -> pulumi.Output['outputs.InstanceSystemVolume']:
        """
        实例的系统卷。
        """
        return pulumi.get(self, "system_volume")

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

    @property
    @pulumi.getter(name="updatedAt")
    def updated_at(self) -> pulumi.Output[builtins.str]:
        """
        实例的更新时间。
        """
        return pulumi.get(self, "updated_at")

    @property
    @pulumi.getter(name="userData")
    def user_data(self) -> pulumi.Output[builtins.str]:
        """
        实例的自定义数据，默认为空。最终传入的UserData会被Base64转码。 -
        Linux实例：脚本内容不能超过16KB，且必须经过Base64编码。 -
        Windows实例：脚本内容不能超过8KB，且无需Base64编码。
        """
        return pulumi.get(self, "user_data")

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> pulumi.Output[builtins.str]:
        """
        实例所属的私有网络ID。您可以调用[DescribeVpcs](https://www.volcengine.com/docs/6563/66127)接口获取目标地域下的VPC信息。
        """
        return pulumi.get(self, "vpc_id")

    @property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> pulumi.Output[builtins.str]:
        """
        实例所在的可用区ID。
        """
        return pulumi.get(self, "zone_id")

