import { _InstanceType, ByoipCidr, IamInstanceProfileSpecification, IpPermission, NatGatewayAddress, TagSpecification, TransitGatewayAttachmentResourceType } from "./models_0";
import { AmdSevSnpSpecification, BlockDeviceMapping, CreditSpecificationRequest, ElasticGpuSpecification, HostnameType, InstanceInterruptionBehavior, InstanceIpv6Address, LocalGatewayRoute, MarketType, Placement, ShutdownBehavior, SpotInstanceType } from "./models_1";
import { TransitGatewayRoute } from "./models_2";
import { ClientVpnConnectionStatus, Filter } from "./models_3";
import { HttpTokensState, InstanceAutoRecoveryState, InstanceMetadataEndpointState, InstanceMetadataProtocolState, InstanceMetadataTagsState, InstanceNetworkInterfaceSpecification, InstanceState, NetworkInsightsAccessScopeAnalysis, NetworkInsightsAnalysis, RunInstancesMonitoringEnabled } from "./models_4";
import { CapacityReservationSpecification, InstanceMonitoring } from "./models_6";
/**
 * @public
 */
export interface RevokeSecurityGroupIngressResult {
    /**
     * @public
     * <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
     */
    Return?: boolean;
    /**
     * @public
     * <p>The inbound rules that were unknown to the service. In some cases,
     *                 <code>unknownIpPermissionSet</code> might be in a different format from the request
     *             parameter. </p>
     */
    UnknownIpPermissions?: IpPermission[];
}
/**
 * @public
 * <p>The CPU options for the instance. Both the core count and threads per core must be
 *             specified in the request.</p>
 */
export interface CpuOptionsRequest {
    /**
     * @public
     * <p>The number of CPU cores for the instance.</p>
     */
    CoreCount?: number;
    /**
     * @public
     * <p>The number of threads per CPU core. To disable multithreading for the instance,
     *             specify a value of <code>1</code>. Otherwise, specify the default value of
     *                 <code>2</code>.</p>
     */
    ThreadsPerCore?: number;
    /**
     * @public
     * <p>Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is supported
     *             with M6a, R6a, and C6a instance types only. For more information, see
     *             <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html">AMD SEV-SNP</a>.</p>
     */
    AmdSevSnp?: AmdSevSnpSpecification;
}
/**
 * @public
 * <p>
 *            Describes an elastic inference accelerator.
 *         </p>
 */
export interface ElasticInferenceAccelerator {
    /**
     * @public
     * <p>
     *         	The type of elastic inference accelerator. The possible values are <code>eia1.medium</code>, <code>eia1.large</code>, <code>eia1.xlarge</code>, <code>eia2.medium</code>, <code>eia2.large</code>, and <code>eia2.xlarge</code>.
     *         </p>
     */
    Type: string | undefined;
    /**
     * @public
     * <p>
     *             The number of elastic inference accelerators to attach to the instance.
     *         </p>
     *          <p>Default: 1</p>
     */
    Count?: number;
}
/**
 * @public
 * <p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For
 *             more information, see <a href="https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html"> What is Amazon Web Services Nitro
 *                 Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User
 *                 Guide</i>.</p>
 */
export interface EnclaveOptionsRequest {
    /**
     * @public
     * <p>To enable the instance for Amazon Web Services Nitro Enclaves, set this parameter to
     *                 <code>true</code>.</p>
     */
    Enabled?: boolean;
}
/**
 * @public
 * <p>Indicates whether your instance is configured for hibernation. This parameter is valid
 *             only if the instance meets the <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html">hibernation
 *                 prerequisites</a>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate your instance</a> in the
 *                 <i>Amazon EC2 User Guide</i>.</p>
 */
export interface HibernationOptionsRequest {
    /**
     * @public
     * <p>Set to <code>true</code> to enable your instance for hibernation.</p>
     *          <p>For Spot Instances, if you set <code>Configured</code> to <code>true</code>, either
     *             omit the <code>InstanceInterruptionBehavior</code> parameter (for <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotMarketOptions.html">
     *                <code>SpotMarketOptions</code>
     *             </a>), or set it to
     *                 <code>hibernate</code>. When <code>Configured</code> is true:</p>
     *          <ul>
     *             <li>
     *                <p>If you omit <code>InstanceInterruptionBehavior</code>, it defaults to
     *                         <code>hibernate</code>.</p>
     *             </li>
     *             <li>
     *                <p>If you set <code>InstanceInterruptionBehavior</code> to a value other than
     *                         <code>hibernate</code>, you'll get an error.</p>
     *             </li>
     *          </ul>
     *          <p>Default: <code>false</code>
     *          </p>
     */
    Configured?: boolean;
}
/**
 * @public
 * <p>The options for Spot Instances.</p>
 */
export interface SpotMarketOptions {
    /**
     * @public
     * <p>The maximum hourly price that you're willing to pay for a Spot Instance. We do not
     *             recommend using this parameter because it can lead to increased interruptions. If you do
     *             not specify this parameter, you will pay the current Spot price.</p>
     *          <important>
     *             <p>If you specify a maximum price, your Spot Instances will be interrupted more
     *                 frequently than if you do not specify this parameter.</p>
     *          </important>
     */
    MaxPrice?: string;
    /**
     * @public
     * <p>The Spot Instance request type. For <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances">RunInstances</a>, persistent
     *             Spot Instance requests are only supported when the instance interruption behavior is
     *             either <code>hibernate</code> or <code>stop</code>.</p>
     */
    SpotInstanceType?: SpotInstanceType;
    /**
     * @public
     * <p>Deprecated.</p>
     */
    BlockDurationMinutes?: number;
    /**
     * @public
     * <p>The end date of the request, in UTC format
     *                 (<i>YYYY</i>-<i>MM</i>-<i>DD</i>T<i>HH</i>:<i>MM</i>:<i>SS</i>Z).
     *             Supported only for persistent requests.</p>
     *          <ul>
     *             <li>
     *                <p>For a persistent request, the request remains active until the
     *                         <code>ValidUntil</code> date and time is reached. Otherwise, the request
     *                     remains active until you cancel it.</p>
     *             </li>
     *             <li>
     *                <p>For a one-time request, <code>ValidUntil</code> is not supported. The request
     *                     remains active until all instances launch or you cancel the request.</p>
     *             </li>
     *          </ul>
     */
    ValidUntil?: Date;
    /**
     * @public
     * <p>The behavior when a Spot Instance is interrupted.</p>
     *          <p>If <code>Configured</code> (for <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_HibernationOptionsRequest.html">
     *                <code>HibernationOptions</code>
     *             </a>) is set to <code>true</code>, the
     *                 <code>InstanceInterruptionBehavior</code> parameter is automatically set to
     *                 <code>hibernate</code>. If you set it to <code>stop</code> or
     *             <code>terminate</code>, you'll get an error.</p>
     *          <p>If <code>Configured</code> (for <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_HibernationOptionsRequest.html">
     *                <code>HibernationOptions</code>
     *             </a>) is set to <code>false</code> or
     *                 <code>null</code>, the <code>InstanceInterruptionBehavior</code> parameter is
     *             automatically set to <code>terminate</code>. You can also set it to <code>stop</code> or
     *                 <code>hibernate</code>.</p>
     *          <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/interruption-behavior.html">Interruption
     *                 behavior</a> in the <i>Amazon EC2 User Guide</i>.</p>
     */
    InstanceInterruptionBehavior?: InstanceInterruptionBehavior;
}
/**
 * @public
 * <p>Describes the market (purchasing) option for the instances.</p>
 */
export interface InstanceMarketOptionsRequest {
    /**
     * @public
     * <p>The market type.</p>
     */
    MarketType?: MarketType;
    /**
     * @public
     * <p>The options for Spot Instances.</p>
     */
    SpotOptions?: SpotMarketOptions;
}
/**
 * @public
 * <p>The launch template to use. You must specify either the launch template ID or launch
 *             template name in the request, but not both.</p>
 */
export interface LaunchTemplateSpecification {
    /**
     * @public
     * <p>The ID of the launch template.</p>
     *          <p>You must specify the <code>LaunchTemplateId</code> or the
     *                 <code>LaunchTemplateName</code>, but not both.</p>
     */
    LaunchTemplateId?: string;
    /**
     * @public
     * <p>The name of the launch template.</p>
     *          <p>You must specify the <code>LaunchTemplateName</code> or the
     *                 <code>LaunchTemplateId</code>, but not both.</p>
     */
    LaunchTemplateName?: string;
    /**
     * @public
     * <p>The launch template version number, <code>$Latest</code>, or
     *             <code>$Default</code>.</p>
     *          <p>If the value is <code>$Latest</code>, Amazon EC2 uses the latest version of the launch
     *             template.</p>
     *          <p>If the value is <code>$Default</code>, Amazon EC2 uses the default version of the
     *             launch template.</p>
     *          <p>Default: The default version of the launch template.</p>
     */
    Version?: string;
}
/**
 * @public
 * <p>Describes a license configuration.</p>
 */
export interface LicenseConfigurationRequest {
    /**
     * @public
     * <p>The Amazon Resource Name (ARN) of the license configuration.</p>
     */
    LicenseConfigurationArn?: string;
}
/**
 * @public
 * <p>The maintenance options for the instance.</p>
 */
export interface InstanceMaintenanceOptionsRequest {
    /**
     * @public
     * <p>Disables the automatic recovery behavior of your instance or sets it to default. For
     *             more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery">Simplified automatic recovery</a>.</p>
     */
    AutoRecovery?: InstanceAutoRecoveryState;
}
/**
 * @public
 * <p>The metadata options for the instance.</p>
 */
export interface InstanceMetadataOptionsRequest {
    /**
     * @public
     * <p>IMDSv2 uses token-backed sessions. Set the use of HTTP tokens to <code>optional</code>
     *             (in other words, set the use of IMDSv2 to <code>optional</code>) or
     *                 <code>required</code> (in other words, set the use of IMDSv2 to
     *                 <code>required</code>).</p>
     *          <ul>
     *             <li>
     *                <p>
     *                   <code>optional</code> - When IMDSv2 is optional, you can choose to retrieve instance metadata with or without
     *             a session token in your request. If you retrieve the IAM role credentials
     *             without a token, the IMDSv1 role credentials are returned. If you retrieve the IAM role credentials
     *             using a valid session token, the IMDSv2 role credentials are returned.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>required</code> - When IMDSv2 is required, you must send a session token
     *             with any instance metadata retrieval requests. In this state, retrieving the IAM role
     *             credentials always returns IMDSv2 credentials; IMDSv1 credentials are not available.</p>
     *             </li>
     *          </ul>
     *          <p>Default: <code>optional</code>
     *          </p>
     */
    HttpTokens?: HttpTokensState;
    /**
     * @public
     * <p>The desired HTTP PUT response hop limit for instance metadata requests. The larger the
     *             number, the further instance metadata requests can travel.</p>
     *          <p>Default: 1</p>
     *          <p>Possible values: Integers from 1 to 64</p>
     */
    HttpPutResponseHopLimit?: number;
    /**
     * @public
     * <p>Enables or disables the HTTP metadata endpoint on your instances.</p>
     *          <p>If you specify a value of <code>disabled</code>, you cannot access your instance
     *             metadata.</p>
     *          <p>Default: <code>enabled</code>
     *          </p>
     */
    HttpEndpoint?: InstanceMetadataEndpointState;
    /**
     * @public
     * <p>Enables or disables the IPv6 endpoint for the instance metadata service.</p>
     */
    HttpProtocolIpv6?: InstanceMetadataProtocolState;
    /**
     * @public
     * <p>Set to <code>enabled</code> to allow access to instance tags from the instance
     *             metadata. Set to <code>disabled</code> to turn off access to instance tags from the
     *             instance metadata. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS">Work with
     *                 instance tags using the instance metadata</a>.</p>
     *          <p>Default: <code>disabled</code>
     *          </p>
     */
    InstanceMetadataTags?: InstanceMetadataTagsState;
}
/**
 * @public
 * <p>Describes the options for instance hostnames.</p>
 */
export interface PrivateDnsNameOptionsRequest {
    /**
     * @public
     * <p>The type of hostname for EC2 instances. For IPv4 only subnets, an instance DNS name
     *             must be based on the instance IPv4 address. For IPv6 only subnets, an instance DNS name
     *             must be based on the instance ID. For dual-stack subnets, you can specify whether DNS
     *             names use the instance IPv4 address or the instance ID.</p>
     */
    HostnameType?: HostnameType;
    /**
     * @public
     * <p>Indicates whether to respond to DNS queries for instance hostnames with DNS A
     *             records.</p>
     */
    EnableResourceNameDnsARecord?: boolean;
    /**
     * @public
     * <p>Indicates whether to respond to DNS queries for instance hostnames with DNS AAAA
     *             records.</p>
     */
    EnableResourceNameDnsAAAARecord?: boolean;
}
/**
 * @public
 */
export interface RunInstancesRequest {
    /**
     * @public
     * <p>The block device mapping, which defines the EBS volumes and instance store volumes to
     *             attach to the instance at launch. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html">Block device
     *                 mappings</a> in the <i>Amazon EC2 User Guide</i>.</p>
     */
    BlockDeviceMappings?: BlockDeviceMapping[];
    /**
     * @public
     * <p>The ID of the AMI. An AMI ID is required to launch an instance and must be specified
     *             here or in a launch template.</p>
     */
    ImageId?: string;
    /**
     * @public
     * <p>The instance type. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html">Instance types</a> in the
     *                 <i>Amazon EC2 User Guide</i>.</p>
     */
    InstanceType?: _InstanceType;
    /**
     * @public
     * <p>The number of IPv6 addresses to associate with the primary network
     *             interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You
     *             cannot specify this option and the option to assign specific IPv6 addresses in the same
     *             request. You can specify this option if you've specified a minimum number of instances
     *             to launch.</p>
     *          <p>You cannot specify this option and the network interfaces option in the same
     *             request.</p>
     */
    Ipv6AddressCount?: number;
    /**
     * @public
     * <p>The IPv6 addresses from the range of the subnet to associate with the
     *             primary network interface. You cannot specify this option and the option to assign a
     *             number of IPv6 addresses in the same request. You cannot specify this option if you've
     *             specified a minimum number of instances to launch.</p>
     *          <p>You cannot specify this option and the network interfaces option in the same
     *             request.</p>
     */
    Ipv6Addresses?: InstanceIpv6Address[];
    /**
     * @public
     * <p>The ID of the kernel.</p>
     *          <important>
     *             <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more
     *                 information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html">PV-GRUB</a> in the
     *                     <i>Amazon EC2 User Guide</i>.</p>
     *          </important>
     */
    KernelId?: string;
    /**
     * @public
     * <p>The name of the key pair. You can create a key pair using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html">CreateKeyPair</a> or
     *                 <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html">ImportKeyPair</a>.</p>
     *          <important>
     *             <p>If you do not specify a key pair, you can't connect to the instance unless you
     *                 choose an AMI that is configured to allow users another way to log in.</p>
     *          </important>
     */
    KeyName?: string;
    /**
     * @public
     * <p>The maximum number of instances to launch. If you specify more instances than Amazon
     *             EC2 can launch in the target Availability Zone, Amazon EC2 launches the largest possible
     *             number of instances above <code>MinCount</code>.</p>
     *          <p>Constraints: Between 1 and the maximum number you're allowed for the specified
     *             instance type. For more information about the default limits, and how to request an
     *             increase, see <a href="http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2">How many instances can I
     *                 run in Amazon EC2</a> in the Amazon EC2 FAQ.</p>
     */
    MaxCount: number | undefined;
    /**
     * @public
     * <p>The minimum number of instances to launch. If you specify a minimum that is more
     *             instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2
     *             launches no instances.</p>
     *          <p>Constraints: Between 1 and the maximum number you're allowed for the specified
     *             instance type. For more information about the default limits, and how to request an
     *             increase, see <a href="http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2">How many instances can I
     *                 run in Amazon EC2</a> in the Amazon EC2 General FAQ.</p>
     */
    MinCount: number | undefined;
    /**
     * @public
     * <p>Specifies whether detailed monitoring is enabled for the instance.</p>
     */
    Monitoring?: RunInstancesMonitoringEnabled;
    /**
     * @public
     * <p>The placement for the instance.</p>
     */
    Placement?: Placement;
    /**
     * @public
     * <p>The ID of the RAM disk to select. Some kernels require additional drivers at launch.
     *             Check the kernel requirements for information about whether you need to specify a RAM
     *             disk. To find kernel requirements, go to the Amazon Web Services Resource Center and
     *             search for the kernel ID.</p>
     *          <important>
     *             <p>We recommend that you use PV-GRUB instead of kernels and RAM disks. For more
     *                 information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html">PV-GRUB</a> in the
     *                     <i>Amazon EC2 User Guide</i>.</p>
     *          </important>
     */
    RamdiskId?: string;
    /**
     * @public
     * <p>The IDs of the security groups. You can create a security group using <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html">CreateSecurityGroup</a>.</p>
     *          <p>If you specify a network interface, you must specify any security groups as part of
     *             the network interface.</p>
     */
    SecurityGroupIds?: string[];
    /**
     * @public
     * <p>[Default VPC] The names of the security groups.</p>
     *          <p>If you specify a network interface, you must specify any security groups as part of
     *             the network interface.</p>
     *          <p>Default: Amazon EC2 uses the default security group.</p>
     */
    SecurityGroups?: string[];
    /**
     * @public
     * <p>The ID of the subnet to launch the instance into.</p>
     *          <p>If you specify a network interface, you must specify any subnets as part of the
     *             network interface.</p>
     */
    SubnetId?: string;
    /**
     * @public
     * <p>The user data script to make available to the instance. For more information, see
     *                 <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html">Run
     *                 commands on your Linux instance at launch</a> and <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html">Run commands on your
     *                 Windows instance at launch</a>. If you are using a command line tool,
     *             base64-encoding is performed for you, and you can load the text from a file. Otherwise,
     *             you must provide base64-encoded text. User data is limited to 16 KB.</p>
     */
    UserData?: string;
    /**
     * @public
     * <p>Reserved.</p>
     */
    AdditionalInfo?: string;
    /**
     * @public
     * <p>Unique, case-sensitive identifier you provide to ensure the idempotency of the
     *             request. If you do not specify a client token, a randomly generated token is used for
     *             the request to ensure idempotency.</p>
     *          <p>For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring
     *                 Idempotency</a>.</p>
     *          <p>Constraints: Maximum 64 ASCII characters</p>
     */
    ClientToken?: string;
    /**
     * @public
     * <p>If you set this parameter to <code>true</code>, you can't terminate the instance using
     *             the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute after
     *             launch, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html">ModifyInstanceAttribute</a>. Alternatively, if you set
     *                 <code>InstanceInitiatedShutdownBehavior</code> to <code>terminate</code>, you can
     *             terminate the instance by running the shutdown command from the instance.</p>
     *          <p>Default: <code>false</code>
     *          </p>
     */
    DisableApiTermination?: boolean;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
    /**
     * @public
     * <p>Indicates whether the instance is optimized for Amazon EBS I/O. This optimization
     *             provides dedicated throughput to Amazon EBS and an optimized configuration stack to
     *             provide optimal Amazon EBS I/O performance. This optimization isn't available with all
     *             instance types. Additional usage charges apply when using an EBS-optimized
     *             instance.</p>
     *          <p>Default: <code>false</code>
     *          </p>
     */
    EbsOptimized?: boolean;
    /**
     * @public
     * <p>The name or Amazon Resource Name (ARN) of an IAM instance
     *             profile.</p>
     */
    IamInstanceProfile?: IamInstanceProfileSpecification;
    /**
     * @public
     * <p>Indicates whether an instance stops or terminates when you initiate shutdown from the
     *             instance (using the operating system command for system shutdown).</p>
     *          <p>Default: <code>stop</code>
     *          </p>
     */
    InstanceInitiatedShutdownBehavior?: ShutdownBehavior;
    /**
     * @public
     * <p>The network interfaces to associate with the instance. If you specify a network
     *             interface, you must specify any security groups and subnets as part of the network
     *             interface.</p>
     */
    NetworkInterfaces?: InstanceNetworkInterfaceSpecification[];
    /**
     * @public
     * <p>The primary IPv4 address. You must specify a value from the IPv4 address
     *             range of the subnet.</p>
     *          <p>Only one private IP address can be designated as primary. You can't specify this
     *             option if you've specified the option to designate a private IP address as the primary
     *             IP address in a network interface specification. You cannot specify this option if
     *             you're launching more than one instance in the request.</p>
     *          <p>You cannot specify this option and the network interfaces option in the same
     *             request.</p>
     */
    PrivateIpAddress?: string;
    /**
     * @public
     * <p>An elastic GPU to associate with the instance. An Elastic GPU is a GPU resource that
     *             you can attach to your Windows instance to accelerate the graphics performance of your
     *             applications. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html">Amazon EC2 Elastic GPUs</a> in
     *             the <i>Amazon EC2 User Guide</i>.</p>
     */
    ElasticGpuSpecification?: ElasticGpuSpecification[];
    /**
     * @public
     * <p>An elastic inference accelerator to associate with the instance. Elastic inference
     *             accelerators are a resource you can attach to your Amazon EC2 instances to accelerate
     *             your Deep Learning (DL) inference workloads.</p>
     *          <p>You cannot specify accelerators from different generations in the same request.</p>
     *          <note>
     *             <p>Starting April 15, 2023, Amazon Web Services will not onboard new customers to Amazon
     *             Elastic Inference (EI), and will help current customers migrate their workloads to
     *             options that offer better price and performance. After April 15, 2023, new customers
     *             will not be able to launch instances with Amazon EI accelerators in Amazon SageMaker,
     *             Amazon ECS, or Amazon EC2. However, customers who have used Amazon EI at least once during
     *             the past 30-day period are considered current customers and will be able to continue
     *             using the service.</p>
     *          </note>
     */
    ElasticInferenceAccelerators?: ElasticInferenceAccelerator[];
    /**
     * @public
     * <p>The tags to apply to the resources that are created during instance launch.</p>
     *          <p>You can specify tags for the following resources only:</p>
     *          <ul>
     *             <li>
     *                <p>Instances</p>
     *             </li>
     *             <li>
     *                <p>Volumes</p>
     *             </li>
     *             <li>
     *                <p>Elastic graphics</p>
     *             </li>
     *             <li>
     *                <p>Spot Instance requests</p>
     *             </li>
     *             <li>
     *                <p>Network interfaces</p>
     *             </li>
     *          </ul>
     *          <p>To tag a resource after it has been created, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html">CreateTags</a>.</p>
     */
    TagSpecifications?: TagSpecification[];
    /**
     * @public
     * <p>The launch template to use to launch the instances. Any parameters that you specify in
     *                 <a>RunInstances</a> override the same parameters in the launch template.
     *             You can specify either the name or ID of a launch template, but not both.</p>
     */
    LaunchTemplate?: LaunchTemplateSpecification;
    /**
     * @public
     * <p>The market (purchasing) option for the instances.</p>
     *          <p>For <a>RunInstances</a>, persistent Spot Instance requests are
     *             only supported when <b>InstanceInterruptionBehavior</b> is set
     *             to either <code>hibernate</code> or <code>stop</code>.</p>
     */
    InstanceMarketOptions?: InstanceMarketOptionsRequest;
    /**
     * @public
     * <p>The credit option for CPU usage of the burstable performance instance. Valid values
     *             are <code>standard</code> and <code>unlimited</code>. To change this attribute after
     *             launch, use <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html">
     *                 ModifyInstanceCreditSpecification</a>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html">Burstable
     *                 performance instances</a> in the <i>Amazon EC2 User Guide</i>.</p>
     *          <p>Default: <code>standard</code> (T2 instances) or <code>unlimited</code> (T3/T3a/T4g
     *             instances)</p>
     *          <p>For T3 instances with <code>host</code> tenancy, only <code>standard</code> is
     *             supported.</p>
     */
    CreditSpecification?: CreditSpecificationRequest;
    /**
     * @public
     * <p>The CPU options for the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html">Optimize CPU options</a> in the <i>Amazon EC2 User Guide</i>.</p>
     */
    CpuOptions?: CpuOptionsRequest;
    /**
     * @public
     * <p>Information about the Capacity Reservation targeting option. If you do not specify this parameter, the
     *             instance's Capacity Reservation preference defaults to <code>open</code>, which enables
     *             it to run in any open Capacity Reservation that has matching attributes (instance type,
     *             platform, Availability Zone).</p>
     */
    CapacityReservationSpecification?: CapacityReservationSpecification;
    /**
     * @public
     * <p>Indicates whether an instance is enabled for hibernation. This parameter is valid only
     *             if the instance meets the <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html">hibernation
     *                 prerequisites</a>. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate your instance</a> in the
     *                 <i>Amazon EC2 User Guide</i>.</p>
     *          <p>You can't enable hibernation and Amazon Web Services Nitro Enclaves on the same
     *             instance.</p>
     */
    HibernationOptions?: HibernationOptionsRequest;
    /**
     * @public
     * <p>The license configurations.</p>
     */
    LicenseSpecifications?: LicenseConfigurationRequest[];
    /**
     * @public
     * <p>The metadata options for the instance. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html">Instance metadata and user data</a>.</p>
     */
    MetadataOptions?: InstanceMetadataOptionsRequest;
    /**
     * @public
     * <p>Indicates whether the instance is enabled for Amazon Web Services Nitro Enclaves. For
     *             more information, see <a href="https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html">What is Amazon Web Services Nitro
     *                 Enclaves?</a> in the <i>Amazon Web Services Nitro Enclaves User
     *                 Guide</i>.</p>
     *          <p>You can't enable Amazon Web Services Nitro Enclaves and hibernation on the same
     *             instance.</p>
     */
    EnclaveOptions?: EnclaveOptionsRequest;
    /**
     * @public
     * <p>The options for the instance hostname.
     *             The default values are inherited from the subnet.
     *             Applies only if creating a network interface, not attaching an existing one.</p>
     */
    PrivateDnsNameOptions?: PrivateDnsNameOptionsRequest;
    /**
     * @public
     * <p>The maintenance and recovery options for the instance.</p>
     */
    MaintenanceOptions?: InstanceMaintenanceOptionsRequest;
    /**
     * @public
     * <p>Indicates whether an instance is enabled for stop protection. For more information,
     *             see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection">Stop
     *                 protection</a>. </p>
     */
    DisableApiStop?: boolean;
    /**
     * @public
     * <p>If you’re launching an instance into a dual-stack or IPv6-only subnet, you can enable
     *             assigning a primary IPv6 address. A primary IPv6 address is an IPv6 GUA address
     *             associated with an ENI that you have enabled to use a primary IPv6 address. Use this
     *             option if an instance relies on its IPv6 address not changing. When you launch the
     *             instance, Amazon Web Services will automatically assign an IPv6 address associated with
     *             the ENI attached to your instance to be the primary IPv6 address. Once you enable an
     *             IPv6 GUA address to be a primary IPv6, you cannot disable it. When you enable an IPv6
     *             GUA address to be a primary IPv6, the first IPv6 GUA will be made the primary IPv6
     *             address until the instance is terminated or the network interface is detached. If you
     *             have multiple IPv6 addresses associated with an ENI attached to your instance and you
     *             enable a primary IPv6 address, the first IPv6 GUA address associated with the ENI
     *             becomes the primary IPv6 address.</p>
     */
    EnablePrimaryIpv6?: boolean;
}
/**
 * @public
 * <p>Describes an EBS volume for a Scheduled Instance.</p>
 */
export interface ScheduledInstancesEbs {
    /**
     * @public
     * <p>Indicates whether the volume is deleted on instance termination.</p>
     */
    DeleteOnTermination?: boolean;
    /**
     * @public
     * <p>Indicates whether the volume is encrypted. You can attached encrypted volumes only to instances that support them.</p>
     */
    Encrypted?: boolean;
    /**
     * @public
     * <p>The number of I/O operations per second (IOPS) to provision for an <code>io1</code> or <code>io2</code> volume, with a maximum
     *    		ratio of 50 IOPS/GiB for <code>io1</code>, and 500 IOPS/GiB for <code>io2</code>. Range is 100 to 64,000 IOPS for
     *    		volumes in most Regions. Maximum IOPS of 64,000 is guaranteed only on
     *    		<a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances">instances built on the Nitro System</a>. Other instance families guarantee performance up to
     *    		32,000 IOPS. For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html">Amazon EBS volume types</a> in the
     *    		<i>Amazon EC2 User Guide</i>.</p>
     *          <p>This parameter is valid only for Provisioned IOPS SSD (<code>io1</code> and <code>io2</code>) volumes.</p>
     */
    Iops?: number;
    /**
     * @public
     * <p>The ID of the snapshot.</p>
     */
    SnapshotId?: string;
    /**
     * @public
     * <p>The size of the volume, in GiB.</p>
     *          <p>Default: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size.</p>
     */
    VolumeSize?: number;
    /**
     * @public
     * <p>The volume type. <code>gp2</code> for General Purpose SSD, <code>io1</code> or <code> io2</code> for Provisioned IOPS SSD, Throughput Optimized HDD
     *          for <code>st1</code>, Cold HDD for <code>sc1</code>, or <code>standard</code> for
     *          Magnetic.</p>
     *          <p>Default: <code>gp2</code>
     *          </p>
     */
    VolumeType?: string;
}
/**
 * @public
 * <p>Describes a block device mapping for a Scheduled Instance.</p>
 */
export interface ScheduledInstancesBlockDeviceMapping {
    /**
     * @public
     * <p>The device name (for example, <code>/dev/sdh</code> or <code>xvdh</code>).</p>
     */
    DeviceName?: string;
    /**
     * @public
     * <p>Parameters used to set up EBS volumes automatically when the instance is launched.</p>
     */
    Ebs?: ScheduledInstancesEbs;
    /**
     * @public
     * <p>To omit the device from the block device mapping, specify an empty string.</p>
     */
    NoDevice?: string;
    /**
     * @public
     * <p>The virtual device name (<code>ephemeral</code>N). Instance store volumes are numbered
     *          starting from 0. An instance type with two available instance store volumes can specify mappings
     *          for <code>ephemeral0</code> and <code>ephemeral1</code>. The number of available instance store
     *          volumes depends on the instance type. After you connect to the instance, you must mount the
     *          volume.</p>
     *          <p>Constraints: For M3 instances, you must specify instance store volumes in the block device
     *          mapping for the instance. When you launch an M3 instance, we ignore any instance store volumes
     *          specified in the block device mapping for the AMI.</p>
     */
    VirtualName?: string;
}
/**
 * @public
 * <p>Describes an IAM instance profile for a Scheduled Instance.</p>
 */
export interface ScheduledInstancesIamInstanceProfile {
    /**
     * @public
     * <p>The Amazon Resource Name (ARN).</p>
     */
    Arn?: string;
    /**
     * @public
     * <p>The name.</p>
     */
    Name?: string;
}
/**
 * @public
 * <p>Describes whether monitoring is enabled for a Scheduled Instance.</p>
 */
export interface ScheduledInstancesMonitoring {
    /**
     * @public
     * <p>Indicates whether monitoring is enabled.</p>
     */
    Enabled?: boolean;
}
/**
 * @public
 * <p>Describes an IPv6 address.</p>
 */
export interface ScheduledInstancesIpv6Address {
    /**
     * @public
     * <p>The IPv6 address.</p>
     */
    Ipv6Address?: string;
}
/**
 * @public
 * <p>Describes a private IPv4 address for a Scheduled Instance.</p>
 */
export interface ScheduledInstancesPrivateIpAddressConfig {
    /**
     * @public
     * <p>Indicates whether this is a primary IPv4 address. Otherwise, this is a secondary IPv4 address.</p>
     */
    Primary?: boolean;
    /**
     * @public
     * <p>The IPv4 address.</p>
     */
    PrivateIpAddress?: string;
}
/**
 * @public
 * <p>Describes a network interface for a Scheduled Instance.</p>
 */
export interface ScheduledInstancesNetworkInterface {
    /**
     * @public
     * <p>Indicates whether to assign a public IPv4 address to instances launched in a VPC. The
     *          public IPv4 address can only be assigned to a network interface for eth0, and can only be
     *          assigned to a new network interface, not an existing one. You cannot specify more than one
     *          network interface in the request. If launching into a default subnet, the default value is
     *          <code>true</code>.</p>
     */
    AssociatePublicIpAddress?: boolean;
    /**
     * @public
     * <p>Indicates whether to delete the interface when the instance is terminated.</p>
     */
    DeleteOnTermination?: boolean;
    /**
     * @public
     * <p>The description.</p>
     */
    Description?: string;
    /**
     * @public
     * <p>The index of the device for the network interface attachment.</p>
     */
    DeviceIndex?: number;
    /**
     * @public
     * <p>The IDs of the security groups.</p>
     */
    Groups?: string[];
    /**
     * @public
     * <p>The number of IPv6 addresses to assign to the network interface. The IPv6 addresses are automatically selected from the subnet range.</p>
     */
    Ipv6AddressCount?: number;
    /**
     * @public
     * <p>The specific IPv6 addresses from the subnet range.</p>
     */
    Ipv6Addresses?: ScheduledInstancesIpv6Address[];
    /**
     * @public
     * <p>The ID of the network interface.</p>
     */
    NetworkInterfaceId?: string;
    /**
     * @public
     * <p>The IPv4 address of the network interface within the subnet.</p>
     */
    PrivateIpAddress?: string;
    /**
     * @public
     * <p>The private IPv4 addresses.</p>
     */
    PrivateIpAddressConfigs?: ScheduledInstancesPrivateIpAddressConfig[];
    /**
     * @public
     * <p>The number of secondary private IPv4 addresses.</p>
     */
    SecondaryPrivateIpAddressCount?: number;
    /**
     * @public
     * <p>The ID of the subnet.</p>
     */
    SubnetId?: string;
}
/**
 * @public
 * <p>Describes the placement for a Scheduled Instance.</p>
 */
export interface ScheduledInstancesPlacement {
    /**
     * @public
     * <p>The Availability Zone.</p>
     */
    AvailabilityZone?: string;
    /**
     * @public
     * <p>The name of the placement group.</p>
     */
    GroupName?: string;
}
/**
 * @public
 * <p>Describes the launch specification for a Scheduled Instance.</p>
 *          <p>If you are launching the Scheduled Instance in EC2-VPC, you must specify the ID of the subnet.
 *           You can specify the subnet using either <code>SubnetId</code> or <code>NetworkInterface</code>.</p>
 */
export interface ScheduledInstancesLaunchSpecification {
    /**
     * @public
     * <p>The block device mapping entries.</p>
     */
    BlockDeviceMappings?: ScheduledInstancesBlockDeviceMapping[];
    /**
     * @public
     * <p>Indicates whether the instances are optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS-optimized instance.</p>
     *          <p>Default: <code>false</code>
     *          </p>
     */
    EbsOptimized?: boolean;
    /**
     * @public
     * <p>The IAM instance profile.</p>
     */
    IamInstanceProfile?: ScheduledInstancesIamInstanceProfile;
    /**
     * @public
     * <p>The ID of the Amazon Machine Image (AMI).</p>
     */
    ImageId: string | undefined;
    /**
     * @public
     * <p>The instance type.</p>
     */
    InstanceType?: string;
    /**
     * @public
     * <p>The ID of the kernel.</p>
     */
    KernelId?: string;
    /**
     * @public
     * <p>The name of the key pair.</p>
     */
    KeyName?: string;
    /**
     * @public
     * <p>Enable or disable monitoring for the instances.</p>
     */
    Monitoring?: ScheduledInstancesMonitoring;
    /**
     * @public
     * <p>The network interfaces.</p>
     */
    NetworkInterfaces?: ScheduledInstancesNetworkInterface[];
    /**
     * @public
     * <p>The placement information.</p>
     */
    Placement?: ScheduledInstancesPlacement;
    /**
     * @public
     * <p>The ID of the RAM disk.</p>
     */
    RamdiskId?: string;
    /**
     * @public
     * <p>The IDs of the security groups.</p>
     */
    SecurityGroupIds?: string[];
    /**
     * @public
     * <p>The ID of the subnet in which to launch the instances.</p>
     */
    SubnetId?: string;
    /**
     * @public
     * <p>The base64-encoded MIME user data.</p>
     */
    UserData?: string;
}
/**
 * @public
 * <p>Contains the parameters for RunScheduledInstances.</p>
 */
export interface RunScheduledInstancesRequest {
    /**
     * @public
     * <p>Unique, case-sensitive identifier that ensures the idempotency of the request.
     *          For more information, see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">Ensuring Idempotency</a>.</p>
     */
    ClientToken?: string;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
    /**
     * @public
     * <p>The number of instances.</p>
     *          <p>Default: 1</p>
     */
    InstanceCount?: number;
    /**
     * @public
     * <p>The launch specification. You must match the instance type, Availability Zone,
     *          network, and platform of the schedule that you purchased.</p>
     */
    LaunchSpecification: ScheduledInstancesLaunchSpecification | undefined;
    /**
     * @public
     * <p>The Scheduled Instance ID.</p>
     */
    ScheduledInstanceId: string | undefined;
}
/**
 * @public
 * <p>Contains the output of RunScheduledInstances.</p>
 */
export interface RunScheduledInstancesResult {
    /**
     * @public
     * <p>The IDs of the newly launched instances.</p>
     */
    InstanceIdSet?: string[];
}
/**
 * @public
 */
export interface SearchLocalGatewayRoutesRequest {
    /**
     * @public
     * <p>The ID of the local gateway route table.</p>
     */
    LocalGatewayRouteTableId: string | undefined;
    /**
     * @public
     * <p>One or more filters.</p>
     *          <ul>
     *             <li>
     *                <p>
     *                   <code>prefix-list-id</code> - The ID of the prefix list.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>route-search.exact-match</code> - The exact match of the specified filter.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter.
     *                For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify <code>supernet-of-match</code>
     *                as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>state</code> - The state of the route.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>type</code> - The route type.</p>
     *             </li>
     *          </ul>
     */
    Filters?: Filter[];
    /**
     * @public
     * <p>The maximum number of results to return with a single call.
     * 	To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
     */
    MaxResults?: number;
    /**
     * @public
     * <p>The token for the next page of results.</p>
     */
    NextToken?: string;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 */
export interface SearchLocalGatewayRoutesResult {
    /**
     * @public
     * <p>Information about the routes.</p>
     */
    Routes?: LocalGatewayRoute[];
    /**
     * @public
     * <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
     */
    NextToken?: string;
}
/**
 * @public
 */
export interface SearchTransitGatewayMulticastGroupsRequest {
    /**
     * @public
     * <p>The ID of the transit gateway multicast domain.</p>
     */
    TransitGatewayMulticastDomainId: string | undefined;
    /**
     * @public
     * <p>One or more filters. The possible values are:</p>
     *          <ul>
     *             <li>
     *                <p>
     *                   <code>group-ip-address</code> - The IP address of the  transit gateway multicast group.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>is-group-member</code> - The resource is a group member. Valid values are <code>true</code> | <code>false</code>.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>is-group-source</code> - The resource is a group source. Valid values are <code>true</code> | <code>false</code>.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>member-type</code> - The member type. Valid values are <code>igmp</code> | <code>static</code>.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>resource-id</code> - The ID of the resource.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>resource-type</code> - The type of resource. Valid values are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> | <code>tgw-peering</code>.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>source-type</code> - The source type. Valid values are <code>igmp</code> | <code>static</code>.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>subnet-id</code> - The ID of the subnet.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>transit-gateway-attachment-id</code> - The id of the transit gateway attachment.</p>
     *             </li>
     *          </ul>
     */
    Filters?: Filter[];
    /**
     * @public
     * <p>The maximum number of results to return with a single call.
     * 	To retrieve the remaining results, make another call with the returned <code>nextToken</code> value.</p>
     */
    MaxResults?: number;
    /**
     * @public
     * <p>The token for the next page of results.</p>
     */
    NextToken?: string;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 * @enum
 */
export declare const MembershipType: {
    readonly igmp: "igmp";
    readonly static: "static";
};
/**
 * @public
 */
export type MembershipType = (typeof MembershipType)[keyof typeof MembershipType];
/**
 * @public
 * <p>Describes the  transit gateway multicast group resources.</p>
 */
export interface TransitGatewayMulticastGroup {
    /**
     * @public
     * <p>The IP address assigned to the  transit gateway multicast group.</p>
     */
    GroupIpAddress?: string;
    /**
     * @public
     * <p>The ID of the transit gateway attachment.</p>
     */
    TransitGatewayAttachmentId?: string;
    /**
     * @public
     * <p>The ID of the subnet.</p>
     */
    SubnetId?: string;
    /**
     * @public
     * <p>The ID of the resource.</p>
     */
    ResourceId?: string;
    /**
     * @public
     * <p>The type of resource, for example a VPC attachment.</p>
     */
    ResourceType?: TransitGatewayAttachmentResourceType;
    /**
     * @public
     * <p> The ID of the Amazon Web Services account that owns the transit gateway multicast domain group resource.</p>
     */
    ResourceOwnerId?: string;
    /**
     * @public
     * <p>The ID of the transit gateway attachment.</p>
     */
    NetworkInterfaceId?: string;
    /**
     * @public
     * <p>Indicates that the resource is a  transit gateway multicast group member.</p>
     */
    GroupMember?: boolean;
    /**
     * @public
     * <p>Indicates that the resource is a  transit gateway multicast group member.</p>
     */
    GroupSource?: boolean;
    /**
     * @public
     * <p>The member type (for example, <code>static</code>).</p>
     */
    MemberType?: MembershipType;
    /**
     * @public
     * <p>The source type.</p>
     */
    SourceType?: MembershipType;
}
/**
 * @public
 */
export interface SearchTransitGatewayMulticastGroupsResult {
    /**
     * @public
     * <p>Information about the  transit gateway multicast group.</p>
     */
    MulticastGroups?: TransitGatewayMulticastGroup[];
    /**
     * @public
     * <p>The token to use to retrieve the next page of results. This value is <code>null</code> when there are no more results to return.</p>
     */
    NextToken?: string;
}
/**
 * @public
 */
export interface SearchTransitGatewayRoutesRequest {
    /**
     * @public
     * <p>The ID of the transit gateway route table.</p>
     */
    TransitGatewayRouteTableId: string | undefined;
    /**
     * @public
     * <p>One or more filters. The possible values are:</p>
     *          <ul>
     *             <li>
     *                <p>
     *                   <code>attachment.transit-gateway-attachment-id</code>- The id of the transit gateway attachment.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>attachment.resource-id</code> - The resource id of the transit gateway attachment.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>attachment.resource-type</code> - The attachment resource type. Valid values
     *                     are <code>vpc</code> | <code>vpn</code> | <code>direct-connect-gateway</code> |
     *                         <code>peering</code> | <code>connect</code>.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>prefix-list-id</code> - The ID of the prefix list.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>route-search.exact-match</code> - The exact match of the specified filter.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>route-search.longest-prefix-match</code> - The longest prefix that matches the route.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>route-search.subnet-of-match</code> - The routes with a subnet that match the specified CIDR filter.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>route-search.supernet-of-match</code> - The routes with a CIDR that encompass the CIDR filter. For example, if you have 10.0.1.0/29 and 10.0.1.0/31 routes in your route table and you specify supernet-of-match as 10.0.1.0/30, then the result returns 10.0.1.0/29.</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>state</code> - The state of the route (<code>active</code> | <code>blackhole</code>).</p>
     *             </li>
     *             <li>
     *                <p>
     *                   <code>type</code> - The type of route (<code>propagated</code> |
     *                   <code>static</code>).</p>
     *             </li>
     *          </ul>
     */
    Filters: Filter[] | undefined;
    /**
     * @public
     * <p>The maximum number of routes to return.</p>
     */
    MaxResults?: number;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 */
export interface SearchTransitGatewayRoutesResult {
    /**
     * @public
     * <p>Information about the routes.</p>
     */
    Routes?: TransitGatewayRoute[];
    /**
     * @public
     * <p>Indicates whether there are additional routes available.</p>
     */
    AdditionalRoutesAvailable?: boolean;
}
/**
 * @public
 */
export interface SendDiagnosticInterruptRequest {
    /**
     * @public
     * <p>The ID of the instance.</p>
     */
    InstanceId: string | undefined;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 */
export interface StartInstancesRequest {
    /**
     * @public
     * <p>The IDs of the instances.</p>
     */
    InstanceIds: string[] | undefined;
    /**
     * @public
     * <p>Reserved.</p>
     */
    AdditionalInfo?: string;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 * <p>Describes an instance state change.</p>
 */
export interface InstanceStateChange {
    /**
     * @public
     * <p>The current state of the instance.</p>
     */
    CurrentState?: InstanceState;
    /**
     * @public
     * <p>The ID of the instance.</p>
     */
    InstanceId?: string;
    /**
     * @public
     * <p>The previous state of the instance.</p>
     */
    PreviousState?: InstanceState;
}
/**
 * @public
 */
export interface StartInstancesResult {
    /**
     * @public
     * <p>Information about the started instances.</p>
     */
    StartingInstances?: InstanceStateChange[];
}
/**
 * @public
 */
export interface StartNetworkInsightsAccessScopeAnalysisRequest {
    /**
     * @public
     * <p>The ID of the Network Access Scope.</p>
     */
    NetworkInsightsAccessScopeId: string | undefined;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
    /**
     * @public
     * <p>The tags to apply.</p>
     */
    TagSpecifications?: TagSpecification[];
    /**
     * @public
     * <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information,
     *    see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
     */
    ClientToken?: string;
}
/**
 * @public
 */
export interface StartNetworkInsightsAccessScopeAnalysisResult {
    /**
     * @public
     * <p>The Network Access Scope analysis.</p>
     */
    NetworkInsightsAccessScopeAnalysis?: NetworkInsightsAccessScopeAnalysis;
}
/**
 * @public
 */
export interface StartNetworkInsightsAnalysisRequest {
    /**
     * @public
     * <p>The ID of the path.</p>
     */
    NetworkInsightsPathId: string | undefined;
    /**
     * @public
     * <p>The member accounts that contain resources that the path can traverse.</p>
     */
    AdditionalAccounts?: string[];
    /**
     * @public
     * <p>The Amazon Resource Names (ARN) of the resources that the path must traverse.</p>
     */
    FilterInArns?: string[];
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
    /**
     * @public
     * <p>The tags to apply.</p>
     */
    TagSpecifications?: TagSpecification[];
    /**
     * @public
     * <p>Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information,
     *    see <a href="https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html">How to ensure idempotency</a>.</p>
     */
    ClientToken?: string;
}
/**
 * @public
 */
export interface StartNetworkInsightsAnalysisResult {
    /**
     * @public
     * <p>Information about the network insights analysis.</p>
     */
    NetworkInsightsAnalysis?: NetworkInsightsAnalysis;
}
/**
 * @public
 */
export interface StartVpcEndpointServicePrivateDnsVerificationRequest {
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
    /**
     * @public
     * <p>The ID of the endpoint service.</p>
     */
    ServiceId: string | undefined;
}
/**
 * @public
 */
export interface StartVpcEndpointServicePrivateDnsVerificationResult {
    /**
     * @public
     * <p>Returns <code>true</code> if the request succeeds; otherwise, it returns an error.</p>
     */
    ReturnValue?: boolean;
}
/**
 * @public
 */
export interface StopInstancesRequest {
    /**
     * @public
     * <p>The IDs of the instances.</p>
     */
    InstanceIds: string[] | undefined;
    /**
     * @public
     * <p>Hibernates the instance if the instance was enabled for hibernation at launch. If the
     *             instance cannot hibernate successfully, a normal shutdown occurs. For more information,
     *             see <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html">Hibernate
     *                 your instance</a> in the <i>Amazon EC2 User Guide</i>.</p>
     *          <p> Default: <code>false</code>
     *          </p>
     */
    Hibernate?: boolean;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
    /**
     * @public
     * <p>Forces the instances to stop. The instances do not have an opportunity to flush file
     *             system caches or file system metadata. If you use this option, you must perform file
     *             system check and repair procedures. This option is not recommended for Windows
     *             instances.</p>
     *          <p>Default: <code>false</code>
     *          </p>
     */
    Force?: boolean;
}
/**
 * @public
 */
export interface StopInstancesResult {
    /**
     * @public
     * <p>Information about the stopped instances.</p>
     */
    StoppingInstances?: InstanceStateChange[];
}
/**
 * @public
 */
export interface TerminateClientVpnConnectionsRequest {
    /**
     * @public
     * <p>The ID of the Client VPN endpoint to which the client is connected.</p>
     */
    ClientVpnEndpointId: string | undefined;
    /**
     * @public
     * <p>The ID of the client connection to be terminated.</p>
     */
    ConnectionId?: string;
    /**
     * @public
     * <p>The name of the user who initiated the connection. Use this option to terminate all active connections for
     * 			the specified user. This option can only be used if the user has established up to five connections.</p>
     */
    Username?: string;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>. Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 * <p>Information about a terminated Client VPN endpoint client connection.</p>
 */
export interface TerminateConnectionStatus {
    /**
     * @public
     * <p>The ID of the client connection.</p>
     */
    ConnectionId?: string;
    /**
     * @public
     * <p>The state of the client connection.</p>
     */
    PreviousStatus?: ClientVpnConnectionStatus;
    /**
     * @public
     * <p>A message about the status of the client connection, if applicable.</p>
     */
    CurrentStatus?: ClientVpnConnectionStatus;
}
/**
 * @public
 */
export interface TerminateClientVpnConnectionsResult {
    /**
     * @public
     * <p>The ID of the Client VPN endpoint.</p>
     */
    ClientVpnEndpointId?: string;
    /**
     * @public
     * <p>The user who established the terminated client connections.</p>
     */
    Username?: string;
    /**
     * @public
     * <p>The current state of the client connections.</p>
     */
    ConnectionStatuses?: TerminateConnectionStatus[];
}
/**
 * @public
 */
export interface TerminateInstancesRequest {
    /**
     * @public
     * <p>The IDs of the instances.</p>
     *          <p>Constraints: Up to 1000 instance IDs. We recommend breaking up this request into
     *             smaller batches.</p>
     */
    InstanceIds: string[] | undefined;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 */
export interface TerminateInstancesResult {
    /**
     * @public
     * <p>Information about the terminated instances.</p>
     */
    TerminatingInstances?: InstanceStateChange[];
}
/**
 * @public
 */
export interface UnassignIpv6AddressesRequest {
    /**
     * @public
     * <p>The IPv6 addresses to unassign from the network interface.</p>
     */
    Ipv6Addresses?: string[];
    /**
     * @public
     * <p>The IPv6 prefixes to unassign from the network interface.</p>
     */
    Ipv6Prefixes?: string[];
    /**
     * @public
     * <p>The ID of the network interface.</p>
     */
    NetworkInterfaceId: string | undefined;
}
/**
 * @public
 */
export interface UnassignIpv6AddressesResult {
    /**
     * @public
     * <p>The ID of the network interface.</p>
     */
    NetworkInterfaceId?: string;
    /**
     * @public
     * <p>The IPv6 addresses that have been unassigned from the network interface.</p>
     */
    UnassignedIpv6Addresses?: string[];
    /**
     * @public
     * <p>The IPv4 prefixes that have been unassigned from  the network interface.</p>
     */
    UnassignedIpv6Prefixes?: string[];
}
/**
 * @public
 * <p>Contains the parameters for UnassignPrivateIpAddresses.</p>
 */
export interface UnassignPrivateIpAddressesRequest {
    /**
     * @public
     * <p>The ID of the network interface.</p>
     */
    NetworkInterfaceId: string | undefined;
    /**
     * @public
     * <p>The secondary private IP addresses to unassign from the network interface. You can specify this
     *         	option multiple times to unassign more than one IP address.</p>
     */
    PrivateIpAddresses?: string[];
    /**
     * @public
     * <p>The IPv4 prefixes to unassign from  the network interface.</p>
     */
    Ipv4Prefixes?: string[];
}
/**
 * @public
 */
export interface UnassignPrivateNatGatewayAddressRequest {
    /**
     * @public
     * <p>The ID of the NAT gateway.</p>
     */
    NatGatewayId: string | undefined;
    /**
     * @public
     * <p>The private IPv4 addresses you want to unassign.</p>
     */
    PrivateIpAddresses: string[] | undefined;
    /**
     * @public
     * <p>The maximum amount of time to wait (in seconds) before forcibly releasing the IP addresses if connections are still in progress. Default value is 350 seconds.</p>
     */
    MaxDrainDurationSeconds?: number;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 */
export interface UnassignPrivateNatGatewayAddressResult {
    /**
     * @public
     * <p>The ID of the NAT gateway.</p>
     */
    NatGatewayId?: string;
    /**
     * @public
     * <p>Information about the NAT gateway IP addresses.</p>
     */
    NatGatewayAddresses?: NatGatewayAddress[];
}
/**
 * @public
 */
export interface UnmonitorInstancesRequest {
    /**
     * @public
     * <p>The IDs of the instances.</p>
     */
    InstanceIds: string[] | undefined;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 */
export interface UnmonitorInstancesResult {
    /**
     * @public
     * <p>The monitoring information.</p>
     */
    InstanceMonitorings?: InstanceMonitoring[];
}
/**
 * @public
 * <p>Describes the description of a security group rule.</p>
 *          <p>You can use this when you want to update the security group rule description for either an inbound or outbound rule.</p>
 */
export interface SecurityGroupRuleDescription {
    /**
     * @public
     * <p>The ID of the security group rule.</p>
     */
    SecurityGroupRuleId?: string;
    /**
     * @public
     * <p>The description of the security group rule.</p>
     */
    Description?: string;
}
/**
 * @public
 */
export interface UpdateSecurityGroupRuleDescriptionsEgressRequest {
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
    /**
     * @public
     * <p>The ID of the security group. You must specify either the security group ID or the
     * 			security group name in the request. For security groups in a nondefault VPC, you must
     * 			specify the security group ID.</p>
     */
    GroupId?: string;
    /**
     * @public
     * <p>[Default VPC] The name of the security group. You must specify either the security group
     * 			ID or the security group name.</p>
     */
    GroupName?: string;
    /**
     * @public
     * <p>The IP permissions for the security group rule. You must specify either the IP permissions
     * 		    or the description.</p>
     */
    IpPermissions?: IpPermission[];
    /**
     * @public
     * <p>The description for the egress security group rules. You must specify either the
     *             description or the IP permissions.</p>
     */
    SecurityGroupRuleDescriptions?: SecurityGroupRuleDescription[];
}
/**
 * @public
 */
export interface UpdateSecurityGroupRuleDescriptionsEgressResult {
    /**
     * @public
     * <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
     */
    Return?: boolean;
}
/**
 * @public
 */
export interface UpdateSecurityGroupRuleDescriptionsIngressRequest {
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
    /**
     * @public
     * <p>The ID of the security group. You must specify either the security group ID or the
     * 			security group name in the request. For security groups in a nondefault VPC, you must
     * 			specify the security group ID.</p>
     */
    GroupId?: string;
    /**
     * @public
     * <p>[Default VPC] The name of the security group. You must specify either the
     *             security group ID or the security group name. For security groups in a
     *             nondefault VPC, you must specify the security group ID.</p>
     */
    GroupName?: string;
    /**
     * @public
     * <p>The IP permissions for the security group rule. You must specify either IP permissions
     * 		    or a description.</p>
     */
    IpPermissions?: IpPermission[];
    /**
     * @public
     * <p>The description for the ingress security group rules. You must specify either
     *             a description or IP permissions.</p>
     */
    SecurityGroupRuleDescriptions?: SecurityGroupRuleDescription[];
}
/**
 * @public
 */
export interface UpdateSecurityGroupRuleDescriptionsIngressResult {
    /**
     * @public
     * <p>Returns <code>true</code> if the request succeeds; otherwise, returns an error.</p>
     */
    Return?: boolean;
}
/**
 * @public
 */
export interface WithdrawByoipCidrRequest {
    /**
     * @public
     * <p>The address range, in CIDR notation.</p>
     */
    Cidr: string | undefined;
    /**
     * @public
     * <p>Checks whether you have the required permissions for the action, without actually making the request,
     *    and provides an error response. If you have the required permissions, the error response is <code>DryRunOperation</code>.
     *    Otherwise, it is <code>UnauthorizedOperation</code>.</p>
     */
    DryRun?: boolean;
}
/**
 * @public
 */
export interface WithdrawByoipCidrResult {
    /**
     * @public
     * <p>Information about the address pool.</p>
     */
    ByoipCidr?: ByoipCidr;
}
/**
 * @internal
 */
export declare const RunInstancesRequestFilterSensitiveLog: (obj: RunInstancesRequest) => any;
/**
 * @internal
 */
export declare const ScheduledInstancesLaunchSpecificationFilterSensitiveLog: (obj: ScheduledInstancesLaunchSpecification) => any;
/**
 * @internal
 */
export declare const RunScheduledInstancesRequestFilterSensitiveLog: (obj: RunScheduledInstancesRequest) => any;
