# frozen_string_literal: true

# WARNING ABOUT GENERATED CODE
#
# This file is generated. See the contributing guide for more information:
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
#
# WARNING ABOUT GENERATED CODE

module Aws::EC2
  module Types

    # The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
    # Web Services Inferentia chips) on an instance.
    #
    # @!attribute [rw] min
    #   The minimum number of accelerators. If this parameter is not
    #   specified, there is no minimum limit.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum number of accelerators. If this parameter is not
    #   specified, there is no maximum limit.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceleratorCount AWS API Documentation
    #
    class AcceleratorCount < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
    # Web Services Inferentia chips) on an instance. To exclude
    # accelerator-enabled instance types, set `Max` to `0`.
    #
    # @!attribute [rw] min
    #   The minimum number of accelerators. To specify no minimum limit,
    #   omit this parameter.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum number of accelerators. To specify no maximum limit,
    #   omit this parameter. To exclude accelerator-enabled instance types,
    #   set `Max` to `0`.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceleratorCountRequest AWS API Documentation
    #
    class AcceleratorCountRequest < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of total accelerator memory, in MiB.
    #
    # @!attribute [rw] min
    #   The minimum amount of accelerator memory, in MiB. If this parameter
    #   is not specified, there is no minimum limit.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum amount of accelerator memory, in MiB. If this parameter
    #   is not specified, there is no maximum limit.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceleratorTotalMemoryMiB AWS API Documentation
    #
    class AcceleratorTotalMemoryMiB < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of total accelerator memory, in MiB.
    #
    # @!attribute [rw] min
    #   The minimum amount of accelerator memory, in MiB. To specify no
    #   minimum limit, omit this parameter.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum amount of accelerator memory, in MiB. To specify no
    #   maximum limit, omit this parameter.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceleratorTotalMemoryMiBRequest AWS API Documentation
    #
    class AcceleratorTotalMemoryMiBRequest < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] address
    #   The Elastic IP address you are accepting for transfer.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #   the resource. Use the tag key in the filter name and the tag value
    #   as the filter value. For example, to find all resources that have a
    #   tag with the key `Owner` and the value `TeamA`, specify `tag:Owner`
    #   for the filter name and `TeamA` for the filter value.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptAddressTransferRequest AWS API Documentation
    #
    class AcceptAddressTransferRequest < Struct.new(
      :address,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] address_transfer
    #   An Elastic IP address transfer.
    #   @return [Types::AddressTransfer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptAddressTransferResult AWS API Documentation
    #
    class AcceptAddressTransferResult < Struct.new(
      :address_transfer)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation for which to accept the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptCapacityReservationBillingOwnershipRequest AWS API Documentation
    #
    class AcceptCapacityReservationBillingOwnershipRequest < Struct.new(
      :dry_run,
      :capacity_reservation_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptCapacityReservationBillingOwnershipResult AWS API Documentation
    #
    class AcceptCapacityReservationBillingOwnershipResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for accepting the quote.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] reserved_instance_ids
    #   The IDs of the Convertible Reserved Instances to exchange for
    #   another Convertible Reserved Instance of the same or higher value.
    #   @return [Array<String>]
    #
    # @!attribute [rw] target_configurations
    #   The configuration of the target Convertible Reserved Instance to
    #   exchange for your current Convertible Reserved Instances.
    #   @return [Array<Types::TargetConfigurationRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuoteRequest AWS API Documentation
    #
    class AcceptReservedInstancesExchangeQuoteRequest < Struct.new(
      :dry_run,
      :reserved_instance_ids,
      :target_configurations)
      SENSITIVE = []
      include Aws::Structure
    end

    # The result of the exchange and whether it was `successful`.
    #
    # @!attribute [rw] exchange_id
    #   The ID of the successful exchange.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptReservedInstancesExchangeQuoteResult AWS API Documentation
    #
    class AcceptReservedInstancesExchangeQuoteResult < Struct.new(
      :exchange_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets to associate with the transit gateway
    #   multicast domain.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayMulticastDomainAssociationsRequest AWS API Documentation
    #
    class AcceptTransitGatewayMulticastDomainAssociationsRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :transit_gateway_attachment_id,
      :subnet_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] associations
    #   Information about the multicast domain associations.
    #   @return [Types::TransitGatewayMulticastDomainAssociations]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayMulticastDomainAssociationsResult AWS API Documentation
    #
    class AcceptTransitGatewayMulticastDomainAssociationsResult < Struct.new(
      :associations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayPeeringAttachmentRequest AWS API Documentation
    #
    class AcceptTransitGatewayPeeringAttachmentRequest < Struct.new(
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_peering_attachment
    #   The transit gateway peering attachment.
    #   @return [Types::TransitGatewayPeeringAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayPeeringAttachmentResult AWS API Documentation
    #
    class AcceptTransitGatewayPeeringAttachmentResult < Struct.new(
      :transit_gateway_peering_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayVpcAttachmentRequest AWS API Documentation
    #
    class AcceptTransitGatewayVpcAttachmentRequest < Struct.new(
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_vpc_attachment
    #   The VPC attachment.
    #   @return [Types::TransitGatewayVpcAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptTransitGatewayVpcAttachmentResult AWS API Documentation
    #
    class AcceptTransitGatewayVpcAttachmentResult < Struct.new(
      :transit_gateway_vpc_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_id
    #   The ID of the VPC endpoint service.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_ids
    #   The IDs of the interface VPC endpoints.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcEndpointConnectionsRequest AWS API Documentation
    #
    class AcceptVpcEndpointConnectionsRequest < Struct.new(
      :dry_run,
      :service_id,
      :vpc_endpoint_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] unsuccessful
    #   Information about the interface endpoints that were not accepted, if
    #   applicable.
    #   @return [Array<Types::UnsuccessfulItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcEndpointConnectionsResult AWS API Documentation
    #
    class AcceptVpcEndpointConnectionsResult < Struct.new(
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of the VPC peering connection. You must specify this
    #   parameter in the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnectionRequest AWS API Documentation
    #
    class AcceptVpcPeeringConnectionRequest < Struct.new(
      :dry_run,
      :vpc_peering_connection_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_peering_connection
    #   Information about the VPC peering connection.
    #   @return [Types::VpcPeeringConnection]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AcceptVpcPeeringConnectionResult AWS API Documentation
    #
    class AcceptVpcPeeringConnectionResult < Struct.new(
      :vpc_peering_connection)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a finding for a Network Access Scope.
    #
    # @!attribute [rw] network_insights_access_scope_analysis_id
    #   The ID of the Network Access Scope analysis.
    #   @return [String]
    #
    # @!attribute [rw] network_insights_access_scope_id
    #   The ID of the Network Access Scope.
    #   @return [String]
    #
    # @!attribute [rw] finding_id
    #   The ID of the finding.
    #   @return [String]
    #
    # @!attribute [rw] finding_components
    #   The finding components.
    #   @return [Array<Types::PathComponent>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AccessScopeAnalysisFinding AWS API Documentation
    #
    class AccessScopeAnalysisFinding < Struct.new(
      :network_insights_access_scope_analysis_id,
      :network_insights_access_scope_id,
      :finding_id,
      :finding_components)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a path.
    #
    # @!attribute [rw] source
    #   The source.
    #   @return [Types::PathStatement]
    #
    # @!attribute [rw] destination
    #   The destination.
    #   @return [Types::PathStatement]
    #
    # @!attribute [rw] through_resources
    #   The through resources.
    #   @return [Array<Types::ThroughResourcesStatement>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AccessScopePath AWS API Documentation
    #
    class AccessScopePath < Struct.new(
      :source,
      :destination,
      :through_resources)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a path.
    #
    # @!attribute [rw] source
    #   The source.
    #   @return [Types::PathStatementRequest]
    #
    # @!attribute [rw] destination
    #   The destination.
    #   @return [Types::PathStatementRequest]
    #
    # @!attribute [rw] through_resources
    #   The through resources.
    #   @return [Array<Types::ThroughResourcesStatementRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AccessScopePathRequest AWS API Documentation
    #
    class AccessScopePathRequest < Struct.new(
      :source,
      :destination,
      :through_resources)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an account attribute.
    #
    # @!attribute [rw] attribute_name
    #   The name of the account attribute.
    #   @return [String]
    #
    # @!attribute [rw] attribute_values
    #   The values for the account attribute.
    #   @return [Array<Types::AccountAttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AccountAttribute AWS API Documentation
    #
    class AccountAttribute < Struct.new(
      :attribute_name,
      :attribute_values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a value of an account attribute.
    #
    # @!attribute [rw] attribute_value
    #   The value of the attribute.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AccountAttributeValue AWS API Documentation
    #
    class AccountAttributeValue < Struct.new(
      :attribute_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a running instance in a Spot Fleet.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] spot_instance_request_id
    #   The ID of the Spot Instance request.
    #   @return [String]
    #
    # @!attribute [rw] instance_health
    #   The health status of the instance. If the status of either the
    #   instance status check or the system status check is `impaired`, the
    #   health status of the instance is `unhealthy`. Otherwise, the health
    #   status is `healthy`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ActiveInstance AWS API Documentation
    #
    class ActiveInstance < Struct.new(
      :instance_id,
      :instance_type,
      :spot_instance_request_id,
      :instance_health)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains information about the current security configuration of an
    # active VPN tunnel.
    #
    # @!attribute [rw] phase_1_encryption_algorithm
    #   The encryption algorithm negotiated in Phase 1 IKE negotiations.
    #   @return [String]
    #
    # @!attribute [rw] phase_2_encryption_algorithm
    #   The encryption algorithm negotiated in Phase 2 IKE negotiations.
    #   @return [String]
    #
    # @!attribute [rw] phase_1_integrity_algorithm
    #   The integrity algorithm negotiated in Phase 1 IKE negotiations.
    #   @return [String]
    #
    # @!attribute [rw] phase_2_integrity_algorithm
    #   The integrity algorithm negotiated in Phase 2 IKE negotiations.
    #   @return [String]
    #
    # @!attribute [rw] phase_1_dh_group
    #   The Diffie-Hellman group number being used in Phase 1 IKE
    #   negotiations.
    #   @return [Integer]
    #
    # @!attribute [rw] phase_2_dh_group
    #   The Diffie-Hellman group number being used in Phase 2 IKE
    #   negotiations.
    #   @return [Integer]
    #
    # @!attribute [rw] ike_version
    #   The version of the Internet Key Exchange (IKE) protocol being used.
    #   @return [String]
    #
    # @!attribute [rw] provisioning_status
    #   The current provisioning status of the VPN tunnel.
    #   @return [String]
    #
    # @!attribute [rw] provisioning_status_reason
    #   The reason for the current provisioning status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ActiveVpnTunnelStatus AWS API Documentation
    #
    class ActiveVpnTunnelStatus < Struct.new(
      :phase_1_encryption_algorithm,
      :phase_2_encryption_algorithm,
      :phase_1_integrity_algorithm,
      :phase_2_integrity_algorithm,
      :phase_1_dh_group,
      :phase_2_dh_group,
      :ike_version,
      :provisioning_status,
      :provisioning_status_reason)
      SENSITIVE = []
      include Aws::Structure
    end

    # Add an operating Region to an IPAM. Operating Regions are Amazon Web
    # Services Regions where the IPAM is allowed to manage IP address CIDRs.
    # IPAM only discovers and monitors resources in the Amazon Web Services
    # Regions you select as operating Regions.
    #
    # For more information about operating Regions, see [Create an IPAM][1]
    # in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html
    #
    # @!attribute [rw] region_name
    #   The name of the operating Region.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AddIpamOperatingRegion AWS API Documentation
    #
    class AddIpamOperatingRegion < Struct.new(
      :region_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Add an Organizational Unit (OU) exclusion to your IPAM. If your IPAM
    # is integrated with Amazon Web Services Organizations and you add an
    # organizational unit (OU) exclusion, IPAM will not manage the IP
    # addresses in accounts in that OU exclusion. There is a limit on the
    # number of exclusions you can create. For more information, see [Quotas
    # for your IPAM][1] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html
    #
    # @!attribute [rw] organizations_entity_path
    #   An Amazon Web Services Organizations entity path. Build the path for
    #   the OU(s) using Amazon Web Services Organizations IDs separated by a
    #   `/`. Include all child OUs by ending the path with `/*`.
    #
    #   * Example 1
    #
    #     * Path to a child OU:
    #       `o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/ou-jkl0-awsddddd/`
    #
    #     * In this example, `o-a1b2c3d4e5` is the organization ID,
    #       `r-f6g7h8i9j0example` is the root ID , `ou-ghi0-awsccccc` is an
    #       OU ID, and `ou-jkl0-awsddddd` is a child OU ID.
    #
    #     * IPAM will not manage the IP addresses in accounts in the child
    #       OU.
    #   * Example 2
    #
    #     * Path where all child OUs will be part of the exclusion:
    #       `o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/*`
    #
    #     * In this example, IPAM will not manage the IP addresses in
    #       accounts in the OU (`ou-ghi0-awsccccc`) or in accounts in any
    #       OUs that are children of the OU.
    #
    #   For more information on how to construct an entity path, see
    #   [Understand the Amazon Web Services Organizations entity path][1] in
    #   the *Amazon Web Services Identity and Access Management User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_last-accessed-view-data-orgs.html#access_policies_access-advisor-viewing-orgs-entity-path
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AddIpamOrganizationalUnitExclusion AWS API Documentation
    #
    class AddIpamOrganizationalUnitExclusion < Struct.new(
      :organizations_entity_path)
      SENSITIVE = []
      include Aws::Structure
    end

    # An entry for a prefix list.
    #
    # @!attribute [rw] cidr
    #   The CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the entry.
    #
    #   Constraints: Up to 255 characters in length.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AddPrefixListEntry AWS API Documentation
    #
    class AddPrefixListEntry < Struct.new(
      :cidr,
      :description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a principal.
    #
    # @!attribute [rw] principal_type
    #   The type of principal.
    #   @return [String]
    #
    # @!attribute [rw] principal
    #   The Amazon Resource Name (ARN) of the principal.
    #   @return [String]
    #
    # @!attribute [rw] service_permission_id
    #   The ID of the service permission.
    #   @return [String]
    #
    # @!attribute [rw] service_id
    #   The ID of the service.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AddedPrincipal AWS API Documentation
    #
    class AddedPrincipal < Struct.new(
      :principal_type,
      :principal,
      :service_permission_id,
      :service_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an additional detail for a path analysis. For more
    # information, see [Reachability Analyzer additional detail codes][1].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/reachability/additional-detail-codes.html
    #
    # @!attribute [rw] additional_detail_type
    #   The additional detail code.
    #   @return [String]
    #
    # @!attribute [rw] component
    #   The path component.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] vpc_endpoint_service
    #   The VPC endpoint service.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] rule_options
    #   The rule options.
    #   @return [Array<Types::RuleOption>]
    #
    # @!attribute [rw] rule_group_type_pairs
    #   The rule group type.
    #   @return [Array<Types::RuleGroupTypePair>]
    #
    # @!attribute [rw] rule_group_rule_options_pairs
    #   The rule options.
    #   @return [Array<Types::RuleGroupRuleOptionsPair>]
    #
    # @!attribute [rw] service_name
    #   The name of the VPC endpoint service.
    #   @return [String]
    #
    # @!attribute [rw] load_balancers
    #   The load balancers.
    #   @return [Array<Types::AnalysisComponent>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AdditionalDetail AWS API Documentation
    #
    class AdditionalDetail < Struct.new(
      :additional_detail_type,
      :component,
      :vpc_endpoint_service,
      :rule_options,
      :rule_group_type_pairs,
      :rule_group_rule_options_pairs,
      :service_name,
      :load_balancers)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Elastic IP address, or a carrier IP address.
    #
    # @!attribute [rw] allocation_id
    #   The ID representing the allocation of the address.
    #   @return [String]
    #
    # @!attribute [rw] association_id
    #   The ID representing the association of the address with an instance.
    #   @return [String]
    #
    # @!attribute [rw] domain
    #   The network (`vpc`).
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_owner_id
    #   The ID of the Amazon Web Services account that owns the network
    #   interface.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The private IP address associated with the Elastic IP address.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the Elastic IP address.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] public_ipv_4_pool
    #   The ID of an address pool.
    #   @return [String]
    #
    # @!attribute [rw] network_border_group
    #   The name of the unique set of Availability Zones, Local Zones, or
    #   Wavelength Zones from which Amazon Web Services advertises IP
    #   addresses.
    #   @return [String]
    #
    # @!attribute [rw] customer_owned_ip
    #   The customer-owned IP address.
    #   @return [String]
    #
    # @!attribute [rw] customer_owned_ipv_4_pool
    #   The ID of the customer-owned address pool.
    #   @return [String]
    #
    # @!attribute [rw] carrier_ip
    #   The carrier IP address associated. This option is only available for
    #   network interfaces which reside in a subnet in a Wavelength Zone
    #   (for example an EC2 instance).
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet where the IP address is allocated.
    #   @return [String]
    #
    # @!attribute [rw] service_managed
    #   The service that manages the elastic IP address.
    #
    #   <note markdown="1"> The only option supported today is `alb`.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance that the address is associated with (if any).
    #   @return [String]
    #
    # @!attribute [rw] public_ip
    #   The Elastic IP address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Address AWS API Documentation
    #
    class Address < Struct.new(
      :allocation_id,
      :association_id,
      :domain,
      :network_interface_id,
      :network_interface_owner_id,
      :private_ip_address,
      :tags,
      :public_ipv_4_pool,
      :network_border_group,
      :customer_owned_ip,
      :customer_owned_ipv_4_pool,
      :carrier_ip,
      :subnet_id,
      :service_managed,
      :instance_id,
      :public_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # The attributes associated with an Elastic IP address.
    #
    # @!attribute [rw] public_ip
    #   The public IP address.
    #   @return [String]
    #
    # @!attribute [rw] allocation_id
    #   \[EC2-VPC\] The allocation ID.
    #   @return [String]
    #
    # @!attribute [rw] ptr_record
    #   The pointer (PTR) record for the IP address.
    #   @return [String]
    #
    # @!attribute [rw] ptr_record_update
    #   The updated PTR record for the IP address.
    #   @return [Types::PtrUpdateStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AddressAttribute AWS API Documentation
    #
    class AddressAttribute < Struct.new(
      :public_ip,
      :allocation_id,
      :ptr_record,
      :ptr_record_update)
      SENSITIVE = []
      include Aws::Structure
    end

    # Details on the Elastic IP address transfer. For more information, see
    # [Transfer Elastic IP addresses][1] in the *Amazon VPC User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro
    #
    # @!attribute [rw] public_ip
    #   The Elastic IP address being transferred.
    #   @return [String]
    #
    # @!attribute [rw] allocation_id
    #   The allocation ID of an Elastic IP address.
    #   @return [String]
    #
    # @!attribute [rw] transfer_account_id
    #   The ID of the account that you want to transfer the Elastic IP
    #   address to.
    #   @return [String]
    #
    # @!attribute [rw] transfer_offer_expiration_timestamp
    #   The timestamp when the Elastic IP address transfer expired. When the
    #   source account starts the transfer, the transfer account has seven
    #   hours to allocate the Elastic IP address to complete the transfer,
    #   or the Elastic IP address will return to its original owner.
    #   @return [Time]
    #
    # @!attribute [rw] transfer_offer_accepted_timestamp
    #   The timestamp when the Elastic IP address transfer was accepted.
    #   @return [Time]
    #
    # @!attribute [rw] address_transfer_status
    #   The Elastic IP address transfer status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AddressTransfer AWS API Documentation
    #
    class AddressTransfer < Struct.new(
      :public_ip,
      :allocation_id,
      :transfer_account_id,
      :transfer_offer_expiration_timestamp,
      :transfer_offer_accepted_timestamp,
      :address_transfer_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cidr
    #   The address range, in CIDR notation. This must be the exact range
    #   that you provisioned. You can't advertise only a portion of the
    #   provisioned range.
    #   @return [String]
    #
    # @!attribute [rw] asn
    #   The public 2-byte or 4-byte ASN that you want to advertise.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_border_group
    #   If you have [Local Zones][1] enabled, you can choose a network
    #   border group for Local Zones when you provision and advertise a
    #   BYOIPv4 CIDR. Choose the network border group carefully as the EIP
    #   and the Amazon Web Services resource it is associated with must
    #   reside in the same network border group.
    #
    #   You can provision BYOIP address ranges to and advertise them in the
    #   following Local Zone network border groups:
    #
    #   * us-east-1-dfw-2
    #
    #   * us-west-2-lax-1
    #
    #   * us-west-2-phx-2
    #
    #   <note markdown="1"> You cannot provision or advertise BYOIPv6 address ranges in Local
    #   Zones at this time.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/local-zones/latest/ug/how-local-zones-work.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AdvertiseByoipCidrRequest AWS API Documentation
    #
    class AdvertiseByoipCidrRequest < Struct.new(
      :cidr,
      :asn,
      :dry_run,
      :network_border_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] byoip_cidr
    #   Information about the address range.
    #   @return [Types::ByoipCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AdvertiseByoipCidrResult AWS API Documentation
    #
    class AdvertiseByoipCidrResult < Struct.new(
      :byoip_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] domain
    #   The network (`vpc`).
    #   @return [String]
    #
    # @!attribute [rw] address
    #   The Elastic IP address to recover or an IPv4 address from an address
    #   pool.
    #   @return [String]
    #
    # @!attribute [rw] public_ipv_4_pool
    #   The ID of an address pool that you own. Use this parameter to let
    #   Amazon EC2 select an address from the address pool. To specify a
    #   specific address from the address pool, use the `Address` parameter
    #   instead.
    #   @return [String]
    #
    # @!attribute [rw] network_border_group
    #   A unique set of Availability Zones, Local Zones, or Wavelength Zones
    #   from which Amazon Web Services advertises IP addresses. Use this
    #   parameter to limit the IP address to this location. IP addresses
    #   cannot move between network border groups.
    #   @return [String]
    #
    # @!attribute [rw] customer_owned_ipv_4_pool
    #   The ID of a customer-owned address pool. Use this parameter to let
    #   Amazon EC2 select an address from the address pool. Alternatively,
    #   specify a specific address from the address pool.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the Elastic IP address.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of an IPAM pool which has an Amazon-provided or BYOIP public
    #   IPv4 CIDR provisioned to it. For more information, see [Allocate
    #   sequential Elastic IP addresses from an IPAM pool][1] in the *Amazon
    #   VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-eip-pool.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddressRequest AWS API Documentation
    #
    class AllocateAddressRequest < Struct.new(
      :domain,
      :address,
      :public_ipv_4_pool,
      :network_border_group,
      :customer_owned_ipv_4_pool,
      :tag_specifications,
      :ipam_pool_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_id
    #   The ID that represents the allocation of the Elastic IP address.
    #   @return [String]
    #
    # @!attribute [rw] public_ipv_4_pool
    #   The ID of an address pool.
    #   @return [String]
    #
    # @!attribute [rw] network_border_group
    #   The set of Availability Zones, Local Zones, or Wavelength Zones from
    #   which Amazon Web Services advertises IP addresses.
    #   @return [String]
    #
    # @!attribute [rw] domain
    #   The network (`vpc`).
    #   @return [String]
    #
    # @!attribute [rw] customer_owned_ip
    #   The customer-owned IP address.
    #   @return [String]
    #
    # @!attribute [rw] customer_owned_ipv_4_pool
    #   The ID of the customer-owned address pool.
    #   @return [String]
    #
    # @!attribute [rw] carrier_ip
    #   The carrier IP address. This option is only available for network
    #   interfaces that reside in a subnet in a Wavelength Zone.
    #   @return [String]
    #
    # @!attribute [rw] public_ip
    #   The Elastic IP address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateAddressResult AWS API Documentation
    #
    class AllocateAddressResult < Struct.new(
      :allocation_id,
      :public_ipv_4_pool,
      :network_border_group,
      :domain,
      :customer_owned_ip,
      :customer_owned_ipv_4_pool,
      :carrier_ip,
      :public_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_family
    #   Specifies the instance family to be supported by the Dedicated
    #   Hosts. If you specify an instance family, the Dedicated Hosts
    #   support multiple instance types within that instance family.
    #
    #   If you want the Dedicated Hosts to support a specific instance type
    #   only, omit this parameter and specify **InstanceType** instead. You
    #   cannot specify **InstanceFamily** and **InstanceType** in the same
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the Dedicated Host during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] host_recovery
    #   Indicates whether to enable or disable host recovery for the
    #   Dedicated Host. Host recovery is disabled by default. For more
    #   information, see [ Host recovery][1] in the *Amazon EC2 User Guide*.
    #
    #   Default: `off`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on
    #   which to allocate the Dedicated Host. If you specify **OutpostArn**,
    #   you can optionally specify **AssetIds**.
    #
    #   If you are allocating the Dedicated Host in a Region, omit this
    #   parameter.
    #   @return [String]
    #
    # @!attribute [rw] host_maintenance
    #   Indicates whether to enable or disable host maintenance for the
    #   Dedicated Host. For more information, see [Host maintenance][1] in
    #   the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-maintenance.html
    #   @return [String]
    #
    # @!attribute [rw] asset_ids
    #   The IDs of the Outpost hardware assets on which to allocate the
    #   Dedicated Hosts. Targeting specific hardware assets on an Outpost
    #   can help to minimize latency between your workloads. This parameter
    #   is supported only if you specify **OutpostArn**. If you are
    #   allocating the Dedicated Hosts in a Region, omit this parameter.
    #
    #   * If you specify this parameter, you can omit **Quantity**. In this
    #     case, Amazon EC2 allocates a Dedicated Host on each specified
    #     hardware asset.
    #
    #   * If you specify both **AssetIds** and **Quantity**, then the value
    #     for **Quantity** must be equal to the number of asset IDs
    #     specified.
    #   @return [Array<String>]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] auto_placement
    #   Indicates whether the host accepts any untargeted instance launches
    #   that match its instance type configuration, or if it only accepts
    #   Host tenancy instance launches that specify its unique host ID. For
    #   more information, see [ Understanding auto-placement and
    #   affinity][1] in the *Amazon EC2 User Guide*.
    #
    #   Default: `off`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   Specifies the instance type to be supported by the Dedicated Hosts.
    #   If you specify an instance type, the Dedicated Hosts support
    #   instances of the specified instance type only.
    #
    #   If you want the Dedicated Hosts to support multiple instance types
    #   in a specific instance family, omit this parameter and specify
    #   **InstanceFamily** instead. You cannot specify **InstanceType** and
    #   **InstanceFamily** in the same request.
    #   @return [String]
    #
    # @!attribute [rw] quantity
    #   The number of Dedicated Hosts to allocate to your account with these
    #   parameters. If you are allocating the Dedicated Hosts on an Outpost,
    #   and you specify **AssetIds**, you can omit this parameter. In this
    #   case, Amazon EC2 allocates a Dedicated Host on each specified
    #   hardware asset. If you specify both **AssetIds** and **Quantity**,
    #   then the value that you specify for **Quantity** must be equal to
    #   the number of asset IDs specified.
    #   @return [Integer]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which to allocate the Dedicated Host.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHostsRequest AWS API Documentation
    #
    class AllocateHostsRequest < Struct.new(
      :instance_family,
      :tag_specifications,
      :host_recovery,
      :outpost_arn,
      :host_maintenance,
      :asset_ids,
      :availability_zone_id,
      :auto_placement,
      :client_token,
      :instance_type,
      :quantity,
      :availability_zone)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of AllocateHosts.
    #
    # @!attribute [rw] host_ids
    #   The ID of the allocated Dedicated Host. This is used to launch an
    #   instance onto a specific host.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateHostsResult AWS API Documentation
    #
    class AllocateHostsResult < Struct.new(
      :host_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the IPAM pool from which you would like to allocate a
    #   CIDR.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   The CIDR you would like to allocate from the IPAM pool. Note the
    #   following:
    #
    #   * If there is no DefaultNetmaskLength allocation rule set on the
    #     pool, you must specify either the NetmaskLength or the CIDR.
    #
    #   * If the DefaultNetmaskLength allocation rule is set on the pool,
    #     you can specify either the NetmaskLength or the CIDR and the
    #     DefaultNetmaskLength allocation rule will be ignored.
    #
    #   Possible values: Any available IPv4 or IPv6 CIDR.
    #   @return [String]
    #
    # @!attribute [rw] netmask_length
    #   The netmask length of the CIDR you would like to allocate from the
    #   IPAM pool. Note the following:
    #
    #   * If there is no DefaultNetmaskLength allocation rule set on the
    #     pool, you must specify either the NetmaskLength or the CIDR.
    #
    #   * If the DefaultNetmaskLength allocation rule is set on the pool,
    #     you can specify either the NetmaskLength or the CIDR and the
    #     DefaultNetmaskLength allocation rule will be ignored.
    #
    #   Possible netmask lengths for IPv4 addresses are 0 - 32. Possible
    #   netmask lengths for IPv6 addresses are 0 - 128.
    #   @return [Integer]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the allocation.
    #   @return [String]
    #
    # @!attribute [rw] preview_next_cidr
    #   A preview of the next available CIDR in a pool.
    #   @return [Boolean]
    #
    # @!attribute [rw] allowed_cidrs
    #   Include a particular CIDR range that can be returned by the pool.
    #   Allowed CIDRs are only allowed if using netmask length for
    #   allocation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] disallowed_cidrs
    #   Exclude a particular CIDR range from being returned by the pool.
    #   Disallowed CIDRs are only allowed if using netmask length for
    #   allocation.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateIpamPoolCidrRequest AWS API Documentation
    #
    class AllocateIpamPoolCidrRequest < Struct.new(
      :dry_run,
      :ipam_pool_id,
      :cidr,
      :netmask_length,
      :client_token,
      :description,
      :preview_next_cidr,
      :allowed_cidrs,
      :disallowed_cidrs)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_pool_allocation
    #   Information about the allocation created.
    #   @return [Types::IpamPoolAllocation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllocateIpamPoolCidrResult AWS API Documentation
    #
    class AllocateIpamPoolCidrResult < Struct.new(
      :ipam_pool_allocation)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a principal.
    #
    # @!attribute [rw] principal_type
    #   The type of principal.
    #   @return [String]
    #
    # @!attribute [rw] principal
    #   The Amazon Resource Name (ARN) of the principal.
    #   @return [String]
    #
    # @!attribute [rw] service_permission_id
    #   The ID of the service permission.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] service_id
    #   The ID of the service.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AllowedPrincipal AWS API Documentation
    #
    class AllowedPrincipal < Struct.new(
      :principal_type,
      :principal,
      :service_permission_id,
      :tags,
      :service_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an potential intermediate component of a feasible path.
    #
    # @!attribute [rw] component_id
    #   The ID of the component.
    #   @return [String]
    #
    # @!attribute [rw] component_arn
    #   The Amazon Resource Name (ARN) of the component.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AlternatePathHint AWS API Documentation
    #
    class AlternatePathHint < Struct.new(
      :component_id,
      :component_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network access control (ACL) rule.
    #
    # @!attribute [rw] cidr
    #   The IPv4 address range, in CIDR notation.
    #   @return [String]
    #
    # @!attribute [rw] egress
    #   Indicates whether the rule is an outbound rule.
    #   @return [Boolean]
    #
    # @!attribute [rw] port_range
    #   The range of ports.
    #   @return [Types::PortRange]
    #
    # @!attribute [rw] protocol
    #   The protocol.
    #   @return [String]
    #
    # @!attribute [rw] rule_action
    #   Indicates whether to allow or deny traffic that matches the rule.
    #   @return [String]
    #
    # @!attribute [rw] rule_number
    #   The rule number.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AnalysisAclRule AWS API Documentation
    #
    class AnalysisAclRule < Struct.new(
      :cidr,
      :egress,
      :port_range,
      :protocol,
      :rule_action,
      :rule_number)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a path component.
    #
    # @!attribute [rw] id
    #   The ID of the component.
    #   @return [String]
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the component.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the analysis component.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AnalysisComponent AWS API Documentation
    #
    class AnalysisComponent < Struct.new(
      :id,
      :arn,
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a load balancer listener.
    #
    # @!attribute [rw] load_balancer_port
    #   The port on which the load balancer is listening.
    #   @return [Integer]
    #
    # @!attribute [rw] instance_port
    #   \[Classic Load Balancers\] The back-end port for the listener.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AnalysisLoadBalancerListener AWS API Documentation
    #
    class AnalysisLoadBalancerListener < Struct.new(
      :load_balancer_port,
      :instance_port)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a load balancer target.
    #
    # @!attribute [rw] address
    #   The IP address.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] instance
    #   Information about the instance.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] port
    #   The port on which the target is listening.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AnalysisLoadBalancerTarget AWS API Documentation
    #
    class AnalysisLoadBalancerTarget < Struct.new(
      :address,
      :availability_zone,
      :availability_zone_id,
      :instance,
      :port)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a header. Reflects any changes made by a component as
    # traffic passes through. The fields of an inbound header are null
    # except for the first component of a path.
    #
    # @!attribute [rw] destination_addresses
    #   The destination addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] destination_port_ranges
    #   The destination port ranges.
    #   @return [Array<Types::PortRange>]
    #
    # @!attribute [rw] protocol
    #   The protocol.
    #   @return [String]
    #
    # @!attribute [rw] source_addresses
    #   The source addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] source_port_ranges
    #   The source port ranges.
    #   @return [Array<Types::PortRange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AnalysisPacketHeader AWS API Documentation
    #
    class AnalysisPacketHeader < Struct.new(
      :destination_addresses,
      :destination_port_ranges,
      :protocol,
      :source_addresses,
      :source_port_ranges)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route table route.
    #
    # @!attribute [rw] destination_cidr
    #   The destination IPv4 address, in CIDR notation.
    #   @return [String]
    #
    # @!attribute [rw] destination_prefix_list_id
    #   The prefix of the Amazon Web Services service.
    #   @return [String]
    #
    # @!attribute [rw] egress_only_internet_gateway_id
    #   The ID of an egress-only internet gateway.
    #   @return [String]
    #
    # @!attribute [rw] gateway_id
    #   The ID of the gateway, such as an internet gateway or virtual
    #   private gateway.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance, such as a NAT instance.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway_id
    #   The ID of a NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of a network interface.
    #   @return [String]
    #
    # @!attribute [rw] origin
    #   Describes how the route was created. The following are the possible
    #   values:
    #
    #   * CreateRouteTable - The route was automatically created when the
    #     route table was created.
    #
    #   * CreateRoute - The route was manually added to the route table.
    #
    #   * EnableVgwRoutePropagation - The route was propagated by route
    #     propagation.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of a transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of a VPC peering connection.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state. The following are the possible values:
    #
    #   * active
    #
    #   * blackhole
    #   @return [String]
    #
    # @!attribute [rw] carrier_gateway_id
    #   The ID of a carrier gateway.
    #   @return [String]
    #
    # @!attribute [rw] core_network_arn
    #   The Amazon Resource Name (ARN) of a core network.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of a local gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AnalysisRouteTableRoute AWS API Documentation
    #
    class AnalysisRouteTableRoute < Struct.new(
      :destination_cidr,
      :destination_prefix_list_id,
      :egress_only_internet_gateway_id,
      :gateway_id,
      :instance_id,
      :nat_gateway_id,
      :network_interface_id,
      :origin,
      :transit_gateway_id,
      :vpc_peering_connection_id,
      :state,
      :carrier_gateway_id,
      :core_network_arn,
      :local_gateway_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a security group rule.
    #
    # @!attribute [rw] cidr
    #   The IPv4 address range, in CIDR notation.
    #   @return [String]
    #
    # @!attribute [rw] direction
    #   The direction. The following are the possible values:
    #
    #   * egress
    #
    #   * ingress
    #   @return [String]
    #
    # @!attribute [rw] security_group_id
    #   The security group ID.
    #   @return [String]
    #
    # @!attribute [rw] port_range
    #   The port range.
    #   @return [Types::PortRange]
    #
    # @!attribute [rw] prefix_list_id
    #   The prefix list ID.
    #   @return [String]
    #
    # @!attribute [rw] protocol
    #   The protocol name.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AnalysisSecurityGroupRule AWS API Documentation
    #
    class AnalysisSecurityGroupRule < Struct.new(
      :cidr,
      :direction,
      :security_group_id,
      :port_range,
      :prefix_list_id,
      :protocol)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC in which the associated target network is located.
    #   @return [String]
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of the security groups to apply to the associated target
    #   network. Up to 5 security groups can be applied to an associated
    #   target network.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ApplySecurityGroupsToClientVpnTargetNetworkRequest AWS API Documentation
    #
    class ApplySecurityGroupsToClientVpnTargetNetworkRequest < Struct.new(
      :client_vpn_endpoint_id,
      :vpc_id,
      :security_group_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] security_group_ids
    #   The IDs of the applied security groups.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ApplySecurityGroupsToClientVpnTargetNetworkResult AWS API Documentation
    #
    class ApplySecurityGroupsToClientVpnTargetNetworkResult < Struct.new(
      :security_group_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # An Autonomous System Number (ASN) and BYOIP CIDR association.
    #
    # @!attribute [rw] asn
    #   The association's ASN.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   The association's CIDR.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The association's status message.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The association's state.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AsnAssociation AWS API Documentation
    #
    class AsnAssociation < Struct.new(
      :asn,
      :cidr,
      :status_message,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Provides authorization for Amazon to bring an Autonomous System Number
    # (ASN) to a specific Amazon Web Services account using bring your own
    # ASN (BYOASN). For details on the format of the message and signature,
    # see [Tutorial: Bring your ASN to IPAM][1] in the *Amazon VPC IPAM
    # guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoasn.html
    #
    # @!attribute [rw] message
    #   The authorization context's message.
    #   @return [String]
    #
    # @!attribute [rw] signature
    #   The authorization context's signature.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AsnAuthorizationContext AWS API Documentation
    #
    class AsnAuthorizationContext < Struct.new(
      :message,
      :signature)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipv_6_prefix_count
    #   The number of IPv6 prefixes that Amazon Web Services automatically
    #   assigns to the network interface. You cannot use this option if you
    #   use the `Ipv6Prefixes` option.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_prefixes
    #   One or more IPv6 prefixes assigned to the network interface. You
    #   can't use this option if you use the `Ipv6PrefixCount` option.
    #   @return [Array<String>]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_addresses
    #   The IPv6 addresses to be assigned to the network interface. You
    #   can't use this option if you're specifying a number of IPv6
    #   addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] ipv_6_address_count
    #   The number of additional IPv6 addresses to assign to the network
    #   interface. The specified number of IPv6 addresses are assigned in
    #   addition to the existing IPv6 addresses that are already assigned to
    #   the network interface. Amazon EC2 automatically selects the IPv6
    #   addresses from the subnet range. You can't use this option if
    #   specifying specific IPv6 addresses.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6AddressesRequest AWS API Documentation
    #
    class AssignIpv6AddressesRequest < Struct.new(
      :ipv_6_prefix_count,
      :ipv_6_prefixes,
      :network_interface_id,
      :ipv_6_addresses,
      :ipv_6_address_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] assigned_ipv_6_addresses
    #   The new IPv6 addresses assigned to the network interface. Existing
    #   IPv6 addresses that were assigned to the network interface before
    #   the request are not included.
    #   @return [Array<String>]
    #
    # @!attribute [rw] assigned_ipv_6_prefixes
    #   The IPv6 prefixes that are assigned to the network interface.
    #   @return [Array<String>]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignIpv6AddressesResult AWS API Documentation
    #
    class AssignIpv6AddressesResult < Struct.new(
      :assigned_ipv_6_addresses,
      :assigned_ipv_6_prefixes,
      :network_interface_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for AssignPrivateIpAddresses.
    #
    # @!attribute [rw] ipv_4_prefixes
    #   One or more IPv4 prefixes assigned to the network interface. You
    #   can't use this option if you use the `Ipv4PrefixCount` option.
    #   @return [Array<String>]
    #
    # @!attribute [rw] ipv_4_prefix_count
    #   The number of IPv4 prefixes that Amazon Web Services automatically
    #   assigns to the network interface. You can't use this option if you
    #   use the `Ipv4 Prefixes` option.
    #   @return [Integer]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_addresses
    #   The IP addresses to be assigned as a secondary private IP address to
    #   the network interface. You can't specify this parameter when also
    #   specifying a number of secondary IP addresses.
    #
    #   If you don't specify an IP address, Amazon EC2 automatically
    #   selects an IP address within the subnet range.
    #   @return [Array<String>]
    #
    # @!attribute [rw] secondary_private_ip_address_count
    #   The number of secondary IP addresses to assign to the network
    #   interface. You can't specify this parameter when also specifying
    #   private IP addresses.
    #   @return [Integer]
    #
    # @!attribute [rw] allow_reassignment
    #   Indicates whether to allow an IP address that is already assigned to
    #   another network interface or instance to be reassigned to the
    #   specified network interface.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddressesRequest AWS API Documentation
    #
    class AssignPrivateIpAddressesRequest < Struct.new(
      :ipv_4_prefixes,
      :ipv_4_prefix_count,
      :network_interface_id,
      :private_ip_addresses,
      :secondary_private_ip_address_count,
      :allow_reassignment)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] assigned_private_ip_addresses
    #   The private IP addresses assigned to the network interface.
    #   @return [Array<Types::AssignedPrivateIpAddress>]
    #
    # @!attribute [rw] assigned_ipv_4_prefixes
    #   The IPv4 prefixes that are assigned to the network interface.
    #   @return [Array<Types::Ipv4PrefixSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateIpAddressesResult AWS API Documentation
    #
    class AssignPrivateIpAddressesResult < Struct.new(
      :network_interface_id,
      :assigned_private_ip_addresses,
      :assigned_ipv_4_prefixes)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_addresses
    #   The private IPv4 addresses you want to assign to the private NAT
    #   gateway.
    #   @return [Array<String>]
    #
    # @!attribute [rw] private_ip_address_count
    #   The number of private IP addresses to assign to the NAT gateway. You
    #   can't specify this parameter when also specifying private IP
    #   addresses.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateNatGatewayAddressRequest AWS API Documentation
    #
    class AssignPrivateNatGatewayAddressRequest < Struct.new(
      :nat_gateway_id,
      :private_ip_addresses,
      :private_ip_address_count,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway_addresses
    #   NAT gateway IP addresses.
    #   @return [Array<Types::NatGatewayAddress>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignPrivateNatGatewayAddressResult AWS API Documentation
    #
    class AssignPrivateNatGatewayAddressResult < Struct.new(
      :nat_gateway_id,
      :nat_gateway_addresses)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the private IP addresses assigned to a network interface.
    #
    # @!attribute [rw] private_ip_address
    #   The private IP address assigned to the network interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssignedPrivateIpAddress AWS API Documentation
    #
    class AssignedPrivateIpAddress < Struct.new(
      :private_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_id
    #   The allocation ID. This is required.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance. The instance must have exactly one attached
    #   network interface. You can specify either the instance ID or the
    #   network interface ID, but not both.
    #   @return [String]
    #
    # @!attribute [rw] public_ip
    #   Deprecated.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface. If the instance has more than one
    #   network interface, you must specify a network interface ID.
    #
    #   You can specify either the instance ID or the network interface ID,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The primary or secondary private IP address to associate with the
    #   Elastic IP address. If no private IP address is specified, the
    #   Elastic IP address is associated with the primary private IP
    #   address.
    #   @return [String]
    #
    # @!attribute [rw] allow_reassociation
    #   Reassociation is automatic, but you can specify false to ensure the
    #   operation fails if the Elastic IP address is already associated with
    #   another resource.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddressRequest AWS API Documentation
    #
    class AssociateAddressRequest < Struct.new(
      :allocation_id,
      :instance_id,
      :public_ip,
      :dry_run,
      :network_interface_id,
      :private_ip_address,
      :allow_reassociation)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_id
    #   The ID that represents the association of the Elastic IP address
    #   with an instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateAddressResult AWS API Documentation
    #
    class AssociateAddressResult < Struct.new(
      :association_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] unused_reservation_billing_owner_id
    #   The ID of the consumer account to which to assign billing.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateCapacityReservationBillingOwnerRequest AWS API Documentation
    #
    class AssociateCapacityReservationBillingOwnerRequest < Struct.new(
      :dry_run,
      :capacity_reservation_id,
      :unused_reservation_billing_owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateCapacityReservationBillingOwnerResult AWS API Documentation
    #
    class AssociateCapacityReservationBillingOwnerResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet to associate with the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateClientVpnTargetNetworkRequest AWS API Documentation
    #
    class AssociateClientVpnTargetNetworkRequest < Struct.new(
      :client_vpn_endpoint_id,
      :subnet_id,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_id
    #   The unique ID of the target network association.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The current state of the target network association.
    #   @return [Types::AssociationStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateClientVpnTargetNetworkResult AWS API Documentation
    #
    class AssociateClientVpnTargetNetworkResult < Struct.new(
      :association_id,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dhcp_options_id
    #   The ID of the DHCP options set, or `default` to associate no DHCP
    #   options with the VPC.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateDhcpOptionsRequest AWS API Documentation
    #
    class AssociateDhcpOptionsRequest < Struct.new(
      :dhcp_options_id,
      :vpc_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] certificate_arn
    #   The ARN of the ACM certificate with which to associate the IAM role.
    #   @return [String]
    #
    # @!attribute [rw] role_arn
    #   The ARN of the IAM role to associate with the ACM certificate. You
    #   can associate up to 16 IAM roles with an ACM certificate.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateEnclaveCertificateIamRoleRequest AWS API Documentation
    #
    class AssociateEnclaveCertificateIamRoleRequest < Struct.new(
      :certificate_arn,
      :role_arn,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] certificate_s3_bucket_name
    #   The name of the Amazon S3 bucket to which the certificate was
    #   uploaded.
    #   @return [String]
    #
    # @!attribute [rw] certificate_s3_object_key
    #   The Amazon S3 object key where the certificate, certificate chain,
    #   and encrypted private key bundle are stored. The object key is
    #   formatted as follows: `role_arn`/`certificate_arn`.
    #   @return [String]
    #
    # @!attribute [rw] encryption_kms_key_id
    #   The ID of the KMS key used to encrypt the private key of the
    #   certificate.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateEnclaveCertificateIamRoleResult AWS API Documentation
    #
    class AssociateEnclaveCertificateIamRoleResult < Struct.new(
      :certificate_s3_bucket_name,
      :certificate_s3_object_key,
      :encryption_kms_key_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] iam_instance_profile
    #   The IAM instance profile.
    #   @return [Types::IamInstanceProfileSpecification]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfileRequest AWS API Documentation
    #
    class AssociateIamInstanceProfileRequest < Struct.new(
      :iam_instance_profile,
      :instance_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] iam_instance_profile_association
    #   Information about the IAM instance profile association.
    #   @return [Types::IamInstanceProfileAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIamInstanceProfileResult AWS API Documentation
    #
    class AssociateIamInstanceProfileResult < Struct.new(
      :iam_instance_profile_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_event_window_id
    #   The ID of the event window.
    #   @return [String]
    #
    # @!attribute [rw] association_target
    #   One or more targets associated with the specified event window.
    #   @return [Types::InstanceEventWindowAssociationRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateInstanceEventWindowRequest AWS API Documentation
    #
    class AssociateInstanceEventWindowRequest < Struct.new(
      :dry_run,
      :instance_event_window_id,
      :association_target)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_event_window
    #   Information about the event window.
    #   @return [Types::InstanceEventWindow]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateInstanceEventWindowResult AWS API Documentation
    #
    class AssociateInstanceEventWindowResult < Struct.new(
      :instance_event_window)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] asn
    #   A public 2-byte or 4-byte ASN.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   The BYOIP CIDR you want to associate with an ASN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIpamByoasnRequest AWS API Documentation
    #
    class AssociateIpamByoasnRequest < Struct.new(
      :dry_run,
      :asn,
      :cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] asn_association
    #   The ASN and BYOIP CIDR association.
    #   @return [Types::AsnAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIpamByoasnResult AWS API Documentation
    #
    class AssociateIpamByoasnResult < Struct.new(
      :asn_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_id
    #   An IPAM ID.
    #   @return [String]
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   A resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   Tag specifications.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A client token.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIpamResourceDiscoveryRequest AWS API Documentation
    #
    class AssociateIpamResourceDiscoveryRequest < Struct.new(
      :dry_run,
      :ipam_id,
      :ipam_resource_discovery_id,
      :tag_specifications,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_resource_discovery_association
    #   A resource discovery association. An associated resource discovery
    #   is a resource discovery that has been associated with an IPAM.
    #   @return [Types::IpamResourceDiscoveryAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateIpamResourceDiscoveryResult AWS API Documentation
    #
    class AssociateIpamResourceDiscoveryResult < Struct.new(
      :ipam_resource_discovery_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] allocation_ids
    #   The allocation IDs of EIPs that you want to associate with your NAT
    #   gateway.
    #   @return [Array<String>]
    #
    # @!attribute [rw] private_ip_addresses
    #   The private IPv4 addresses that you want to assign to the NAT
    #   gateway.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateNatGatewayAddressRequest AWS API Documentation
    #
    class AssociateNatGatewayAddressRequest < Struct.new(
      :nat_gateway_id,
      :allocation_ids,
      :private_ip_addresses,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway_addresses
    #   The IP addresses.
    #   @return [Array<Types::NatGatewayAddress>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateNatGatewayAddressResult AWS API Documentation
    #
    class AssociateNatGatewayAddressResult < Struct.new(
      :nat_gateway_id,
      :nat_gateway_addresses)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The unique identifier for the route server to be associated.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC to associate with the route server.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteServerRequest AWS API Documentation
    #
    class AssociateRouteServerRequest < Struct.new(
      :route_server_id,
      :vpc_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_association
    #   Information about the association between the route server and the
    #   VPC.
    #   @return [Types::RouteServerAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteServerResult AWS API Documentation
    #
    class AssociateRouteServerResult < Struct.new(
      :route_server_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] gateway_id
    #   The ID of the internet gateway or virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] public_ipv_4_pool
    #   The ID of a public IPv4 pool. A public IPv4 pool is a pool of IPv4
    #   addresses that you've brought to Amazon Web Services with BYOIP.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTableRequest AWS API Documentation
    #
    class AssociateRouteTableRequest < Struct.new(
      :gateway_id,
      :public_ipv_4_pool,
      :dry_run,
      :subnet_id,
      :route_table_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_id
    #   The route table association ID. This ID is required for
    #   disassociating the route table.
    #   @return [String]
    #
    # @!attribute [rw] association_state
    #   The state of the association.
    #   @return [Types::RouteTableAssociationState]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateRouteTableResult AWS API Documentation
    #
    class AssociateRouteTableResult < Struct.new(
      :association_id,
      :association_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] group_id
    #   A security group ID.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   A VPC ID.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSecurityGroupVpcRequest AWS API Documentation
    #
    class AssociateSecurityGroupVpcRequest < Struct.new(
      :group_id,
      :vpc_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] state
    #   The state of the association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSecurityGroupVpcResult AWS API Documentation
    #
    class AssociateSecurityGroupVpcResult < Struct.new(
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipv_6_ipam_pool_id
    #   An IPv6 IPAM pool ID.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_netmask_length
    #   An IPv6 netmask length.
    #   @return [Integer]
    #
    # @!attribute [rw] subnet_id
    #   The ID of your subnet.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   The IPv6 CIDR block for your subnet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlockRequest AWS API Documentation
    #
    class AssociateSubnetCidrBlockRequest < Struct.new(
      :ipv_6_ipam_pool_id,
      :ipv_6_netmask_length,
      :subnet_id,
      :ipv_6_cidr_block)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipv_6_cidr_block_association
    #   Information about the IPv6 association.
    #   @return [Types::SubnetIpv6CidrBlockAssociation]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateSubnetCidrBlockResult AWS API Documentation
    #
    class AssociateSubnetCidrBlockResult < Struct.new(
      :ipv_6_cidr_block_association,
      :subnet_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment to associate with the
    #   transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets to associate with the transit gateway
    #   multicast domain.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayMulticastDomainRequest AWS API Documentation
    #
    class AssociateTransitGatewayMulticastDomainRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :transit_gateway_attachment_id,
      :subnet_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] associations
    #   Information about the transit gateway multicast domain associations.
    #   @return [Types::TransitGatewayMulticastDomainAssociations]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayMulticastDomainResult AWS API Documentation
    #
    class AssociateTransitGatewayMulticastDomainResult < Struct.new(
      :associations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_table_id
    #   The ID of the transit gateway policy table to associate with the
    #   transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment to associate with the
    #   policy table.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayPolicyTableRequest AWS API Documentation
    #
    class AssociateTransitGatewayPolicyTableRequest < Struct.new(
      :transit_gateway_policy_table_id,
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association
    #   Describes the association of a transit gateway and a transit gateway
    #   policy table.
    #   @return [Types::TransitGatewayPolicyTableAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayPolicyTableResult AWS API Documentation
    #
    class AssociateTransitGatewayPolicyTableResult < Struct.new(
      :association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayRouteTableRequest AWS API Documentation
    #
    class AssociateTransitGatewayRouteTableRequest < Struct.new(
      :transit_gateway_route_table_id,
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association
    #   The ID of the association.
    #   @return [Types::TransitGatewayAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTransitGatewayRouteTableResult AWS API Documentation
    #
    class AssociateTransitGatewayRouteTableResult < Struct.new(
      :association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] branch_interface_id
    #   The ID of the branch network interface.
    #   @return [String]
    #
    # @!attribute [rw] trunk_interface_id
    #   The ID of the trunk network interface.
    #   @return [String]
    #
    # @!attribute [rw] vlan_id
    #   The ID of the VLAN. This applies to the VLAN protocol.
    #   @return [Integer]
    #
    # @!attribute [rw] gre_key
    #   The application key. This applies to the GRE protocol.
    #   @return [Integer]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTrunkInterfaceRequest AWS API Documentation
    #
    class AssociateTrunkInterfaceRequest < Struct.new(
      :branch_interface_id,
      :trunk_interface_id,
      :vlan_id,
      :gre_key,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] interface_association
    #   Information about the association between the trunk network
    #   interface and branch network interface.
    #   @return [Types::TrunkInterfaceAssociation]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateTrunkInterfaceResult AWS API Documentation
    #
    class AssociateTrunkInterfaceResult < Struct.new(
      :interface_association,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cidr_block
    #   An IPv4 CIDR block to associate with the VPC.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block_network_border_group
    #   The name of the location from which we advertise the IPV6 CIDR
    #   block. Use this parameter to limit the CIDR block to this location.
    #
    #   You must set `AmazonProvidedIpv6CidrBlock` to `true` to use this
    #   parameter.
    #
    #   You can have one IPv6 CIDR block association per network border
    #   group.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_pool
    #   The ID of an IPv6 address pool from which to allocate the IPv6 CIDR
    #   block.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   An IPv6 CIDR block from the IPv6 address pool. You must also specify
    #   `Ipv6Pool` in the request.
    #
    #   To let Amazon choose the IPv6 CIDR block for you, omit this
    #   parameter.
    #   @return [String]
    #
    # @!attribute [rw] ipv_4_ipam_pool_id
    #   Associate a CIDR allocated from an IPv4 IPAM pool to a VPC. For more
    #   information about Amazon VPC IP Address Manager (IPAM), see [What is
    #   IPAM?][1] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] ipv_4_netmask_length
    #   The netmask length of the IPv4 CIDR you would like to associate from
    #   an Amazon VPC IP Address Manager (IPAM) pool. For more information
    #   about IPAM, see [What is IPAM?][1] in the *Amazon VPC IPAM User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_ipam_pool_id
    #   Associates a CIDR allocated from an IPv6 IPAM pool to a VPC. For
    #   more information about Amazon VPC IP Address Manager (IPAM), see
    #   [What is IPAM?][1] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_netmask_length
    #   The netmask length of the IPv6 CIDR you would like to associate from
    #   an Amazon VPC IP Address Manager (IPAM) pool. For more information
    #   about IPAM, see [What is IPAM?][1] in the *Amazon VPC IPAM User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html
    #   @return [Integer]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] amazon_provided_ipv_6_cidr_block
    #   Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length
    #   for the VPC. You cannot specify the range of IPv6 addresses or the
    #   size of the CIDR block.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlockRequest AWS API Documentation
    #
    class AssociateVpcCidrBlockRequest < Struct.new(
      :cidr_block,
      :ipv_6_cidr_block_network_border_group,
      :ipv_6_pool,
      :ipv_6_cidr_block,
      :ipv_4_ipam_pool_id,
      :ipv_4_netmask_length,
      :ipv_6_ipam_pool_id,
      :ipv_6_netmask_length,
      :vpc_id,
      :amazon_provided_ipv_6_cidr_block)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipv_6_cidr_block_association
    #   Information about the IPv6 CIDR block association.
    #   @return [Types::VpcIpv6CidrBlockAssociation]
    #
    # @!attribute [rw] cidr_block_association
    #   Information about the IPv4 CIDR block association.
    #   @return [Types::VpcCidrBlockAssociation]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociateVpcCidrBlockResult AWS API Documentation
    #
    class AssociateVpcCidrBlockResult < Struct.new(
      :ipv_6_cidr_block_association,
      :cidr_block_association,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the associated IAM roles.
    #
    # @!attribute [rw] associated_role_arn
    #   The ARN of the associated IAM role.
    #   @return [String]
    #
    # @!attribute [rw] certificate_s3_bucket_name
    #   The name of the Amazon S3 bucket in which the Amazon S3 object is
    #   stored.
    #   @return [String]
    #
    # @!attribute [rw] certificate_s3_object_key
    #   The key of the Amazon S3 object where the certificate, certificate
    #   chain, and encrypted private key bundle are stored. The object key
    #   is formatted as follows: `role_arn`/`certificate_arn`.
    #   @return [String]
    #
    # @!attribute [rw] encryption_kms_key_id
    #   The ID of the KMS key used to encrypt the private key.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociatedRole AWS API Documentation
    #
    class AssociatedRole < Struct.new(
      :associated_role_arn,
      :certificate_s3_bucket_name,
      :certificate_s3_object_key,
      :encryption_kms_key_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a target network that is associated with a Client VPN
    # endpoint. A target network is a subnet in a VPC.
    #
    # @!attribute [rw] network_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] network_type
    #   The target network type.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociatedTargetNetwork AWS API Documentation
    #
    class AssociatedTargetNetwork < Struct.new(
      :network_id,
      :network_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of a target network association.
    #
    # @!attribute [rw] code
    #   The state of the target network association.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message about the status of the target network association, if
    #   applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AssociationStatus AWS API Documentation
    #
    class AssociationStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes integration options for Amazon Athena.
    #
    # @!attribute [rw] integration_result_s3_destination_arn
    #   The location in Amazon S3 to store the generated CloudFormation
    #   template.
    #   @return [String]
    #
    # @!attribute [rw] partition_load_frequency
    #   The schedule for adding new partitions to the table.
    #   @return [String]
    #
    # @!attribute [rw] partition_start_date
    #   The start date for the partition.
    #   @return [Time]
    #
    # @!attribute [rw] partition_end_date
    #   The end date for the partition.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AthenaIntegration AWS API Documentation
    #
    class AthenaIntegration < Struct.new(
      :integration_result_s3_destination_arn,
      :partition_load_frequency,
      :partition_start_date,
      :partition_end_date)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the EC2-Classic instance.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the ClassicLink-enabled VPC.
    #   @return [String]
    #
    # @!attribute [rw] groups
    #   The IDs of the security groups. You cannot specify security groups
    #   from a different VPC.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpcRequest AWS API Documentation
    #
    class AttachClassicLinkVpcRequest < Struct.new(
      :dry_run,
      :instance_id,
      :vpc_id,
      :groups)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachClassicLinkVpcResult AWS API Documentation
    #
    class AttachClassicLinkVpcResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] internet_gateway_id
    #   The ID of the internet gateway.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachInternetGatewayRequest AWS API Documentation
    #
    class AttachInternetGatewayRequest < Struct.new(
      :dry_run,
      :internet_gateway_id,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for AttachNetworkInterface.
    #
    # @!attribute [rw] network_card_index
    #   The index of the network card. Some instance types support multiple
    #   network cards. The primary network interface must be assigned to
    #   network card index 0. The default is network card index 0.
    #   @return [Integer]
    #
    # @!attribute [rw] ena_srd_specification
    #   Configures ENA Express for the network interface that this action
    #   attaches to the instance.
    #   @return [Types::EnaSrdSpecification]
    #
    # @!attribute [rw] ena_queue_count
    #   The number of ENA queues to be created with the instance.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] device_index
    #   The index of the device for the network interface attachment.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterfaceRequest AWS API Documentation
    #
    class AttachNetworkInterfaceRequest < Struct.new(
      :network_card_index,
      :ena_srd_specification,
      :ena_queue_count,
      :dry_run,
      :network_interface_id,
      :instance_id,
      :device_index)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of AttachNetworkInterface.
    #
    # @!attribute [rw] attachment_id
    #   The ID of the network interface attachment.
    #   @return [String]
    #
    # @!attribute [rw] network_card_index
    #   The index of the network card.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachNetworkInterfaceResult AWS API Documentation
    #
    class AttachNetworkInterfaceResult < Struct.new(
      :attachment_id,
      :network_card_index)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_trust_provider_id
    #   The ID of the Verified Access trust provider.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVerifiedAccessTrustProviderRequest AWS API Documentation
    #
    class AttachVerifiedAccessTrustProviderRequest < Struct.new(
      :verified_access_instance_id,
      :verified_access_trust_provider_id,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_trust_provider
    #   Details about the Verified Access trust provider.
    #   @return [Types::VerifiedAccessTrustProvider]
    #
    # @!attribute [rw] verified_access_instance
    #   Details about the Verified Access instance.
    #   @return [Types::VerifiedAccessInstance]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVerifiedAccessTrustProviderResult AWS API Documentation
    #
    class AttachVerifiedAccessTrustProviderResult < Struct.new(
      :verified_access_trust_provider,
      :verified_access_instance)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] device
    #   The device name (for example, `/dev/sdh` or `xvdh`).
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the EBS volume. The volume and instance must be within the
    #   same Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVolumeRequest AWS API Documentation
    #
    class AttachVolumeRequest < Struct.new(
      :device,
      :instance_id,
      :volume_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for AttachVpnGateway.
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] vpn_gateway_id
    #   The ID of the virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGatewayRequest AWS API Documentation
    #
    class AttachVpnGatewayRequest < Struct.new(
      :vpc_id,
      :vpn_gateway_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of AttachVpnGateway.
    #
    # @!attribute [rw] vpc_attachment
    #   Information about the attachment.
    #   @return [Types::VpcAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachVpnGatewayResult AWS API Documentation
    #
    class AttachVpnGatewayResult < Struct.new(
      :vpc_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # ENA Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
    # technology to increase the maximum bandwidth used per stream and
    # minimize tail latency of network traffic between EC2 instances. With
    # ENA Express, you can communicate between two EC2 instances in the same
    # subnet within the same account, or in different accounts. Both sending
    # and receiving instances must have ENA Express enabled.
    #
    # To improve the reliability of network packet delivery, ENA Express
    # reorders network packets on the receiving end by default. However,
    # some UDP-based applications are designed to handle network packets
    # that are out of order to reduce the overhead for packet delivery at
    # the network layer. When ENA Express is enabled, you can specify
    # whether UDP network traffic uses it.
    #
    # @!attribute [rw] ena_srd_enabled
    #   Indicates whether ENA Express is enabled for the network interface.
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_srd_udp_specification
    #   Configures ENA Express for UDP network traffic.
    #   @return [Types::AttachmentEnaSrdUdpSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachmentEnaSrdSpecification AWS API Documentation
    #
    class AttachmentEnaSrdSpecification < Struct.new(
      :ena_srd_enabled,
      :ena_srd_udp_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # ENA Express is compatible with both TCP and UDP transport protocols.
    # When it's enabled, TCP traffic automatically uses it. However, some
    # UDP-based applications are designed to handle network packets that are
    # out of order, without a need for retransmission, such as live video
    # broadcasting or other near-real-time applications. For UDP traffic,
    # you can specify whether to use ENA Express, based on your application
    # environment needs.
    #
    # @!attribute [rw] ena_srd_udp_enabled
    #   Indicates whether UDP traffic to and from the instance uses ENA
    #   Express. To specify this setting, you must first enable ENA Express.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttachmentEnaSrdUdpSpecification AWS API Documentation
    #
    class AttachmentEnaSrdUdpSpecification < Struct.new(
      :ena_srd_udp_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a value for a resource attribute that is a Boolean value.
    #
    # @!attribute [rw] value
    #   The attribute value. The valid values are `true` or `false`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttributeBooleanValue AWS API Documentation
    #
    class AttributeBooleanValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # A summary report for the attribute across all Regions.
    #
    # @!attribute [rw] attribute_name
    #   The name of the attribute.
    #   @return [String]
    #
    # @!attribute [rw] most_frequent_value
    #   The configuration value that is most frequently observed for the
    #   attribute.
    #   @return [String]
    #
    # @!attribute [rw] number_of_matched_accounts
    #   The number of accounts with the same configuration value for the
    #   attribute that is most frequently observed.
    #   @return [Integer]
    #
    # @!attribute [rw] number_of_unmatched_accounts
    #   The number of accounts with a configuration value different from the
    #   most frequently observed value for the attribute.
    #   @return [Integer]
    #
    # @!attribute [rw] regional_summaries
    #   The summary report for each Region for the attribute.
    #   @return [Array<Types::RegionalSummary>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttributeSummary AWS API Documentation
    #
    class AttributeSummary < Struct.new(
      :attribute_name,
      :most_frequent_value,
      :number_of_matched_accounts,
      :number_of_unmatched_accounts,
      :regional_summaries)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a value for a resource attribute that is a String.
    #
    # @!attribute [rw] value
    #   The attribute value. The value is case-sensitive.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AttributeValue AWS API Documentation
    #
    class AttributeValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about an authorization rule.
    #
    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint with which the authorization rule
    #   is associated.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A brief description of the authorization rule.
    #   @return [String]
    #
    # @!attribute [rw] group_id
    #   The ID of the Active Directory group to which the authorization rule
    #   grants access.
    #   @return [String]
    #
    # @!attribute [rw] access_all
    #   Indicates whether the authorization rule grants access to all
    #   clients.
    #   @return [Boolean]
    #
    # @!attribute [rw] destination_cidr
    #   The IPv4 address range, in CIDR notation, of the network to which
    #   the authorization rule applies.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The current state of the authorization rule.
    #   @return [Types::ClientVpnAuthorizationRuleStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizationRule AWS API Documentation
    #
    class AuthorizationRule < Struct.new(
      :client_vpn_endpoint_id,
      :description,
      :group_id,
      :access_all,
      :destination_cidr,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] target_network_cidr
    #   The IPv4 address range, in CIDR notation, of the network for which
    #   access is being authorized.
    #   @return [String]
    #
    # @!attribute [rw] access_group_id
    #   The ID of the group to grant access to, for example, the Active
    #   Directory group or identity provider (IdP) group. Required if
    #   `AuthorizeAllGroups` is `false` or not specified.
    #   @return [String]
    #
    # @!attribute [rw] authorize_all_groups
    #   Indicates whether to grant access to all clients. Specify `true` to
    #   grant all clients who successfully establish a VPN connection access
    #   to the network. Must be set to `true` if `AccessGroupId` is not
    #   specified.
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   A brief description of the authorization rule.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeClientVpnIngressRequest AWS API Documentation
    #
    class AuthorizeClientVpnIngressRequest < Struct.new(
      :client_vpn_endpoint_id,
      :target_network_cidr,
      :access_group_id,
      :authorize_all_groups,
      :description,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] status
    #   The current state of the authorization rule.
    #   @return [Types::ClientVpnAuthorizationRuleStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeClientVpnIngressResult AWS API Documentation
    #
    class AuthorizeClientVpnIngressResult < Struct.new(
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tag_specifications
    #   The tags applied to the security group rule.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] source_security_group_name
    #   Not supported. Use IP permissions instead.
    #   @return [String]
    #
    # @!attribute [rw] source_security_group_owner_id
    #   Not supported. Use IP permissions instead.
    #   @return [String]
    #
    # @!attribute [rw] ip_protocol
    #   Not supported. Use IP permissions instead.
    #   @return [String]
    #
    # @!attribute [rw] from_port
    #   Not supported. Use IP permissions instead.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   Not supported. Use IP permissions instead.
    #   @return [Integer]
    #
    # @!attribute [rw] cidr_ip
    #   Not supported. Use IP permissions instead.
    #   @return [String]
    #
    # @!attribute [rw] ip_permissions
    #   The permissions for the security group rules.
    #   @return [Array<Types::IpPermission>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgressRequest AWS API Documentation
    #
    class AuthorizeSecurityGroupEgressRequest < Struct.new(
      :tag_specifications,
      :dry_run,
      :group_id,
      :source_security_group_name,
      :source_security_group_owner_id,
      :ip_protocol,
      :from_port,
      :to_port,
      :cidr_ip,
      :ip_permissions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @!attribute [rw] security_group_rules
    #   Information about the outbound (egress) security group rules that
    #   were added.
    #   @return [Array<Types::SecurityGroupRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupEgressResult AWS API Documentation
    #
    class AuthorizeSecurityGroupEgressResult < Struct.new(
      :return,
      :security_group_rules)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cidr_ip
    #   The IPv4 address range, in CIDR format.
    #
    #   <note markdown="1"> Amazon Web Services [canonicalizes][1] IPv4 and IPv6 CIDRs. For
    #   example, if you specify 100.68.0.18/18 for the CIDR block, Amazon
    #   Web Services canonicalizes the CIDR block to 100.68.0.0/18. Any
    #   subsequent DescribeSecurityGroups and DescribeSecurityGroupRules
    #   calls will return the canonicalized form of the CIDR block.
    #   Additionally, if you attempt to add another rule with the
    #   non-canonical form of the CIDR (such as 100.68.0.18/18) and there is
    #   already a rule for the canonicalized form of the CIDR block (such as
    #   100.68.0.0/18), the API throws an duplicate rule error.
    #
    #    </note>
    #
    #   To specify an IPv6 address range, use IP permissions instead.
    #
    #   To specify multiple rules and descriptions for the rules, use IP
    #   permissions instead.
    #
    #
    #
    #   [1]: https://en.wikipedia.org/wiki/Canonicalization
    #   @return [String]
    #
    # @!attribute [rw] from_port
    #   If the protocol is TCP or UDP, this is the start of the port range.
    #   If the protocol is ICMP, this is the ICMP type or -1 (all ICMP
    #   types).
    #
    #   To specify multiple rules and descriptions for the rules, use IP
    #   permissions instead.
    #   @return [Integer]
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   \[Default VPC\] The name of the security group. For security groups
    #   for a default VPC you can specify either the ID or the name of the
    #   security group. For security groups for a nondefault VPC, you must
    #   specify the ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] ip_permissions
    #   The permissions for the security group rules.
    #   @return [Array<Types::IpPermission>]
    #
    # @!attribute [rw] ip_protocol
    #   The IP protocol name (`tcp`, `udp`, `icmp`) or number (see [Protocol
    #   Numbers][1]). To specify all protocols, use `-1`.
    #
    #   To specify `icmpv6`, use IP permissions instead.
    #
    #   If you specify a protocol other than one of the supported values,
    #   traffic is allowed on all ports, regardless of any ports that you
    #   specify.
    #
    #   To specify multiple rules and descriptions for the rules, use IP
    #   permissions instead.
    #
    #
    #
    #   [1]: http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
    #   @return [String]
    #
    # @!attribute [rw] source_security_group_name
    #   \[Default VPC\] The name of the source security group.
    #
    #   The rule grants full ICMP, UDP, and TCP access. To create a rule
    #   with a specific protocol and port range, specify a set of IP
    #   permissions instead.
    #   @return [String]
    #
    # @!attribute [rw] source_security_group_owner_id
    #   The Amazon Web Services account ID for the source security group, if
    #   the source security group is in a different account.
    #
    #   The rule grants full ICMP, UDP, and TCP access. To create a rule
    #   with a specific protocol and port range, use IP permissions instead.
    #   @return [String]
    #
    # @!attribute [rw] to_port
    #   If the protocol is TCP or UDP, this is the end of the port range. If
    #   the protocol is ICMP, this is the ICMP code or -1 (all ICMP codes).
    #   If the start port is -1 (all ICMP types), then the end port must be
    #   -1 (all ICMP codes).
    #
    #   To specify multiple rules and descriptions for the rules, use IP
    #   permissions instead.
    #   @return [Integer]
    #
    # @!attribute [rw] tag_specifications
    #   The tags applied to the security group rule.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngressRequest AWS API Documentation
    #
    class AuthorizeSecurityGroupIngressRequest < Struct.new(
      :cidr_ip,
      :from_port,
      :group_id,
      :group_name,
      :ip_permissions,
      :ip_protocol,
      :source_security_group_name,
      :source_security_group_owner_id,
      :to_port,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @!attribute [rw] security_group_rules
    #   Information about the inbound (ingress) security group rules that
    #   were added.
    #   @return [Array<Types::SecurityGroupRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AuthorizeSecurityGroupIngressResult AWS API Documentation
    #
    class AuthorizeSecurityGroupIngressResult < Struct.new(
      :return,
      :security_group_rules)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes Availability Zones, Local Zones, and Wavelength Zones.
    #
    # @!attribute [rw] opt_in_status
    #   For Availability Zones, this parameter always has the value of
    #   `opt-in-not-required`.
    #
    #   For Local Zones and Wavelength Zones, this parameter is the opt-in
    #   status. The possible values are `opted-in` and `not-opted-in`.
    #   @return [String]
    #
    # @!attribute [rw] messages
    #   Any messages about the Availability Zone, Local Zone, or Wavelength
    #   Zone.
    #   @return [Array<Types::AvailabilityZoneMessage>]
    #
    # @!attribute [rw] region_name
    #   The name of the Region.
    #   @return [String]
    #
    # @!attribute [rw] zone_name
    #   The name of the Availability Zone, Local Zone, or Wavelength Zone.
    #   @return [String]
    #
    # @!attribute [rw] zone_id
    #   The ID of the Availability Zone, Local Zone, or Wavelength Zone.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the zone group. For example:
    #
    #   * Availability Zones - `us-east-1-zg-1`
    #
    #   * Local Zones - `us-west-2-lax-1`
    #
    #   * Wavelength Zones - `us-east-1-wl1-bos-wlz-1`
    #   @return [String]
    #
    # @!attribute [rw] network_border_group
    #   The name of the network border group.
    #   @return [String]
    #
    # @!attribute [rw] zone_type
    #   The type of zone.
    #
    #   Valid values: `availability-zone` \| `local-zone` \|
    #   `wavelength-zone`
    #   @return [String]
    #
    # @!attribute [rw] parent_zone_name
    #   The name of the zone that handles some of the Local Zone or
    #   Wavelength Zone control plane operations, such as API calls.
    #   @return [String]
    #
    # @!attribute [rw] parent_zone_id
    #   The ID of the zone that handles some of the Local Zone or Wavelength
    #   Zone control plane operations, such as API calls.
    #   @return [String]
    #
    # @!attribute [rw] group_long_name
    #   The long name of the Availability Zone group, Local Zone group, or
    #   Wavelength Zone group.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the Availability Zone, Local Zone, or Wavelength Zone.
    #   The possible values are `available`, `unavailable`, and
    #   `constrained`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AvailabilityZone AWS API Documentation
    #
    class AvailabilityZone < Struct.new(
      :opt_in_status,
      :messages,
      :region_name,
      :zone_name,
      :zone_id,
      :group_name,
      :network_border_group,
      :zone_type,
      :parent_zone_name,
      :parent_zone_id,
      :group_long_name,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a message about an Availability Zone, Local Zone, or
    # Wavelength Zone.
    #
    # @!attribute [rw] message
    #   The message about the Availability Zone, Local Zone, or Wavelength
    #   Zone.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AvailabilityZoneMessage AWS API Documentation
    #
    class AvailabilityZoneMessage < Struct.new(
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The capacity information for instances that can be launched onto the
    # Dedicated Host.
    #
    # @!attribute [rw] available_instance_capacity
    #   The number of instances that can be launched onto the Dedicated Host
    #   depending on the host's available capacity. For Dedicated Hosts
    #   that support multiple instance types, this parameter represents the
    #   number of instances for each instance size that is supported on the
    #   host.
    #   @return [Array<Types::InstanceCapacity>]
    #
    # @!attribute [rw] available_v_cpus
    #   The number of vCPUs available for launching instances onto the
    #   Dedicated Host.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/AvailableCapacity AWS API Documentation
    #
    class AvailableCapacity < Struct.new(
      :available_instance_capacity,
      :available_v_cpus)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
    # more information, see [Amazon EBS–optimized instances][1] in the
    # *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html
    #
    # @!attribute [rw] min
    #   The minimum baseline bandwidth, in Mbps. If this parameter is not
    #   specified, there is no minimum limit.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum baseline bandwidth, in Mbps. If this parameter is not
    #   specified, there is no maximum limit.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BaselineEbsBandwidthMbps AWS API Documentation
    #
    class BaselineEbsBandwidthMbps < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
    # more information, see [Amazon EBS–optimized instances][1] in the
    # *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html
    #
    # @!attribute [rw] min
    #   The minimum baseline bandwidth, in Mbps. To specify no minimum
    #   limit, omit this parameter.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum baseline bandwidth, in Mbps. To specify no maximum
    #   limit, omit this parameter.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BaselineEbsBandwidthMbpsRequest AWS API Documentation
    #
    class BaselineEbsBandwidthMbpsRequest < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The baseline performance to consider, using an instance family as a
    # baseline reference. The instance family establishes the lowest
    # acceptable level of performance. Amazon EC2 uses this baseline to
    # guide instance type selection, but there is no guarantee that the
    # selected instance types will always exceed the baseline for every
    # application.
    #
    # Currently, this parameter only supports CPU performance as a baseline
    # performance factor. For example, specifying `c6i` would use the CPU
    # performance of the `c6i` family as the baseline reference.
    #
    # @!attribute [rw] cpu
    #   The CPU performance to consider, using an instance family as the
    #   baseline reference.
    #   @return [Types::CpuPerformanceFactor]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BaselinePerformanceFactors AWS API Documentation
    #
    class BaselinePerformanceFactors < Struct.new(
      :cpu)
      SENSITIVE = []
      include Aws::Structure
    end

    # The baseline performance to consider, using an instance family as a
    # baseline reference. The instance family establishes the lowest
    # acceptable level of performance. Amazon EC2 uses this baseline to
    # guide instance type selection, but there is no guarantee that the
    # selected instance types will always exceed the baseline for every
    # application.
    #
    # Currently, this parameter only supports CPU performance as a baseline
    # performance factor. For example, specifying `c6i` would use the CPU
    # performance of the `c6i` family as the baseline reference.
    #
    # @!attribute [rw] cpu
    #   The CPU performance to consider, using an instance family as the
    #   baseline reference.
    #   @return [Types::CpuPerformanceFactorRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BaselinePerformanceFactorsRequest AWS API Documentation
    #
    class BaselinePerformanceFactorsRequest < Struct.new(
      :cpu)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] value
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BlobAttributeValue AWS API Documentation
    #
    class BlobAttributeValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device mapping, which defines the EBS volumes and
    # instance store volumes to attach to an instance at launch.
    #
    # @!attribute [rw] ebs
    #   Parameters used to automatically set up EBS volumes when the
    #   instance is launched.
    #   @return [Types::EbsBlockDevice]
    #
    # @!attribute [rw] no_device
    #   To omit the device from the block device mapping, specify an empty
    #   string. When this property is specified, the device is removed from
    #   the block device mapping regardless of the assigned value.
    #   @return [String]
    #
    # @!attribute [rw] device_name
    #   The device name. For available device names, see [Device names for
    #   volumes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html
    #   @return [String]
    #
    # @!attribute [rw] virtual_name
    #   The virtual device name (`ephemeral`N). Instance store volumes are
    #   numbered starting from 0. An instance type with 2 available instance
    #   store volumes can specify mappings for `ephemeral0` and
    #   `ephemeral1`. The number of available instance store volumes depends
    #   on the instance type. After you connect to the instance, you must
    #   mount the volume.
    #
    #   NVMe instance store volumes are automatically enumerated and
    #   assigned a device name. Including them in your block device mapping
    #   has no effect.
    #
    #   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.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BlockDeviceMapping AWS API Documentation
    #
    class BlockDeviceMapping < Struct.new(
      :ebs,
      :no_device,
      :device_name,
      :virtual_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device mapping, which defines the EBS volumes and
    # instance store volumes to attach to an instance at launch.
    #
    # @!attribute [rw] device_name
    #   The device name (for example, `/dev/sdh` or `xvdh`).
    #   @return [String]
    #
    # @!attribute [rw] virtual_name
    #   The virtual device name.
    #   @return [String]
    #
    # @!attribute [rw] ebs
    #   Parameters used to automatically set up EBS volumes when the
    #   instance is launched.
    #   @return [Types::EbsBlockDeviceResponse]
    #
    # @!attribute [rw] no_device
    #   Suppresses the specified device included in the block device
    #   mapping.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BlockDeviceMappingResponse AWS API Documentation
    #
    class BlockDeviceMappingResponse < Struct.new(
      :device_name,
      :virtual_name,
      :ebs,
      :no_device)
      SENSITIVE = []
      include Aws::Structure
    end

    # The state of VPC Block Public Access (BPA).
    #
    # @!attribute [rw] internet_gateway_block_mode
    #   The mode of VPC BPA.
    #
    #   * `off`: VPC BPA is not enabled and traffic is allowed to and from
    #     internet gateways and egress-only internet gateways in this
    #     Region.
    #
    #   * `block-bidirectional`: Block all traffic to and from internet
    #     gateways and egress-only internet gateways in this Region (except
    #     for excluded VPCs and subnets).
    #
    #   * `block-ingress`: Block all internet traffic to the VPCs in this
    #     Region (except for VPCs or subnets which are excluded). Only
    #     traffic to and from NAT gateways and egress-only internet gateways
    #     is allowed because these gateways only allow outbound connections
    #     to be established.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BlockPublicAccessStates AWS API Documentation
    #
    class BlockPublicAccessStates < Struct.new(
      :internet_gateway_block_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for BundleInstance.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance to bundle.
    #
    #   Default: None
    #   @return [String]
    #
    # @!attribute [rw] storage
    #   The bucket in which to store the AMI. You can specify a bucket that
    #   you already own or a new bucket that Amazon EC2 creates on your
    #   behalf. If you specify a bucket that belongs to someone else, Amazon
    #   EC2 returns an error.
    #   @return [Types::Storage]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstanceRequest AWS API Documentation
    #
    class BundleInstanceRequest < Struct.new(
      :instance_id,
      :storage,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of BundleInstance.
    #
    # @!attribute [rw] bundle_task
    #   Information about the bundle task.
    #   @return [Types::BundleTask]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleInstanceResult AWS API Documentation
    #
    class BundleInstanceResult < Struct.new(
      :bundle_task)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a bundle task.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance associated with this bundle task.
    #   @return [String]
    #
    # @!attribute [rw] bundle_id
    #   The ID of the bundle task.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the task.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The time this task started.
    #   @return [Time]
    #
    # @!attribute [rw] update_time
    #   The time of the most recent update for the task.
    #   @return [Time]
    #
    # @!attribute [rw] storage
    #   The Amazon S3 storage locations.
    #   @return [Types::Storage]
    #
    # @!attribute [rw] progress
    #   The level of task completion, as a percent (for example, 20%).
    #   @return [String]
    #
    # @!attribute [rw] bundle_task_error
    #   If the task fails, a description of the error.
    #   @return [Types::BundleTaskError]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleTask AWS API Documentation
    #
    class BundleTask < Struct.new(
      :instance_id,
      :bundle_id,
      :state,
      :start_time,
      :update_time,
      :storage,
      :progress,
      :bundle_task_error)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an error for BundleInstance.
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The error message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/BundleTaskError AWS API Documentation
    #
    class BundleTaskError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Autonomous System Number (ASN) and BYOIP CIDR association.
    #
    # @!attribute [rw] asn
    #   A public 2-byte or 4-byte ASN.
    #   @return [String]
    #
    # @!attribute [rw] ipam_id
    #   An IPAM ID.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The status message.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The provisioning state of the BYOASN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Byoasn AWS API Documentation
    #
    class Byoasn < Struct.new(
      :asn,
      :ipam_id,
      :status_message,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about an address range that is provisioned for use with
    # your Amazon Web Services resources through bring your own IP addresses
    # (BYOIP).
    #
    # @!attribute [rw] cidr
    #   The address range, in CIDR notation.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the address range.
    #   @return [String]
    #
    # @!attribute [rw] asn_associations
    #   The BYOIP CIDR associations with ASNs.
    #   @return [Array<Types::AsnAssociation>]
    #
    # @!attribute [rw] status_message
    #   Upon success, contains the ID of the address pool. Otherwise,
    #   contains an error message.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the address range.
    #
    #   * `advertised`: The address range is being advertised to the
    #     internet by Amazon Web Services.
    #
    #   * `deprovisioned`: The address range is deprovisioned.
    #
    #   * `failed-deprovision`: The request to deprovision the address range
    #     was unsuccessful. Ensure that all EIPs from the range have been
    #     deallocated and try again.
    #
    #   * `failed-provision`: The request to provision the address range was
    #     unsuccessful.
    #
    #   * `pending-deprovision`: You’ve submitted a request to deprovision
    #     an address range and it's pending.
    #
    #   * `pending-provision`: You’ve submitted a request to provision an
    #     address range and it's pending.
    #
    #   * `provisioned`: The address range is provisioned and can be
    #     advertised. The range is not currently advertised.
    #
    #   * `provisioned-not-publicly-advertisable`: The address range is
    #     provisioned and cannot be advertised.
    #   @return [String]
    #
    # @!attribute [rw] network_border_group
    #   If you have [Local Zones][1] enabled, you can choose a network
    #   border group for Local Zones when you provision and advertise a
    #   BYOIPv4 CIDR. Choose the network border group carefully as the EIP
    #   and the Amazon Web Services resource it is associated with must
    #   reside in the same network border group.
    #
    #   You can provision BYOIP address ranges to and advertise them in the
    #   following Local Zone network border groups:
    #
    #   * us-east-1-dfw-2
    #
    #   * us-west-2-lax-1
    #
    #   * us-west-2-phx-2
    #
    #   <note markdown="1"> You cannot provision or advertise BYOIPv6 address ranges in Local
    #   Zones at this time.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/local-zones/latest/ug/how-local-zones-work.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ByoipCidr AWS API Documentation
    #
    class ByoipCidr < Struct.new(
      :cidr,
      :description,
      :asn_associations,
      :status_message,
      :state,
      :network_border_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CancelBundleTask.
    #
    # @!attribute [rw] bundle_id
    #   The ID of the bundle task.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTaskRequest AWS API Documentation
    #
    class CancelBundleTaskRequest < Struct.new(
      :bundle_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CancelBundleTask.
    #
    # @!attribute [rw] bundle_task
    #   Information about the bundle task.
    #   @return [Types::BundleTask]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelBundleTaskResult AWS API Documentation
    #
    class CancelBundleTaskResult < Struct.new(
      :bundle_task)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Capacity Reservation Fleet cancellation error.
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The error message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelCapacityReservationFleetError AWS API Documentation
    #
    class CancelCapacityReservationFleetError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] capacity_reservation_fleet_ids
    #   The IDs of the Capacity Reservation Fleets to cancel.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelCapacityReservationFleetsRequest AWS API Documentation
    #
    class CancelCapacityReservationFleetsRequest < Struct.new(
      :dry_run,
      :capacity_reservation_fleet_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successful_fleet_cancellations
    #   Information about the Capacity Reservation Fleets that were
    #   successfully cancelled.
    #   @return [Array<Types::CapacityReservationFleetCancellationState>]
    #
    # @!attribute [rw] failed_fleet_cancellations
    #   Information about the Capacity Reservation Fleets that could not be
    #   cancelled.
    #   @return [Array<Types::FailedCapacityReservationFleetCancellationResult>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelCapacityReservationFleetsResult AWS API Documentation
    #
    class CancelCapacityReservationFleetsResult < Struct.new(
      :successful_fleet_cancellations,
      :failed_fleet_cancellations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation to be cancelled.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelCapacityReservationRequest AWS API Documentation
    #
    class CancelCapacityReservationRequest < Struct.new(
      :capacity_reservation_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelCapacityReservationResult AWS API Documentation
    #
    class CancelCapacityReservationResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] conversion_task_id
    #   The ID of the conversion task.
    #   @return [String]
    #
    # @!attribute [rw] reason_message
    #   The reason for canceling the conversion task.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelConversionRequest AWS API Documentation
    #
    class CancelConversionRequest < Struct.new(
      :dry_run,
      :conversion_task_id,
      :reason_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] report_id
    #   The ID of the report.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelDeclarativePoliciesReportRequest AWS API Documentation
    #
    class CancelDeclarativePoliciesReportRequest < Struct.new(
      :dry_run,
      :report_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Is `true` if the request succeeds, and an error otherwise.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelDeclarativePoliciesReportResult AWS API Documentation
    #
    class CancelDeclarativePoliciesReportResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] export_task_id
    #   The ID of the export task. This is the ID returned by the
    #   `CreateInstanceExportTask` and `ExportImage` operations.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelExportTaskRequest AWS API Documentation
    #
    class CancelExportTaskRequest < Struct.new(
      :export_task_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the AMI that was shared with your Amazon Web Services
    #   account.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImageLaunchPermissionRequest AWS API Documentation
    #
    class CancelImageLaunchPermissionRequest < Struct.new(
      :image_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImageLaunchPermissionResult AWS API Documentation
    #
    class CancelImageLaunchPermissionResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cancel_reason
    #   The reason for canceling the task.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] import_task_id
    #   The ID of the import image or import snapshot task to be canceled.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTaskRequest AWS API Documentation
    #
    class CancelImportTaskRequest < Struct.new(
      :cancel_reason,
      :dry_run,
      :import_task_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] import_task_id
    #   The ID of the task being canceled.
    #   @return [String]
    #
    # @!attribute [rw] previous_state
    #   The current state of the task being canceled.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the task being canceled.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelImportTaskResult AWS API Documentation
    #
    class CancelImportTaskResult < Struct.new(
      :import_task_id,
      :previous_state,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CancelReservedInstancesListing.
    #
    # @!attribute [rw] reserved_instances_listing_id
    #   The ID of the Reserved Instance listing.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListingRequest AWS API Documentation
    #
    class CancelReservedInstancesListingRequest < Struct.new(
      :reserved_instances_listing_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CancelReservedInstancesListing.
    #
    # @!attribute [rw] reserved_instances_listings
    #   The Reserved Instance listing.
    #   @return [Array<Types::ReservedInstancesListing>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelReservedInstancesListingResult AWS API Documentation
    #
    class CancelReservedInstancesListingResult < Struct.new(
      :reserved_instances_listings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Spot Fleet error.
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The description for the error code.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsError AWS API Documentation
    #
    class CancelSpotFleetRequestsError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Spot Fleet request that was not successfully canceled.
    #
    # @!attribute [rw] error
    #   The error.
    #   @return [Types::CancelSpotFleetRequestsError]
    #
    # @!attribute [rw] spot_fleet_request_id
    #   The ID of the Spot Fleet request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsErrorItem AWS API Documentation
    #
    class CancelSpotFleetRequestsErrorItem < Struct.new(
      :error,
      :spot_fleet_request_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CancelSpotFleetRequests.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_fleet_request_ids
    #   The IDs of the Spot Fleet requests.
    #
    #   Constraint: You can specify up to 100 IDs in a single request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] terminate_instances
    #   Indicates whether to terminate the associated instances when the
    #   Spot Fleet request is canceled. The default is to terminate the
    #   instances.
    #
    #   To let the instances continue to run after the Spot Fleet request is
    #   canceled, specify `no-terminate-instances`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsRequest AWS API Documentation
    #
    class CancelSpotFleetRequestsRequest < Struct.new(
      :dry_run,
      :spot_fleet_request_ids,
      :terminate_instances)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CancelSpotFleetRequests.
    #
    # @!attribute [rw] successful_fleet_requests
    #   Information about the Spot Fleet requests that are successfully
    #   canceled.
    #   @return [Array<Types::CancelSpotFleetRequestsSuccessItem>]
    #
    # @!attribute [rw] unsuccessful_fleet_requests
    #   Information about the Spot Fleet requests that are not successfully
    #   canceled.
    #   @return [Array<Types::CancelSpotFleetRequestsErrorItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsResponse AWS API Documentation
    #
    class CancelSpotFleetRequestsResponse < Struct.new(
      :successful_fleet_requests,
      :unsuccessful_fleet_requests)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Spot Fleet request that was successfully canceled.
    #
    # @!attribute [rw] current_spot_fleet_request_state
    #   The current state of the Spot Fleet request.
    #   @return [String]
    #
    # @!attribute [rw] previous_spot_fleet_request_state
    #   The previous state of the Spot Fleet request.
    #   @return [String]
    #
    # @!attribute [rw] spot_fleet_request_id
    #   The ID of the Spot Fleet request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotFleetRequestsSuccessItem AWS API Documentation
    #
    class CancelSpotFleetRequestsSuccessItem < Struct.new(
      :current_spot_fleet_request_state,
      :previous_spot_fleet_request_state,
      :spot_fleet_request_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CancelSpotInstanceRequests.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_instance_request_ids
    #   The IDs of the Spot Instance requests.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequestsRequest AWS API Documentation
    #
    class CancelSpotInstanceRequestsRequest < Struct.new(
      :dry_run,
      :spot_instance_request_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CancelSpotInstanceRequests.
    #
    # @!attribute [rw] cancelled_spot_instance_requests
    #   The Spot Instance requests.
    #   @return [Array<Types::CancelledSpotInstanceRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelSpotInstanceRequestsResult AWS API Documentation
    #
    class CancelSpotInstanceRequestsResult < Struct.new(
      :cancelled_spot_instance_requests)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a request to cancel a Spot Instance.
    #
    # @!attribute [rw] spot_instance_request_id
    #   The ID of the Spot Instance request.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the Spot Instance request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CancelledSpotInstanceRequest AWS API Documentation
    #
    class CancelledSpotInstanceRequest < Struct.new(
      :spot_instance_request_id,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about instance capacity usage for a Capacity Reservation.
    #
    # @!attribute [rw] allocation_type
    #   The usage type. `used` indicates that the instance capacity is in
    #   use by instances that are running in the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] count
    #   The amount of instance capacity associated with the usage. For
    #   example a value of `4` indicates that instance capacity for 4
    #   instances is currently in use.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityAllocation AWS API Documentation
    #
    class CapacityAllocation < Struct.new(
      :allocation_type,
      :count)
      SENSITIVE = []
      include Aws::Structure
    end

    # Reserve powerful GPU instances on a future date to support your short
    # duration machine learning (ML) workloads. Instances that run inside a
    # Capacity Block are automatically placed close together inside [Amazon
    # EC2 UltraClusters][1], for low-latency, petabit-scale, non-blocking
    # networking.
    #
    # You can also reserve Amazon EC2 UltraServers. UltraServers connect
    # multiple EC2 instances using a low-latency, high-bandwidth accelerator
    # interconnect (NeuronLink). They are built to tackle very large-scale
    # AI/ML workloads that require significant processing power. For more
    # information, see Amazon EC2 UltraServers.
    #
    #
    #
    # [1]: http://aws.amazon.com/ec2/ultraclusters/
    #
    # @!attribute [rw] capacity_block_id
    #   The ID of the Capacity Block.
    #   @return [String]
    #
    # @!attribute [rw] ultraserver_type
    #   The EC2 UltraServer type of the Capacity Block.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the Capacity Block.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The Availability Zone ID of the Capacity Block.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_ids
    #   The ID of the Capacity Reservation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] start_date
    #   The date and time at which the Capacity Block was started.
    #   @return [Time]
    #
    # @!attribute [rw] end_date
    #   The date and time at which the Capacity Block expires. When a
    #   Capacity Block expires, all instances in the Capacity Block are
    #   terminated.
    #   @return [Time]
    #
    # @!attribute [rw] create_date
    #   The date and time at which the Capacity Block was created.
    #   @return [Time]
    #
    # @!attribute [rw] state
    #   The state of the Capacity Block.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the Capacity Block.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityBlock AWS API Documentation
    #
    class CapacityBlock < Struct.new(
      :capacity_block_id,
      :ultraserver_type,
      :availability_zone,
      :availability_zone_id,
      :capacity_reservation_ids,
      :start_date,
      :end_date,
      :create_date,
      :state,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Capacity Block extension. With an extension, you can
    # extend the duration of time for an existing Capacity Block.
    #
    # @!attribute [rw] capacity_reservation_id
    #   The reservation ID of the Capacity Block extension.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type of the Capacity Block extension.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances in the Capacity Block extension.
    #   @return [Integer]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the Capacity Block extension.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The Availability Zone ID of the Capacity Block extension.
    #   @return [String]
    #
    # @!attribute [rw] capacity_block_extension_offering_id
    #   The ID of the Capacity Block extension offering.
    #   @return [String]
    #
    # @!attribute [rw] capacity_block_extension_duration_hours
    #   The duration of the Capacity Block extension in hours.
    #   @return [Integer]
    #
    # @!attribute [rw] capacity_block_extension_status
    #   The status of the Capacity Block extension. A Capacity Block
    #   extension can have one of the following statuses:
    #
    #   * `payment-pending` - The Capacity Block extension payment is
    #     processing. If your payment can't be processed within 12 hours,
    #     the Capacity Block extension is failed.
    #
    #   * `payment-failed` - Payment for the Capacity Block extension
    #     request was not successful.
    #
    #   * `payment-succeeded` - Payment for the Capacity Block extension
    #     request was successful. You receive an invoice that reflects the
    #     one-time upfront payment. In the invoice, you can associate the
    #     paid amount with the Capacity Block reservation ID.
    #   @return [String]
    #
    # @!attribute [rw] capacity_block_extension_purchase_date
    #   The date when the Capacity Block extension was purchased.
    #   @return [Time]
    #
    # @!attribute [rw] capacity_block_extension_start_date
    #   The start date of the Capacity Block extension.
    #   @return [Time]
    #
    # @!attribute [rw] capacity_block_extension_end_date
    #   The end date of the Capacity Block extension.
    #   @return [Time]
    #
    # @!attribute [rw] upfront_fee
    #   The total price to be paid up front.
    #   @return [String]
    #
    # @!attribute [rw] currency_code
    #   The currency of the payment for the Capacity Block extension.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityBlockExtension AWS API Documentation
    #
    class CapacityBlockExtension < Struct.new(
      :capacity_reservation_id,
      :instance_type,
      :instance_count,
      :availability_zone,
      :availability_zone_id,
      :capacity_block_extension_offering_id,
      :capacity_block_extension_duration_hours,
      :capacity_block_extension_status,
      :capacity_block_extension_purchase_date,
      :capacity_block_extension_start_date,
      :capacity_block_extension_end_date,
      :upfront_fee,
      :currency_code)
      SENSITIVE = []
      include Aws::Structure
    end

    # The recommended Capacity Block extension that fits your search
    # requirements.
    #
    # @!attribute [rw] capacity_block_extension_offering_id
    #   The ID of the Capacity Block extension offering.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type of the Capacity Block that will be extended.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances in the Capacity Block extension offering.
    #   @return [Integer]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the Capacity Block that will be extended.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The Availability Zone ID of the Capacity Block that will be
    #   extended.
    #   @return [String]
    #
    # @!attribute [rw] start_date
    #   The start date of the Capacity Block that will be extended.
    #   @return [Time]
    #
    # @!attribute [rw] capacity_block_extension_start_date
    #   The date and time at which the Capacity Block extension will start.
    #   This date is also the same as the end date of the Capacity Block
    #   that will be extended.
    #   @return [Time]
    #
    # @!attribute [rw] capacity_block_extension_end_date
    #   The date and time at which the Capacity Block extension expires.
    #   When a Capacity Block expires, the reserved capacity is released and
    #   you can no longer launch instances into it. The Capacity Block's
    #   state changes to `expired` when it reaches its end date
    #   @return [Time]
    #
    # @!attribute [rw] capacity_block_extension_duration_hours
    #   The amount of time of the Capacity Block extension offering in
    #   hours.
    #   @return [Integer]
    #
    # @!attribute [rw] upfront_fee
    #   The total price of the Capacity Block extension offering, to be paid
    #   up front.
    #   @return [String]
    #
    # @!attribute [rw] currency_code
    #   The currency of the payment for the Capacity Block extension
    #   offering.
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   Indicates the tenancy of the Capacity Block extension offering. A
    #   Capacity Block can have one of the following tenancy settings:
    #
    #   * `default` - The Capacity Block is created on hardware that is
    #     shared with other Amazon Web Services accounts.
    #
    #   * `dedicated` - The Capacity Block is created on single-tenant
    #     hardware that is dedicated to a single Amazon Web Services
    #     account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityBlockExtensionOffering AWS API Documentation
    #
    class CapacityBlockExtensionOffering < Struct.new(
      :capacity_block_extension_offering_id,
      :instance_type,
      :instance_count,
      :availability_zone,
      :availability_zone_id,
      :start_date,
      :capacity_block_extension_start_date,
      :capacity_block_extension_end_date,
      :capacity_block_extension_duration_hours,
      :upfront_fee,
      :currency_code,
      :tenancy)
      SENSITIVE = []
      include Aws::Structure
    end

    # The recommended Capacity Block that fits your search requirements.
    #
    # @!attribute [rw] capacity_block_offering_id
    #   The ID of the Capacity Block offering.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type of the Capacity Block offering.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the Capacity Block offering.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances in the Capacity Block offering.
    #   @return [Integer]
    #
    # @!attribute [rw] start_date
    #   The start date of the Capacity Block offering.
    #   @return [Time]
    #
    # @!attribute [rw] end_date
    #   The end date of the Capacity Block offering.
    #   @return [Time]
    #
    # @!attribute [rw] capacity_block_duration_hours
    #   The number of hours (in addition to `capacityBlockDurationMinutes`)
    #   for the duration of the Capacity Block reservation. For example, if
    #   a Capacity Block starts at **04:55** and ends at **11:30**, the
    #   hours field would be **6**.
    #   @return [Integer]
    #
    # @!attribute [rw] upfront_fee
    #   The total price to be paid up front.
    #   @return [String]
    #
    # @!attribute [rw] currency_code
    #   The currency of the payment for the Capacity Block.
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   The tenancy of the Capacity Block.
    #   @return [String]
    #
    # @!attribute [rw] ultraserver_type
    #   The EC2 UltraServer type of the Capacity Block offering.
    #   @return [String]
    #
    # @!attribute [rw] ultraserver_count
    #   The number of EC2 UltraServers in the offering.
    #   @return [Integer]
    #
    # @!attribute [rw] capacity_block_duration_minutes
    #   The number of minutes (in addition to `capacityBlockDurationHours`)
    #   for the duration of the Capacity Block reservation. For example, if
    #   a Capacity Block starts at **08:55** and ends at **11:30**, the
    #   minutes field would be **35**.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityBlockOffering AWS API Documentation
    #
    class CapacityBlockOffering < Struct.new(
      :capacity_block_offering_id,
      :instance_type,
      :availability_zone,
      :instance_count,
      :start_date,
      :end_date,
      :capacity_block_duration_hours,
      :upfront_fee,
      :currency_code,
      :tenancy,
      :ultraserver_type,
      :ultraserver_count,
      :capacity_block_duration_minutes)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the availability of capacity for a Capacity Block.
    #
    # @!attribute [rw] capacity_block_id
    #   The ID of the Capacity Block.
    #   @return [String]
    #
    # @!attribute [rw] interconnect_status
    #   The status of the high-bandwidth accelerator interconnect. Possible
    #   states include:
    #
    #   * `ok` the accelerator interconnect is healthy.
    #
    #   * `impaired` - accelerator interconnect communication is impaired.
    #
    #   * `insufficient-data` - insufficient data to determine accelerator
    #     interconnect status.
    #   @return [String]
    #
    # @!attribute [rw] total_capacity
    #   The combined amount of `Available` and `Unavailable` capacity in the
    #   Capacity Block.
    #   @return [Integer]
    #
    # @!attribute [rw] total_available_capacity
    #   The remaining capacity. Indicates the number of resources that can
    #   be launched into the Capacity Block.
    #   @return [Integer]
    #
    # @!attribute [rw] total_unavailable_capacity
    #   The unavailable capacity. Indicates the instance capacity that is
    #   unavailable for use due to a system status check failure.
    #   @return [Integer]
    #
    # @!attribute [rw] capacity_reservation_statuses
    #   The availability of capacity for the Capacity Block reservations.
    #   @return [Array<Types::CapacityReservationStatus>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityBlockStatus AWS API Documentation
    #
    class CapacityBlockStatus < Struct.new(
      :capacity_block_id,
      :interconnect_status,
      :total_capacity,
      :total_available_capacity,
      :total_unavailable_capacity,
      :capacity_reservation_statuses)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Capacity Reservation.
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the Capacity
    #   Reservation.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_arn
    #   The Amazon Resource Name (ARN) of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The Availability Zone ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The type of instance for which the Capacity Reservation reserves
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] instance_platform
    #   The type of operating system for which the Capacity Reservation
    #   reserves capacity.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which the capacity is reserved.
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   Indicates the tenancy of the Capacity Reservation. A Capacity
    #   Reservation can have one of the following tenancy settings:
    #
    #   * `default` - The Capacity Reservation is created on hardware that
    #     is shared with other Amazon Web Services accounts.
    #
    #   * `dedicated` - The Capacity Reservation is created on single-tenant
    #     hardware that is dedicated to a single Amazon Web Services
    #     account.
    #   @return [String]
    #
    # @!attribute [rw] total_instance_count
    #   The total number of instances for which the Capacity Reservation
    #   reserves capacity.
    #   @return [Integer]
    #
    # @!attribute [rw] available_instance_count
    #   The remaining capacity. Indicates the number of instances that can
    #   be launched in the Capacity Reservation.
    #   @return [Integer]
    #
    # @!attribute [rw] ebs_optimized
    #   Indicates whether the Capacity Reservation supports EBS-optimized
    #   instances. This optimization provides dedicated throughput to Amazon
    #   EBS and an optimized configuration stack to provide optimal I/O
    #   performance. This optimization isn't available with all instance
    #   types. Additional usage charges apply when using an EBS- optimized
    #   instance.
    #   @return [Boolean]
    #
    # @!attribute [rw] ephemeral_storage
    #   *Deprecated.*
    #   @return [Boolean]
    #
    # @!attribute [rw] state
    #   The current state of the Capacity Reservation. A Capacity
    #   Reservation can be in one of the following states:
    #
    #   * `active` - The capacity is available for use.
    #
    #   * `expired` - The Capacity Reservation expired automatically at the
    #     date and time specified in your reservation request. The reserved
    #     capacity is no longer available for your use.
    #
    #   * `cancelled` - The Capacity Reservation was canceled. The reserved
    #     capacity is no longer available for your use.
    #
    #   * `pending` - The Capacity Reservation request was successful but
    #     the capacity provisioning is still pending.
    #
    #   * `failed` - The Capacity Reservation request has failed. A request
    #     can fail due to request parameters that are not valid, capacity
    #     constraints, or instance limit constraints. You can view a failed
    #     request for 60 minutes.
    #
    #   * `scheduled` - (*Future-dated Capacity Reservations*) The
    #     future-dated Capacity Reservation request was approved and the
    #     Capacity Reservation is scheduled for delivery on the requested
    #     start date.
    #
    #   * `payment-pending` - (*Capacity Blocks*) The upfront payment has
    #     not been processed yet.
    #
    #   * `payment-failed` - (*Capacity Blocks*) The upfront payment was not
    #     processed in the 12-hour time frame. Your Capacity Block was
    #     released.
    #
    #   * `assessing` - (*Future-dated Capacity Reservations*) Amazon EC2 is
    #     assessing your request for a future-dated Capacity Reservation.
    #
    #   * `delayed` - (*Future-dated Capacity Reservations*) Amazon EC2
    #     encountered a delay in provisioning the requested future-dated
    #     Capacity Reservation. Amazon EC2 is unable to deliver the
    #     requested capacity by the requested start date and time.
    #
    #   * `unsupported` - (*Future-dated Capacity Reservations*) Amazon EC2
    #     can't support the future-dated Capacity Reservation request due
    #     to capacity constraints. You can view unsupported requests for 30
    #     days. The Capacity Reservation will not be delivered.
    #   @return [String]
    #
    # @!attribute [rw] start_date
    #   The date and time at which the Capacity Reservation was started.
    #   @return [Time]
    #
    # @!attribute [rw] end_date
    #   The date and time at which the Capacity Reservation expires. When a
    #   Capacity Reservation expires, the reserved capacity is released and
    #   you can no longer launch instances into it. The Capacity
    #   Reservation's state changes to `expired` when it reaches its end
    #   date and time.
    #   @return [Time]
    #
    # @!attribute [rw] end_date_type
    #   Indicates the way in which the Capacity Reservation ends. A Capacity
    #   Reservation can have one of the following end types:
    #
    #   * `unlimited` - The Capacity Reservation remains active until you
    #     explicitly cancel it.
    #
    #   * `limited` - The Capacity Reservation expires automatically at a
    #     specified date and time.
    #   @return [String]
    #
    # @!attribute [rw] instance_match_criteria
    #   Indicates the type of instance launches that the Capacity
    #   Reservation accepts. The options include:
    #
    #   * `open` - The Capacity Reservation accepts all instances that have
    #     matching attributes (instance type, platform, and Availability
    #     Zone). Instances that have matching attributes launch into the
    #     Capacity Reservation automatically without specifying any
    #     additional parameters.
    #
    #   * `targeted` - The Capacity Reservation only accepts instances that
    #     have matching attributes (instance type, platform, and
    #     Availability Zone), and explicitly target the Capacity
    #     Reservation. This ensures that only permitted instances can use
    #     the reserved capacity.
    #   @return [String]
    #
    # @!attribute [rw] create_date
    #   The date and time at which the Capacity Reservation was created.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the Capacity Reservation.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost on which the Capacity
    #   Reservation was created.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_fleet_id
    #   The ID of the Capacity Reservation Fleet to which the Capacity
    #   Reservation belongs. Only valid for Capacity Reservations that were
    #   created by a Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] placement_group_arn
    #   The Amazon Resource Name (ARN) of the cluster placement group in
    #   which the Capacity Reservation was created. For more information,
    #   see [ Capacity Reservations for cluster placement groups][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html
    #   @return [String]
    #
    # @!attribute [rw] capacity_allocations
    #   Information about instance capacity usage.
    #   @return [Array<Types::CapacityAllocation>]
    #
    # @!attribute [rw] reservation_type
    #   The type of Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] unused_reservation_billing_owner_id
    #   The ID of the Amazon Web Services account to which billing of the
    #   unused capacity of the Capacity Reservation is assigned.
    #   @return [String]
    #
    # @!attribute [rw] commitment_info
    #   Information about your commitment for a future-dated Capacity
    #   Reservation.
    #   @return [Types::CapacityReservationCommitmentInfo]
    #
    # @!attribute [rw] delivery_preference
    #   The delivery method for a future-dated Capacity Reservation.
    #   `incremental` indicates that the requested capacity is delivered in
    #   addition to any running instances and reserved capacity that you
    #   have in your account at the requested date and time.
    #   @return [String]
    #
    # @!attribute [rw] capacity_block_id
    #   The ID of the Capacity Block.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservation AWS API Documentation
    #
    class CapacityReservation < Struct.new(
      :capacity_reservation_id,
      :owner_id,
      :capacity_reservation_arn,
      :availability_zone_id,
      :instance_type,
      :instance_platform,
      :availability_zone,
      :tenancy,
      :total_instance_count,
      :available_instance_count,
      :ebs_optimized,
      :ephemeral_storage,
      :state,
      :start_date,
      :end_date,
      :end_date_type,
      :instance_match_criteria,
      :create_date,
      :tags,
      :outpost_arn,
      :capacity_reservation_fleet_id,
      :placement_group_arn,
      :capacity_allocations,
      :reservation_type,
      :unused_reservation_billing_owner_id,
      :commitment_info,
      :delivery_preference,
      :capacity_block_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a request to assign billing of the unused capacity
    # of a Capacity Reservation.
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] requested_by
    #   The ID of the Amazon Web Services account that initiated the
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] unused_reservation_billing_owner_id
    #   The ID of the Amazon Web Services account to which the request was
    #   sent.
    #   @return [String]
    #
    # @!attribute [rw] last_update_time
    #   The date and time, in UTC time format, at which the request was
    #   initiated.
    #   @return [Time]
    #
    # @!attribute [rw] status
    #   The status of the request. For more information, see [ View billing
    #   assignment requests for a shared Amazon EC2 Capacity
    #   Reservation][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/view-billing-transfers.html
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   Information about the status.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_info
    #   Information about the Capacity Reservation.
    #   @return [Types::CapacityReservationInfo]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationBillingRequest AWS API Documentation
    #
    class CapacityReservationBillingRequest < Struct.new(
      :capacity_reservation_id,
      :requested_by,
      :unused_reservation_billing_owner_id,
      :last_update_time,
      :status,
      :status_message,
      :capacity_reservation_info)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about your commitment for a future-dated Capacity
    # Reservation.
    #
    # @!attribute [rw] committed_instance_count
    #   The instance capacity that you committed to when you requested the
    #   future-dated Capacity Reservation.
    #   @return [Integer]
    #
    # @!attribute [rw] commitment_end_date
    #   The date and time at which the commitment duration expires, in the
    #   ISO8601 format in the UTC time zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #   You can't decrease the instance count or cancel the Capacity
    #   Reservation before this date and time.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationCommitmentInfo AWS API Documentation
    #
    class CapacityReservationCommitmentInfo < Struct.new(
      :committed_instance_count,
      :commitment_end_date)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a Capacity Reservation Fleet.
    #
    # @!attribute [rw] capacity_reservation_fleet_id
    #   The ID of the Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_fleet_arn
    #   The ARN of the Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the Capacity Reservation Fleet. Possible states
    #   include:
    #
    #   * `submitted` - The Capacity Reservation Fleet request has been
    #     submitted and Amazon Elastic Compute Cloud is preparing to create
    #     the Capacity Reservations.
    #
    #   * `modifying` - The Capacity Reservation Fleet is being modified.
    #     The Fleet remains in this state until the modification is
    #     complete.
    #
    #   * `active` - The Capacity Reservation Fleet has fulfilled its total
    #     target capacity and it is attempting to maintain this capacity.
    #     The Fleet remains in this state until it is modified or deleted.
    #
    #   * `partially_fulfilled` - The Capacity Reservation Fleet has
    #     partially fulfilled its total target capacity. There is
    #     insufficient Amazon EC2 to fulfill the total target capacity. The
    #     Fleet is attempting to asynchronously fulfill its total target
    #     capacity.
    #
    #   * `expiring` - The Capacity Reservation Fleet has reach its end date
    #     and it is in the process of expiring. One or more of its Capacity
    #     reservations might still be active.
    #
    #   * `expired` - The Capacity Reservation Fleet has reach its end date.
    #     The Fleet and its Capacity Reservations are expired. The Fleet
    #     can't create new Capacity Reservations.
    #
    #   * `cancelling` - The Capacity Reservation Fleet is in the process of
    #     being cancelled. One or more of its Capacity reservations might
    #     still be active.
    #
    #   * `cancelled` - The Capacity Reservation Fleet has been manually
    #     cancelled. The Fleet and its Capacity Reservations are cancelled
    #     and the Fleet can't create new Capacity Reservations.
    #
    #   * `failed` - The Capacity Reservation Fleet failed to reserve
    #     capacity for the specified instance types.
    #   @return [String]
    #
    # @!attribute [rw] total_target_capacity
    #   The total number of capacity units for which the Capacity
    #   Reservation Fleet reserves capacity. For more information, see
    #   [Total target capacity][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity
    #   @return [Integer]
    #
    # @!attribute [rw] total_fulfilled_capacity
    #   The capacity units that have been fulfilled.
    #   @return [Float]
    #
    # @!attribute [rw] tenancy
    #   The tenancy of the Capacity Reservation Fleet. Tenancies include:
    #
    #   * `default` - The Capacity Reservation Fleet is created on hardware
    #     that is shared with other Amazon Web Services accounts.
    #
    #   * `dedicated` - The Capacity Reservation Fleet is created on
    #     single-tenant hardware that is dedicated to a single Amazon Web
    #     Services account.
    #   @return [String]
    #
    # @!attribute [rw] end_date
    #   The date and time at which the Capacity Reservation Fleet expires.
    #   @return [Time]
    #
    # @!attribute [rw] create_time
    #   The date and time at which the Capacity Reservation Fleet was
    #   created.
    #   @return [Time]
    #
    # @!attribute [rw] instance_match_criteria
    #   Indicates the type of instance launches that the Capacity
    #   Reservation Fleet accepts. All Capacity Reservations in the Fleet
    #   inherit this instance matching criteria.
    #
    #   Currently, Capacity Reservation Fleets support `open` instance
    #   matching criteria only. This means that instances that have matching
    #   attributes (instance type, platform, and Availability Zone) run in
    #   the Capacity Reservations automatically. Instances do not need to
    #   explicitly target a Capacity Reservation Fleet to use its reserved
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] allocation_strategy
    #   The strategy used by the Capacity Reservation Fleet to determine
    #   which of the specified instance types to use. For more information,
    #   see For more information, see [Allocation strategy][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy
    #   @return [String]
    #
    # @!attribute [rw] instance_type_specifications
    #   Information about the instance types for which to reserve the
    #   capacity.
    #   @return [Array<Types::FleetCapacityReservation>]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the Capacity Reservation Fleet.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationFleet AWS API Documentation
    #
    class CapacityReservationFleet < Struct.new(
      :capacity_reservation_fleet_id,
      :capacity_reservation_fleet_arn,
      :state,
      :total_target_capacity,
      :total_fulfilled_capacity,
      :tenancy,
      :end_date,
      :create_time,
      :instance_match_criteria,
      :allocation_strategy,
      :instance_type_specifications,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Capacity Reservation Fleet that was successfully
    # cancelled.
    #
    # @!attribute [rw] current_fleet_state
    #   The current state of the Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] previous_fleet_state
    #   The previous state of the Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_fleet_id
    #   The ID of the Capacity Reservation Fleet that was successfully
    #   cancelled.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationFleetCancellationState AWS API Documentation
    #
    class CapacityReservationFleetCancellationState < Struct.new(
      :current_fleet_state,
      :previous_fleet_state,
      :capacity_reservation_fleet_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a resource group to which a Capacity Reservation has been
    # added.
    #
    # @!attribute [rw] group_arn
    #   The ARN of the resource group.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the resource
    #   group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationGroup AWS API Documentation
    #
    class CapacityReservationGroup < Struct.new(
      :group_arn,
      :owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a Capacity Reservation.
    #
    # @!attribute [rw] instance_type
    #   The instance type for the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone for the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   The tenancy of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationInfo AWS API Documentation
    #
    class CapacityReservationInfo < Struct.new(
      :instance_type,
      :availability_zone,
      :tenancy,
      :availability_zone_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the strategy for using unused Capacity Reservations for
    # fulfilling On-Demand capacity.
    #
    # <note markdown="1"> This strategy can only be used if the EC2 Fleet is of type `instant`.
    #
    #  </note>
    #
    # For more information about Capacity Reservations, see [On-Demand
    # Capacity Reservations][1] in the *Amazon EC2 User Guide*. For examples
    # of using Capacity Reservations in an EC2 Fleet, see [EC2 Fleet example
    # configurations][2] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html
    # [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-examples.html
    #
    # @!attribute [rw] usage_strategy
    #   Indicates whether to use unused Capacity Reservations for fulfilling
    #   On-Demand capacity.
    #
    #   If you specify `use-capacity-reservations-first`, the fleet uses
    #   unused Capacity Reservations to fulfill On-Demand capacity up to the
    #   target On-Demand capacity. If multiple instance pools have unused
    #   Capacity Reservations, the On-Demand allocation strategy
    #   (`lowest-price` or `prioritized`) is applied. If the number of
    #   unused Capacity Reservations is less than the On-Demand target
    #   capacity, the remaining On-Demand target capacity is launched
    #   according to the On-Demand allocation strategy (`lowest-price` or
    #   `prioritized`).
    #
    #   If you do not specify a value, the fleet fulfils the On-Demand
    #   capacity according to the chosen On-Demand allocation strategy.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationOptions AWS API Documentation
    #
    class CapacityReservationOptions < Struct.new(
      :usage_strategy)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the strategy for using unused Capacity Reservations for
    # fulfilling On-Demand capacity.
    #
    # <note markdown="1"> This strategy can only be used if the EC2 Fleet is of type `instant`.
    #
    #  </note>
    #
    # For more information about Capacity Reservations, see [On-Demand
    # Capacity Reservations][1] in the *Amazon EC2 User Guide*. For examples
    # of using Capacity Reservations in an EC2 Fleet, see [EC2 Fleet example
    # configurations][2] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html
    # [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-examples.html
    #
    # @!attribute [rw] usage_strategy
    #   Indicates whether to use unused Capacity Reservations for fulfilling
    #   On-Demand capacity.
    #
    #   If you specify `use-capacity-reservations-first`, the fleet uses
    #   unused Capacity Reservations to fulfill On-Demand capacity up to the
    #   target On-Demand capacity. If multiple instance pools have unused
    #   Capacity Reservations, the On-Demand allocation strategy
    #   (`lowest-price` or `prioritized`) is applied. If the number of
    #   unused Capacity Reservations is less than the On-Demand target
    #   capacity, the remaining On-Demand target capacity is launched
    #   according to the On-Demand allocation strategy (`lowest-price` or
    #   `prioritized`).
    #
    #   If you do not specify a value, the fleet fulfils the On-Demand
    #   capacity according to the chosen On-Demand allocation strategy.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationOptionsRequest AWS API Documentation
    #
    class CapacityReservationOptionsRequest < Struct.new(
      :usage_strategy)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an instance's Capacity Reservation targeting option.
    #
    # Use the `CapacityReservationPreference` parameter to configure the
    # instance to run as an On-Demand Instance, to run in any `open`
    # Capacity Reservation that has matching attributes, or to run only in a
    # Capacity Reservation or Capacity Reservation group. Use the
    # `CapacityReservationTarget` parameter to explicitly target a specific
    # Capacity Reservation or a Capacity Reservation group.
    #
    # You can only specify `CapacityReservationPreference` and
    # `CapacityReservationTarget` if the `CapacityReservationPreference` is
    # `capacity-reservations-only`.
    #
    # @!attribute [rw] capacity_reservation_preference
    #   Indicates the instance's Capacity Reservation preferences. Possible
    #   preferences include:
    #
    #   * `capacity-reservations-only` - The instance will only run in a
    #     Capacity Reservation or Capacity Reservation group. If capacity
    #     isn't available, the instance will fail to launch.
    #
    #   * `open` - The instance can run in any `open` Capacity Reservation
    #     that has matching attributes (instance type, platform,
    #     Availability Zone, and tenancy). If capacity isn't available, the
    #     instance runs as an On-Demand Instance.
    #
    #   * `none` - The instance doesn't run in a Capacity Reservation even
    #     if one is available. The instance runs as an On-Demand Instance.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_target
    #   Information about the target Capacity Reservation or Capacity
    #   Reservation group.
    #   @return [Types::CapacityReservationTarget]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationSpecification AWS API Documentation
    #
    class CapacityReservationSpecification < Struct.new(
      :capacity_reservation_preference,
      :capacity_reservation_target)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the instance's Capacity Reservation targeting preferences.
    # The action returns the `capacityReservationPreference` response
    # element if the instance is configured to run in On-Demand capacity, or
    # if it is configured in run in any `open` Capacity Reservation that has
    # matching attributes (instance type, platform, Availability Zone). The
    # action returns the `capacityReservationTarget` response element if the
    # instance explicily targets a specific Capacity Reservation or Capacity
    # Reservation group.
    #
    # @!attribute [rw] capacity_reservation_preference
    #   Describes the instance's Capacity Reservation preferences. Possible
    #   preferences include:
    #
    #   * `open` - The instance can run in any `open` Capacity Reservation
    #     that has matching attributes (instance type, platform,
    #     Availability Zone).
    #
    #   * `none` - The instance avoids running in a Capacity Reservation
    #     even if one is available. The instance runs in On-Demand capacity.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_target
    #   Information about the targeted Capacity Reservation or Capacity
    #   Reservation group.
    #   @return [Types::CapacityReservationTargetResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationSpecificationResponse AWS API Documentation
    #
    class CapacityReservationSpecificationResponse < Struct.new(
      :capacity_reservation_preference,
      :capacity_reservation_target)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the availability of capacity for a Capacity Reservation.
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] total_capacity
    #   The combined amount of `Available` and `Unavailable` capacity in the
    #   Capacity Reservation.
    #   @return [Integer]
    #
    # @!attribute [rw] total_available_capacity
    #   The remaining capacity. Indicates the amount of resources that can
    #   be launched into the Capacity Reservation.
    #   @return [Integer]
    #
    # @!attribute [rw] total_unavailable_capacity
    #   The used capacity. Indicates that the capacity is in use by
    #   resources that are running in the Capacity Reservation.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationStatus AWS API Documentation
    #
    class CapacityReservationStatus < Struct.new(
      :capacity_reservation_id,
      :total_capacity,
      :total_available_capacity,
      :total_unavailable_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a target Capacity Reservation or Capacity Reservation group.
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation in which to run the instance.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_resource_group_arn
    #   The ARN of the Capacity Reservation resource group in which to run
    #   the instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationTarget AWS API Documentation
    #
    class CapacityReservationTarget < Struct.new(
      :capacity_reservation_id,
      :capacity_reservation_resource_group_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a target Capacity Reservation or Capacity Reservation group.
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the targeted Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_resource_group_arn
    #   The ARN of the targeted Capacity Reservation group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CapacityReservationTargetResponse AWS API Documentation
    #
    class CapacityReservationTargetResponse < Struct.new(
      :capacity_reservation_id,
      :capacity_reservation_resource_group_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a carrier gateway.
    #
    # @!attribute [rw] carrier_gateway_id
    #   The ID of the carrier gateway.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC associated with the carrier gateway.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the carrier gateway.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The Amazon Web Services account ID of the owner of the carrier
    #   gateway.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the carrier gateway.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CarrierGateway AWS API Documentation
    #
    class CarrierGateway < Struct.new(
      :carrier_gateway_id,
      :vpc_id,
      :state,
      :owner_id,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the client certificate used for authentication.
    #
    # @!attribute [rw] client_root_certificate_chain
    #   The ARN of the client certificate.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CertificateAuthentication AWS API Documentation
    #
    class CertificateAuthentication < Struct.new(
      :client_root_certificate_chain)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the client certificate to be used for
    # authentication.
    #
    # @!attribute [rw] client_root_certificate_chain_arn
    #   The ARN of the client certificate. The certificate must be signed by
    #   a certificate authority (CA) and it must be provisioned in
    #   Certificate Manager (ACM).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CertificateAuthenticationRequest AWS API Documentation
    #
    class CertificateAuthenticationRequest < Struct.new(
      :client_root_certificate_chain_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Provides authorization for Amazon to bring a specific IP address range
    # to a specific Amazon Web Services account using bring your own IP
    # addresses (BYOIP). For more information, see [Configuring your BYOIP
    # address range][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#prepare-for-byoip
    #
    # @!attribute [rw] message
    #   The plain-text authorization message for the prefix and account.
    #   @return [String]
    #
    # @!attribute [rw] signature
    #   The signed authorization message for the prefix and account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CidrAuthorizationContext AWS API Documentation
    #
    class CidrAuthorizationContext < Struct.new(
      :message,
      :signature)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv4 CIDR block.
    #
    # @!attribute [rw] cidr_block
    #   The IPv4 CIDR block.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CidrBlock AWS API Documentation
    #
    class CidrBlock < Struct.new(
      :cidr_block)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Deprecated.
    #
    #  </note>
    #
    # Describes the ClassicLink DNS support status of a VPC.
    #
    # @!attribute [rw] classic_link_dns_supported
    #   Indicates whether ClassicLink DNS support is enabled for the VPC.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClassicLinkDnsSupport AWS API Documentation
    #
    class ClassicLinkDnsSupport < Struct.new(
      :classic_link_dns_supported,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Deprecated.
    #
    #  </note>
    #
    # Describes a linked EC2-Classic instance.
    #
    # @!attribute [rw] groups
    #   The security groups.
    #   @return [Array<Types::GroupIdentifier>]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the instance.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClassicLinkInstance AWS API Documentation
    #
    class ClassicLinkInstance < Struct.new(
      :groups,
      :instance_id,
      :tags,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Classic Load Balancer.
    #
    # @!attribute [rw] name
    #   The name of the load balancer.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClassicLoadBalancer AWS API Documentation
    #
    class ClassicLoadBalancer < Struct.new(
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Classic Load Balancers to attach to a Spot Fleet. Spot
    # Fleet registers the running Spot Instances with these Classic Load
    # Balancers.
    #
    # @!attribute [rw] classic_load_balancers
    #   One or more Classic Load Balancers.
    #   @return [Array<Types::ClassicLoadBalancer>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClassicLoadBalancersConfig AWS API Documentation
    #
    class ClassicLoadBalancersConfig < Struct.new(
      :classic_load_balancers)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of a client certificate revocation list.
    #
    # @!attribute [rw] code
    #   The state of the client certificate revocation list.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message about the status of the client certificate revocation
    #   list, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientCertificateRevocationListStatus AWS API Documentation
    #
    class ClientCertificateRevocationListStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options for managing connection authorization for new client
    # connections.
    #
    # @!attribute [rw] enabled
    #   Indicates whether client connect options are enabled. The default is
    #   `false` (not enabled).
    #   @return [Boolean]
    #
    # @!attribute [rw] lambda_function_arn
    #   The Amazon Resource Name (ARN) of the Lambda function used for
    #   connection authorization.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientConnectOptions AWS API Documentation
    #
    class ClientConnectOptions < Struct.new(
      :enabled,
      :lambda_function_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options for managing connection authorization for new client
    # connections.
    #
    # @!attribute [rw] enabled
    #   Indicates whether client connect options are enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] lambda_function_arn
    #   The Amazon Resource Name (ARN) of the Lambda function used for
    #   connection authorization.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status of any updates to the client connect options.
    #   @return [Types::ClientVpnEndpointAttributeStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientConnectResponseOptions AWS API Documentation
    #
    class ClientConnectResponseOptions < Struct.new(
      :enabled,
      :lambda_function_arn,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the client-specific data.
    #
    # @!attribute [rw] comment
    #   A user-defined comment about the disk upload.
    #   @return [String]
    #
    # @!attribute [rw] upload_end
    #   The time that the disk upload ends.
    #   @return [Time]
    #
    # @!attribute [rw] upload_size
    #   The size of the uploaded disk image, in GiB.
    #   @return [Float]
    #
    # @!attribute [rw] upload_start
    #   The time that the disk upload starts.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientData AWS API Documentation
    #
    class ClientData < Struct.new(
      :comment,
      :upload_end,
      :upload_size,
      :upload_start)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for enabling a customizable text banner that will be displayed
    # on Amazon Web Services provided clients when a VPN session is
    # established.
    #
    # @!attribute [rw] enabled
    #   Enable or disable a customizable text banner that will be displayed
    #   on Amazon Web Services provided clients when a VPN session is
    #   established.
    #
    #   Valid values: `true | false`
    #
    #   Default value: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] banner_text
    #   Customizable text that will be displayed in a banner on Amazon Web
    #   Services provided clients when a VPN session is established. UTF-8
    #   encoded characters only. Maximum of 1400 characters.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientLoginBannerOptions AWS API Documentation
    #
    class ClientLoginBannerOptions < Struct.new(
      :enabled,
      :banner_text)
      SENSITIVE = []
      include Aws::Structure
    end

    # Current state of options for customizable text banner that will be
    # displayed on Amazon Web Services provided clients when a VPN session
    # is established.
    #
    # @!attribute [rw] enabled
    #   Current state of text banner feature.
    #
    #   Valid values: `true | false`
    #   @return [Boolean]
    #
    # @!attribute [rw] banner_text
    #   Customizable text that will be displayed in a banner on Amazon Web
    #   Services provided clients when a VPN session is established. UTF-8
    #   encoded characters only. Maximum of 1400 characters.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientLoginBannerResponseOptions AWS API Documentation
    #
    class ClientLoginBannerResponseOptions < Struct.new(
      :enabled,
      :banner_text)
      SENSITIVE = []
      include Aws::Structure
    end

    # Client Route Enforcement is a feature of Client VPN that helps enforce
    # administrator defined routes on devices connected through the VPN.
    # This feature helps improve your security posture by ensuring that
    # network traffic originating from a connected client is not
    # inadvertently sent outside the VPN tunnel.
    #
    # Client Route Enforcement works by monitoring the route table of a
    # connected device for routing policy changes to the VPN connection. If
    # the feature detects any VPN routing policy modifications, it will
    # automatically force an update to the route table, reverting it back to
    # the expected route configurations.
    #
    # @!attribute [rw] enforced
    #   Enable or disable Client Route Enforcement. The state can either be
    #   `true` (enabled) or `false` (disabled). The default is `false`.
    #
    #   Valid values: `true | false`
    #
    #   Default value: `false`
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientRouteEnforcementOptions AWS API Documentation
    #
    class ClientRouteEnforcementOptions < Struct.new(
      :enforced)
      SENSITIVE = []
      include Aws::Structure
    end

    # The current status of Client Route Enforcement.
    #
    # @!attribute [rw] enforced
    #   Status of the client route enforcement feature, indicating whether
    #   Client Route Enforcement is `true` (enabled) or `false` (disabled).
    #
    #   Valid values: `true | false`
    #
    #   Default value: `false`
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientRouteEnforcementResponseOptions AWS API Documentation
    #
    class ClientRouteEnforcementResponseOptions < Struct.new(
      :enforced)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the authentication methods used by a Client VPN endpoint.
    # For more information, see [Authentication][1] in the *Client VPN
    # Administrator Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/client-authentication.html
    #
    # @!attribute [rw] type
    #   The authentication type used.
    #   @return [String]
    #
    # @!attribute [rw] active_directory
    #   Information about the Active Directory, if applicable.
    #   @return [Types::DirectoryServiceAuthentication]
    #
    # @!attribute [rw] mutual_authentication
    #   Information about the authentication certificates, if applicable.
    #   @return [Types::CertificateAuthentication]
    #
    # @!attribute [rw] federated_authentication
    #   Information about the IAM SAML identity provider, if applicable.
    #   @return [Types::FederatedAuthentication]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnAuthentication AWS API Documentation
    #
    class ClientVpnAuthentication < Struct.new(
      :type,
      :active_directory,
      :mutual_authentication,
      :federated_authentication)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the authentication method to be used by a Client VPN
    # endpoint. For more information, see [Authentication][1] in the *Client
    # VPN Administrator Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/authentication-authrization.html#client-authentication
    #
    # @!attribute [rw] type
    #   The type of client authentication to be used.
    #   @return [String]
    #
    # @!attribute [rw] active_directory
    #   Information about the Active Directory to be used, if applicable.
    #   You must provide this information if **Type** is
    #   `directory-service-authentication`.
    #   @return [Types::DirectoryServiceAuthenticationRequest]
    #
    # @!attribute [rw] mutual_authentication
    #   Information about the authentication certificates to be used, if
    #   applicable. You must provide this information if **Type** is
    #   `certificate-authentication`.
    #   @return [Types::CertificateAuthenticationRequest]
    #
    # @!attribute [rw] federated_authentication
    #   Information about the IAM SAML identity provider to be used, if
    #   applicable. You must provide this information if **Type** is
    #   `federated-authentication`.
    #   @return [Types::FederatedAuthenticationRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnAuthenticationRequest AWS API Documentation
    #
    class ClientVpnAuthenticationRequest < Struct.new(
      :type,
      :active_directory,
      :mutual_authentication,
      :federated_authentication)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of an authorization rule.
    #
    # @!attribute [rw] code
    #   The state of the authorization rule.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message about the status of the authorization rule, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnAuthorizationRuleStatus AWS API Documentation
    #
    class ClientVpnAuthorizationRuleStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a client connection.
    #
    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint to which the client is connected.
    #   @return [String]
    #
    # @!attribute [rw] timestamp
    #   The current date and time.
    #   @return [String]
    #
    # @!attribute [rw] connection_id
    #   The ID of the client connection.
    #   @return [String]
    #
    # @!attribute [rw] username
    #   The username of the client who established the client connection.
    #   This information is only provided if Active Directory client
    #   authentication is used.
    #   @return [String]
    #
    # @!attribute [rw] connection_established_time
    #   The date and time the client connection was established.
    #   @return [String]
    #
    # @!attribute [rw] ingress_bytes
    #   The number of bytes sent by the client.
    #   @return [String]
    #
    # @!attribute [rw] egress_bytes
    #   The number of bytes received by the client.
    #   @return [String]
    #
    # @!attribute [rw] ingress_packets
    #   The number of packets sent by the client.
    #   @return [String]
    #
    # @!attribute [rw] egress_packets
    #   The number of packets received by the client.
    #   @return [String]
    #
    # @!attribute [rw] client_ip
    #   The IP address of the client.
    #   @return [String]
    #
    # @!attribute [rw] client_ipv_6_address
    #   The IPv6 address assigned to the client connection when using a
    #   dual-stack Client VPN endpoint. This field is only populated when
    #   the endpoint is configured for dual-stack addressing, and the client
    #   is using IPv6 for connectivity.
    #   @return [String]
    #
    # @!attribute [rw] common_name
    #   The common name associated with the client. This is either the name
    #   of the client certificate, or the Active Directory user name.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The current state of the client connection.
    #   @return [Types::ClientVpnConnectionStatus]
    #
    # @!attribute [rw] connection_end_time
    #   The date and time the client connection was terminated.
    #   @return [String]
    #
    # @!attribute [rw] posture_compliance_statuses
    #   The statuses returned by the client connect handler for posture
    #   compliance, if applicable.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnConnection AWS API Documentation
    #
    class ClientVpnConnection < Struct.new(
      :client_vpn_endpoint_id,
      :timestamp,
      :connection_id,
      :username,
      :connection_established_time,
      :ingress_bytes,
      :egress_bytes,
      :ingress_packets,
      :egress_packets,
      :client_ip,
      :client_ipv_6_address,
      :common_name,
      :status,
      :connection_end_time,
      :posture_compliance_statuses)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the status of a client connection.
    #
    # @!attribute [rw] code
    #   The state of the client connection.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message about the status of the client connection, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnConnectionStatus AWS API Documentation
    #
    class ClientVpnConnectionStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Client VPN endpoint.
    #
    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A brief description of the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The current state of the Client VPN endpoint.
    #   @return [Types::ClientVpnEndpointStatus]
    #
    # @!attribute [rw] creation_time
    #   The date and time the Client VPN endpoint was created.
    #   @return [String]
    #
    # @!attribute [rw] deletion_time
    #   The date and time the Client VPN endpoint was deleted, if
    #   applicable.
    #   @return [String]
    #
    # @!attribute [rw] dns_name
    #   The DNS name to be used by clients when connecting to the Client VPN
    #   endpoint.
    #   @return [String]
    #
    # @!attribute [rw] client_cidr_block
    #   The IPv4 address range, in CIDR notation, from which client IP
    #   addresses are assigned.
    #   @return [String]
    #
    # @!attribute [rw] dns_servers
    #   Information about the DNS servers to be used for DNS resolution.
    #   @return [Array<String>]
    #
    # @!attribute [rw] split_tunnel
    #   Indicates whether split-tunnel is enabled in the Client VPN
    #   endpoint.
    #
    #   For information about split-tunnel VPN endpoints, see [Split-Tunnel
    #   Client VPN endpoint][1] in the *Client VPN Administrator Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html
    #   @return [Boolean]
    #
    # @!attribute [rw] vpn_protocol
    #   The protocol used by the VPN session.
    #   @return [String]
    #
    # @!attribute [rw] transport_protocol
    #   The transport protocol used by the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] vpn_port
    #   The port number for the Client VPN endpoint.
    #   @return [Integer]
    #
    # @!attribute [rw] associated_target_networks
    #   Information about the associated target networks. A target network
    #   is a subnet in a VPC.
    #   @return [Array<Types::AssociatedTargetNetwork>]
    #
    # @!attribute [rw] server_certificate_arn
    #   The ARN of the server certificate.
    #   @return [String]
    #
    # @!attribute [rw] authentication_options
    #   Information about the authentication method used by the Client VPN
    #   endpoint.
    #   @return [Array<Types::ClientVpnAuthentication>]
    #
    # @!attribute [rw] connection_log_options
    #   Information about the client connection logging options for the
    #   Client VPN endpoint.
    #   @return [Types::ConnectionLogResponseOptions]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the Client VPN endpoint.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of the security groups for the target network.
    #   @return [Array<String>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] self_service_portal_url
    #   The URL of the self-service portal.
    #   @return [String]
    #
    # @!attribute [rw] client_connect_options
    #   The options for managing connection authorization for new client
    #   connections.
    #   @return [Types::ClientConnectResponseOptions]
    #
    # @!attribute [rw] session_timeout_hours
    #   The maximum VPN session duration time in hours.
    #
    #   Valid values: `8 | 10 | 12 | 24`
    #
    #   Default value: `24`
    #   @return [Integer]
    #
    # @!attribute [rw] client_login_banner_options
    #   Options for enabling a customizable text banner that will be
    #   displayed on Amazon Web Services provided clients when a VPN session
    #   is established.
    #   @return [Types::ClientLoginBannerResponseOptions]
    #
    # @!attribute [rw] client_route_enforcement_options
    #   Client route enforcement is a feature of the Client VPN service that
    #   helps enforce administrator defined routes on devices connected
    #   through the VPN. T his feature helps improve your security posture
    #   by ensuring that network traffic originating from a connected client
    #   is not inadvertently sent outside the VPN tunnel.
    #
    #   Client route enforcement works by monitoring the route table of a
    #   connected device for routing policy changes to the VPN connection.
    #   If the feature detects any VPN routing policy modifications, it will
    #   automatically force an update to the route table, reverting it back
    #   to the expected route configurations.
    #   @return [Types::ClientRouteEnforcementResponseOptions]
    #
    # @!attribute [rw] disconnect_on_session_timeout
    #   Indicates whether the client VPN session is disconnected after the
    #   maximum `sessionTimeoutHours` is reached. If `true`, users are
    #   prompted to reconnect client VPN. If `false`, client VPN attempts to
    #   reconnect automatically. The default value is `true`.
    #   @return [Boolean]
    #
    # @!attribute [rw] endpoint_ip_address_type
    #   The IP address type of the Client VPN endpoint. Possible values are
    #   `ipv4` for IPv4 addressing only, `ipv6` for IPv6 addressing only, or
    #   `dual-stack `for both IPv4 and IPv6 addressing.
    #   @return [String]
    #
    # @!attribute [rw] traffic_ip_address_type
    #   The IP address type of the Client VPN endpoint. Possible values are
    #   either `ipv4` for IPv4 addressing only, `ipv6` for IPv6 addressing
    #   only, or `dual-stack` for both IPv4 and IPv6 addressing.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnEndpoint AWS API Documentation
    #
    class ClientVpnEndpoint < Struct.new(
      :client_vpn_endpoint_id,
      :description,
      :status,
      :creation_time,
      :deletion_time,
      :dns_name,
      :client_cidr_block,
      :dns_servers,
      :split_tunnel,
      :vpn_protocol,
      :transport_protocol,
      :vpn_port,
      :associated_target_networks,
      :server_certificate_arn,
      :authentication_options,
      :connection_log_options,
      :tags,
      :security_group_ids,
      :vpc_id,
      :self_service_portal_url,
      :client_connect_options,
      :session_timeout_hours,
      :client_login_banner_options,
      :client_route_enforcement_options,
      :disconnect_on_session_timeout,
      :endpoint_ip_address_type,
      :traffic_ip_address_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the status of the Client VPN endpoint attribute.
    #
    # @!attribute [rw] code
    #   The status code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The status message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnEndpointAttributeStatus AWS API Documentation
    #
    class ClientVpnEndpointAttributeStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of a Client VPN endpoint.
    #
    # @!attribute [rw] code
    #   The state of the Client VPN endpoint. Possible states include:
    #
    #   * `pending-associate` - The Client VPN endpoint has been created but
    #     no target networks have been associated. The Client VPN endpoint
    #     cannot accept connections.
    #
    #   * `available` - The Client VPN endpoint has been created and a
    #     target network has been associated. The Client VPN endpoint can
    #     accept connections.
    #
    #   * `deleting` - The Client VPN endpoint is being deleted. The Client
    #     VPN endpoint cannot accept connections.
    #
    #   * `deleted` - The Client VPN endpoint has been deleted. The Client
    #     VPN endpoint cannot accept connections.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message about the status of the Client VPN endpoint.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnEndpointStatus AWS API Documentation
    #
    class ClientVpnEndpointStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a Client VPN endpoint route.
    #
    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint with which the route is
    #   associated.
    #   @return [String]
    #
    # @!attribute [rw] destination_cidr
    #   The IPv4 address range, in CIDR notation, of the route destination.
    #   @return [String]
    #
    # @!attribute [rw] target_subnet
    #   The ID of the subnet through which traffic is routed.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The route type.
    #   @return [String]
    #
    # @!attribute [rw] origin
    #   Indicates how the route was associated with the Client VPN endpoint.
    #   `associate` indicates that the route was automatically added when
    #   the target network was associated with the Client VPN endpoint.
    #   `add-route` indicates that the route was manually added using the
    #   **CreateClientVpnRoute** action.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The current state of the route.
    #   @return [Types::ClientVpnRouteStatus]
    #
    # @!attribute [rw] description
    #   A brief description of the route.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnRoute AWS API Documentation
    #
    class ClientVpnRoute < Struct.new(
      :client_vpn_endpoint_id,
      :destination_cidr,
      :target_subnet,
      :type,
      :origin,
      :status,
      :description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of a Client VPN endpoint route.
    #
    # @!attribute [rw] code
    #   The state of the Client VPN endpoint route.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message about the status of the Client VPN endpoint route, if
    #   applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ClientVpnRouteStatus AWS API Documentation
    #
    class ClientVpnRouteStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for sending VPN tunnel logs to CloudWatch.
    #
    # @!attribute [rw] log_enabled
    #   Status of VPN tunnel logging feature. Default value is `False`.
    #
    #   Valid values: `True` \| `False`
    #   @return [Boolean]
    #
    # @!attribute [rw] log_group_arn
    #   The Amazon Resource Name (ARN) of the CloudWatch log group to send
    #   logs to.
    #   @return [String]
    #
    # @!attribute [rw] log_output_format
    #   Configured log format. Default format is `json`.
    #
    #   Valid values: `json` \| `text`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CloudWatchLogOptions AWS API Documentation
    #
    class CloudWatchLogOptions < Struct.new(
      :log_enabled,
      :log_group_arn,
      :log_output_format)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for sending VPN tunnel logs to CloudWatch.
    #
    # @!attribute [rw] log_enabled
    #   Enable or disable VPN tunnel logging feature. Default value is
    #   `False`.
    #
    #   Valid values: `True` \| `False`
    #   @return [Boolean]
    #
    # @!attribute [rw] log_group_arn
    #   The Amazon Resource Name (ARN) of the CloudWatch log group to send
    #   logs to.
    #   @return [String]
    #
    # @!attribute [rw] log_output_format
    #   Set log format. Default format is `json`.
    #
    #   Valid values: `json` \| `text`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CloudWatchLogOptionsSpecification AWS API Documentation
    #
    class CloudWatchLogOptionsSpecification < Struct.new(
      :log_enabled,
      :log_group_arn,
      :log_output_format)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes address usage for a customer-owned address pool.
    #
    # @!attribute [rw] allocation_id
    #   The allocation ID of the address.
    #   @return [String]
    #
    # @!attribute [rw] aws_account_id
    #   The Amazon Web Services account ID.
    #   @return [String]
    #
    # @!attribute [rw] aws_service
    #   The Amazon Web Services service.
    #   @return [String]
    #
    # @!attribute [rw] co_ip
    #   The customer-owned IP address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CoipAddressUsage AWS API Documentation
    #
    class CoipAddressUsage < Struct.new(
      :allocation_id,
      :aws_account_id,
      :aws_service,
      :co_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a customer-owned IP address range.
    #
    # @!attribute [rw] cidr
    #   An address range in a customer-owned IP address space.
    #   @return [String]
    #
    # @!attribute [rw] coip_pool_id
    #   The ID of the address pool.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CoipCidr AWS API Documentation
    #
    class CoipCidr < Struct.new(
      :cidr,
      :coip_pool_id,
      :local_gateway_route_table_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a customer-owned address pool.
    #
    # @!attribute [rw] pool_id
    #   The ID of the address pool.
    #   @return [String]
    #
    # @!attribute [rw] pool_cidrs
    #   The address ranges of the address pool.
    #   @return [Array<String>]
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] pool_arn
    #   The ARN of the address pool.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CoipPool AWS API Documentation
    #
    class CoipPool < Struct.new(
      :pool_id,
      :pool_cidrs,
      :local_gateway_route_table_id,
      :tags,
      :pool_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] product_code
    #   The product code. This must be a product code that you own.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstanceRequest AWS API Documentation
    #
    class ConfirmProductInstanceRequest < Struct.new(
      :instance_id,
      :product_code,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   The return value of the request. Returns `true` if the specified
    #   product code is owned by the requester and associated with the
    #   specified instance.
    #   @return [Boolean]
    #
    # @!attribute [rw] owner_id
    #   The Amazon Web Services account ID of the instance owner. This is
    #   only present if the product code is attached to the instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConfirmProductInstanceResult AWS API Documentation
    #
    class ConfirmProductInstanceResult < Struct.new(
      :return,
      :owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the client connection logging options for the Client VPN
    # endpoint.
    #
    # @!attribute [rw] enabled
    #   Indicates whether connection logging is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] cloudwatch_log_group
    #   The name of the CloudWatch Logs log group. Required if connection
    #   logging is enabled.
    #   @return [String]
    #
    # @!attribute [rw] cloudwatch_log_stream
    #   The name of the CloudWatch Logs log stream to which the connection
    #   data is published.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConnectionLogOptions AWS API Documentation
    #
    class ConnectionLogOptions < Struct.new(
      :enabled,
      :cloudwatch_log_group,
      :cloudwatch_log_stream)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the client connection logging options for a Client
    # VPN endpoint.
    #
    # @!attribute [rw] enabled
    #   Indicates whether client connection logging is enabled for the
    #   Client VPN endpoint.
    #   @return [Boolean]
    #
    # @!attribute [rw] cloudwatch_log_group
    #   The name of the Amazon CloudWatch Logs log group to which connection
    #   logging data is published.
    #   @return [String]
    #
    # @!attribute [rw] cloudwatch_log_stream
    #   The name of the Amazon CloudWatch Logs log stream to which
    #   connection logging data is published.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConnectionLogResponseOptions AWS API Documentation
    #
    class ConnectionLogResponseOptions < Struct.new(
      :enabled,
      :cloudwatch_log_group,
      :cloudwatch_log_stream)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a connection notification for a VPC endpoint or VPC endpoint
    # service.
    #
    # @!attribute [rw] connection_notification_id
    #   The ID of the notification.
    #   @return [String]
    #
    # @!attribute [rw] service_id
    #   The ID of the endpoint service.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_id
    #   The ID of the VPC endpoint.
    #   @return [String]
    #
    # @!attribute [rw] connection_notification_type
    #   The type of notification.
    #   @return [String]
    #
    # @!attribute [rw] connection_notification_arn
    #   The ARN of the SNS topic for the notification.
    #   @return [String]
    #
    # @!attribute [rw] connection_events
    #   The events for the notification. Valid values are `Accept`,
    #   `Connect`, `Delete`, and `Reject`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] connection_notification_state
    #   The state of the notification.
    #   @return [String]
    #
    # @!attribute [rw] service_region
    #   The Region for the endpoint service.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConnectionNotification AWS API Documentation
    #
    class ConnectionNotification < Struct.new(
      :connection_notification_id,
      :service_id,
      :vpc_endpoint_id,
      :connection_notification_type,
      :connection_notification_arn,
      :connection_events,
      :connection_notification_state,
      :service_region)
      SENSITIVE = []
      include Aws::Structure
    end

    # A security group connection tracking configuration that enables you to
    # set the idle timeout for connection tracking on an Elastic network
    # interface. For more information, see [Connection tracking timeouts][1]
    # in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts
    #
    # @!attribute [rw] tcp_established_timeout
    #   Timeout (in seconds) for idle TCP connections in an established
    #   state. Min: 60 seconds. Max: 432000 seconds (5 days). Default:
    #   432000 seconds. Recommended: Less than 432000 seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] udp_stream_timeout
    #   Timeout (in seconds) for idle UDP flows classified as streams which
    #   have seen more than one request-response transaction. Min: 60
    #   seconds. Max: 180 seconds (3 minutes). Default: 180 seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] udp_timeout
    #   Timeout (in seconds) for idle UDP flows that have seen traffic only
    #   in a single direction or a single request-response transaction. Min:
    #   30 seconds. Max: 60 seconds. Default: 30 seconds.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConnectionTrackingConfiguration AWS API Documentation
    #
    class ConnectionTrackingConfiguration < Struct.new(
      :tcp_established_timeout,
      :udp_stream_timeout,
      :udp_timeout)
      SENSITIVE = []
      include Aws::Structure
    end

    # A security group connection tracking specification that enables you to
    # set the idle timeout for connection tracking on an Elastic network
    # interface. For more information, see [Connection tracking timeouts][1]
    # in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts
    #
    # @!attribute [rw] tcp_established_timeout
    #   Timeout (in seconds) for idle TCP connections in an established
    #   state. Min: 60 seconds. Max: 432000 seconds (5 days). Default:
    #   432000 seconds. Recommended: Less than 432000 seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] udp_timeout
    #   Timeout (in seconds) for idle UDP flows that have seen traffic only
    #   in a single direction or a single request-response transaction. Min:
    #   30 seconds. Max: 60 seconds. Default: 30 seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] udp_stream_timeout
    #   Timeout (in seconds) for idle UDP flows classified as streams which
    #   have seen more than one request-response transaction. Min: 60
    #   seconds. Max: 180 seconds (3 minutes). Default: 180 seconds.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConnectionTrackingSpecification AWS API Documentation
    #
    class ConnectionTrackingSpecification < Struct.new(
      :tcp_established_timeout,
      :udp_timeout,
      :udp_stream_timeout)
      SENSITIVE = []
      include Aws::Structure
    end

    # A security group connection tracking specification request that
    # enables you to set the idle timeout for connection tracking on an
    # Elastic network interface. For more information, see [Connection
    # tracking timeouts][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts
    #
    # @!attribute [rw] tcp_established_timeout
    #   Timeout (in seconds) for idle TCP connections in an established
    #   state. Min: 60 seconds. Max: 432000 seconds (5 days). Default:
    #   432000 seconds. Recommended: Less than 432000 seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] udp_stream_timeout
    #   Timeout (in seconds) for idle UDP flows classified as streams which
    #   have seen more than one request-response transaction. Min: 60
    #   seconds. Max: 180 seconds (3 minutes). Default: 180 seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] udp_timeout
    #   Timeout (in seconds) for idle UDP flows that have seen traffic only
    #   in a single direction or a single request-response transaction. Min:
    #   30 seconds. Max: 60 seconds. Default: 30 seconds.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConnectionTrackingSpecificationRequest AWS API Documentation
    #
    class ConnectionTrackingSpecificationRequest < Struct.new(
      :tcp_established_timeout,
      :udp_stream_timeout,
      :udp_timeout)
      SENSITIVE = []
      include Aws::Structure
    end

    # A security group connection tracking specification response that
    # enables you to set the idle timeout for connection tracking on an
    # Elastic network interface. For more information, see [Connection
    # tracking timeouts][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts
    #
    # @!attribute [rw] tcp_established_timeout
    #   Timeout (in seconds) for idle TCP connections in an established
    #   state. Min: 60 seconds. Max: 432000 seconds (5 days). Default:
    #   432000 seconds. Recommended: Less than 432000 seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] udp_stream_timeout
    #   Timeout (in seconds) for idle UDP flows classified as streams which
    #   have seen more than one request-response transaction. Min: 60
    #   seconds. Max: 180 seconds (3 minutes). Default: 180 seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] udp_timeout
    #   Timeout (in seconds) for idle UDP flows that have seen traffic only
    #   in a single direction or a single request-response transaction. Min:
    #   30 seconds. Max: 60 seconds. Default: 30 seconds.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConnectionTrackingSpecificationResponse AWS API Documentation
    #
    class ConnectionTrackingSpecificationResponse < Struct.new(
      :tcp_established_timeout,
      :udp_stream_timeout,
      :udp_timeout)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a conversion task.
    #
    # @!attribute [rw] conversion_task_id
    #   The ID of the conversion task.
    #   @return [String]
    #
    # @!attribute [rw] expiration_time
    #   The time when the task expires. If the upload isn't complete before
    #   the expiration time, we automatically cancel the task.
    #   @return [String]
    #
    # @!attribute [rw] import_instance
    #   If the task is for importing an instance, this contains information
    #   about the import instance task.
    #   @return [Types::ImportInstanceTaskDetails]
    #
    # @!attribute [rw] import_volume
    #   If the task is for importing a volume, this contains information
    #   about the import volume task.
    #   @return [Types::ImportVolumeTaskDetails]
    #
    # @!attribute [rw] state
    #   The state of the conversion task.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The status message related to the conversion task.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the task.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ConversionTask AWS API Documentation
    #
    class ConversionTask < Struct.new(
      :conversion_task_id,
      :expiration_time,
      :import_instance,
      :import_volume,
      :state,
      :status_message,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] source_fpga_image_id
    #   The ID of the source AFI.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description for the new AFI.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name for the new AFI. The default is the name of the source AFI.
    #   @return [String]
    #
    # @!attribute [rw] source_region
    #   The Region that contains the source AFI.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyFpgaImageRequest AWS API Documentation
    #
    class CopyFpgaImageRequest < Struct.new(
      :dry_run,
      :source_fpga_image_id,
      :description,
      :name,
      :source_region,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] fpga_image_id
    #   The ID of the new AFI.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyFpgaImageResult AWS API Documentation
    #
    class CopyFpgaImageResult < Struct.new(
      :fpga_image_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CopyImage.
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier you provide to ensure idempotency
    #   of the request. For more information, see [Ensuring idempotency in
    #   Amazon EC2 API requests][1] in the *Amazon EC2 API Reference*.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the new AMI.
    #   @return [String]
    #
    # @!attribute [rw] encrypted
    #   Specifies whether to encrypt the snapshots of the copied image.
    #
    #   You can encrypt a copy of an unencrypted snapshot, but you cannot
    #   create an unencrypted copy of an encrypted snapshot. The default KMS
    #   key for Amazon EBS is used unless you specify a non-default Key
    #   Management Service (KMS) KMS key using `KmsKeyId`. For more
    #   information, see [Use encryption with EBS-backed AMIs][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIEncryption.html
    #   @return [Boolean]
    #
    # @!attribute [rw] kms_key_id
    #   The identifier of the symmetric Key Management Service (KMS) KMS key
    #   to use when creating encrypted volumes. If this parameter is not
    #   specified, your Amazon Web Services managed KMS key for Amazon EBS
    #   is used. If you specify a KMS key, you must also set the encrypted
    #   state to `true`.
    #
    #   You can specify a KMS key using any of the following:
    #
    #   * Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
    #
    #   * Key alias. For example, alias/ExampleAlias.
    #
    #   * Key ARN. For example,
    #     arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.
    #
    #   * Alias ARN. For example,
    #     arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.
    #
    #   Amazon Web Services authenticates the KMS key asynchronously.
    #   Therefore, if you specify an identifier that is not valid, the
    #   action can appear to complete, but eventually fails.
    #
    #   The specified KMS key must exist in the destination Region.
    #
    #   Amazon EBS does not support asymmetric KMS keys.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the new AMI.
    #   @return [String]
    #
    # @!attribute [rw] source_image_id
    #   The ID of the AMI to copy.
    #   @return [String]
    #
    # @!attribute [rw] source_region
    #   The name of the Region that contains the AMI to copy.
    #   @return [String]
    #
    # @!attribute [rw] destination_outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost for the new AMI.
    #
    #   Only specify this parameter when copying an AMI from an Amazon Web
    #   Services Region to an Outpost. The AMI must be in the Region of the
    #   destination Outpost. You can't copy an AMI from an Outpost to a
    #   Region, from one Outpost to another, or within the same Outpost.
    #
    #   For more information, see [Copy AMIs from an Amazon Web Services
    #   Region to an Outpost][1] in the *Amazon EBS User Guide*.
    #
    #   Only one of `DestinationAvailabilityZone`,
    #   `DestinationAvailabilityZoneId`, or `DestinationOutpostArn` can be
    #   specified.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#copy-amis
    #   @return [String]
    #
    # @!attribute [rw] copy_image_tags
    #   Specifies whether to copy your user-defined AMI tags to the new AMI.
    #
    #   The following tags are not be copied:
    #
    #   * System tags (prefixed with `aws:`)
    #
    #   * For public and shared AMIs, user-defined tags that are attached by
    #     other Amazon Web Services accounts
    #
    #   Default: Your user-defined AMI tags are not copied.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the new AMI and new snapshots. You can tag the
    #   AMI, the snapshots, or both.
    #
    #   * To tag the new AMI, the value for `ResourceType` must be `image`.
    #
    #   * To tag the new snapshots, the value for `ResourceType` must be
    #     `snapshot`. The same tag is applied to all the new snapshots.
    #
    #   If you specify other values for `ResourceType`, the request fails.
    #
    #   To tag an AMI or snapshot after it has been created, see
    #   [CreateTags][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] snapshot_copy_completion_duration_minutes
    #   Specify a completion duration, in 15 minute increments, to initiate
    #   a time-based AMI copy. The specified completion duration applies to
    #   each of the snapshots associated with the AMI. Each snapshot
    #   associated with the AMI will be completed within the specified
    #   completion duration, with copy throughput automatically adjusted for
    #   each snapshot based on its size to meet the timing target.
    #
    #   If you do not specify a value, the AMI copy operation is completed
    #   on a best-effort basis.
    #
    #   <note markdown="1"> This parameter is not supported when copying an AMI to or from a
    #   Local Zone, or to an Outpost.
    #
    #    </note>
    #
    #   For more information, see [Time-based copies for Amazon EBS
    #   snapshots and EBS-backed AMIs][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html
    #   @return [Integer]
    #
    # @!attribute [rw] destination_availability_zone
    #   The Local Zone for the new AMI (for example, `cn-north-1-pkx-1a`).
    #
    #   Only one of `DestinationAvailabilityZone`,
    #   `DestinationAvailabilityZoneId`, or `DestinationOutpostArn` can be
    #   specified.
    #   @return [String]
    #
    # @!attribute [rw] destination_availability_zone_id
    #   The ID of the Local Zone for the new AMI (for example,
    #   `cnn1-pkx1-az1`).
    #
    #   Only one of `DestinationAvailabilityZone`,
    #   `DestinationAvailabilityZoneId`, or `DestinationOutpostArn` can be
    #   specified.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImageRequest AWS API Documentation
    #
    class CopyImageRequest < Struct.new(
      :client_token,
      :description,
      :encrypted,
      :kms_key_id,
      :name,
      :source_image_id,
      :source_region,
      :destination_outpost_arn,
      :copy_image_tags,
      :tag_specifications,
      :snapshot_copy_completion_duration_minutes,
      :destination_availability_zone,
      :destination_availability_zone_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CopyImage.
    #
    # @!attribute [rw] image_id
    #   The ID of the new AMI.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopyImageResult AWS API Documentation
    #
    class CopyImageResult < Struct.new(
      :image_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] description
    #   A description for the EBS snapshot.
    #   @return [String]
    #
    # @!attribute [rw] destination_outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost to which to copy the
    #   snapshot.
    #
    #   <note markdown="1"> Only supported when copying a snapshot to an Outpost.
    #
    #    </note>
    #
    #   For more information, see [ Copy snapshots from an Amazon Web
    #   Services Region to an Outpost][1] in the *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#copy-snapshots
    #   @return [String]
    #
    # @!attribute [rw] destination_region
    #   The destination Region to use in the `PresignedUrl` parameter of a
    #   snapshot copy operation. This parameter is only valid for specifying
    #   the destination Region in a `PresignedUrl` parameter, where it is
    #   required.
    #
    #   The snapshot copy is sent to the regional endpoint that you sent the
    #   HTTP request to (for example, `ec2.us-east-1.amazonaws.com`). With
    #   the CLI, this is specified using the `--region` parameter or the
    #   default Region in your Amazon Web Services configuration file.
    #   @return [String]
    #
    # @!attribute [rw] encrypted
    #   To encrypt a copy of an unencrypted snapshot if encryption by
    #   default is not enabled, enable encryption using this parameter.
    #   Otherwise, omit this parameter. Copies of encrypted snapshots are
    #   encrypted, even if you omit this parameter and encryption by default
    #   is not enabled. You cannot set this parameter to false. For more
    #   information, see [Amazon EBS encryption][1] in the *Amazon EBS User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html
    #   @return [Boolean]
    #
    # @!attribute [rw] kms_key_id
    #   The identifier of the KMS key to use for Amazon EBS encryption. If
    #   this parameter is not specified, your KMS key for Amazon EBS is
    #   used. If `KmsKeyId` is specified, the encrypted state must be
    #   `true`.
    #
    #   You can specify the KMS key using any of the following:
    #
    #   * Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
    #
    #   * Key alias. For example, alias/ExampleAlias.
    #
    #   * Key ARN. For example,
    #     arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.
    #
    #   * Alias ARN. For example,
    #     arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.
    #
    #   Amazon Web Services authenticates the KMS key asynchronously.
    #   Therefore, if you specify an ID, alias, or ARN that is not valid,
    #   the action can appear to complete, but eventually fails.
    #   @return [String]
    #
    # @!attribute [rw] presigned_url
    #   When you copy an encrypted source snapshot using the Amazon EC2
    #   Query API, you must supply a pre-signed URL. This parameter is
    #   optional for unencrypted snapshots. For more information, see [Query
    #   requests][1].
    #
    #   The `PresignedUrl` should use the snapshot source endpoint, the
    #   `CopySnapshot` action, and include the `SourceRegion`,
    #   `SourceSnapshotId`, and `DestinationRegion` parameters. The
    #   `PresignedUrl` must be signed using Amazon Web Services Signature
    #   Version 4. Because EBS snapshots are stored in Amazon S3, the
    #   signing algorithm for this parameter uses the same logic that is
    #   described in [ Authenticating Requests: Using Query Parameters
    #   (Amazon Web Services Signature Version 4)][2] in the *Amazon S3 API
    #   Reference*. An invalid or improperly signed `PresignedUrl` will
    #   cause the copy operation to fail asynchronously, and the snapshot
    #   will move to an `error` state.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html
    #   [2]: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
    #   @return [String]
    #
    # @!attribute [rw] source_region
    #   The ID of the Region that contains the snapshot to be copied.
    #   @return [String]
    #
    # @!attribute [rw] source_snapshot_id
    #   The ID of the EBS snapshot to copy.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the new snapshot.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] completion_duration_minutes
    #   <note markdown="1"> Not supported when copying snapshots to or from Local Zones or
    #   Outposts.
    #
    #    </note>
    #
    #   Specify a completion duration, in 15 minute increments, to initiate
    #   a time-based snapshot copy. Time-based snapshot copy operations
    #   complete within the specified duration. For more information, see [
    #   Time-based copies][1].
    #
    #   If you do not specify a value, the snapshot copy operation is
    #   completed on a best-effort basis.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/time-based-copies.html
    #   @return [Integer]
    #
    # @!attribute [rw] destination_availability_zone
    #   The Local Zone, for example, `cn-north-1-pkx-1a` to which to copy
    #   the snapshot.
    #
    #   <note markdown="1"> Only supported when copying a snapshot to a Local Zone.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshotRequest AWS API Documentation
    #
    class CopySnapshotRequest < Struct.new(
      :description,
      :destination_outpost_arn,
      :destination_region,
      :encrypted,
      :kms_key_id,
      :presigned_url,
      :source_region,
      :source_snapshot_id,
      :tag_specifications,
      :completion_duration_minutes,
      :destination_availability_zone,
      :dry_run)
      SENSITIVE = [:presigned_url]
      include Aws::Structure
    end

    # @!attribute [rw] tags
    #   Any tags applied to the new snapshot.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the new snapshot.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CopySnapshotResult AWS API Documentation
    #
    class CopySnapshotResult < Struct.new(
      :tags,
      :snapshot_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # The CPU options for the instance.
    #
    # @!attribute [rw] core_count
    #   The number of CPU cores for the instance.
    #   @return [Integer]
    #
    # @!attribute [rw] threads_per_core
    #   The number of threads per CPU core.
    #   @return [Integer]
    #
    # @!attribute [rw] amd_sev_snp
    #   Indicates whether the instance is enabled for AMD SEV-SNP. For more
    #   information, see [AMD SEV-SNP][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CpuOptions AWS API Documentation
    #
    class CpuOptions < Struct.new(
      :core_count,
      :threads_per_core,
      :amd_sev_snp)
      SENSITIVE = []
      include Aws::Structure
    end

    # The CPU options for the instance. Both the core count and threads per
    # core must be specified in the request.
    #
    # @!attribute [rw] core_count
    #   The number of CPU cores for the instance.
    #   @return [Integer]
    #
    # @!attribute [rw] threads_per_core
    #   The number of threads per CPU core. To disable multithreading for
    #   the instance, specify a value of `1`. Otherwise, specify the default
    #   value of `2`.
    #   @return [Integer]
    #
    # @!attribute [rw] amd_sev_snp
    #   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 [AMD SEV-SNP][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CpuOptionsRequest AWS API Documentation
    #
    class CpuOptionsRequest < Struct.new(
      :core_count,
      :threads_per_core,
      :amd_sev_snp)
      SENSITIVE = []
      include Aws::Structure
    end

    # The CPU performance to consider, using an instance family as the
    # baseline reference.
    #
    # @!attribute [rw] references
    #   Specify an instance family to use as the baseline reference for CPU
    #   performance. All instance types that match your specified attributes
    #   will be compared against the CPU performance of the referenced
    #   instance family, regardless of CPU manufacturer or architecture
    #   differences.
    #
    #   <note markdown="1"> Currently, only one instance family can be specified in the list.
    #
    #    </note>
    #   @return [Array<Types::PerformanceFactorReference>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CpuPerformanceFactor AWS API Documentation
    #
    class CpuPerformanceFactor < Struct.new(
      :references)
      SENSITIVE = []
      include Aws::Structure
    end

    # The CPU performance to consider, using an instance family as the
    # baseline reference.
    #
    # @!attribute [rw] references
    #   Specify an instance family to use as the baseline reference for CPU
    #   performance. All instance types that match your specified attributes
    #   will be compared against the CPU performance of the referenced
    #   instance family, regardless of CPU manufacturer or architecture
    #   differences.
    #
    #   <note markdown="1"> Currently, only one instance family can be specified in the list.
    #
    #    </note>
    #   @return [Array<Types::PerformanceFactorReferenceRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CpuPerformanceFactorRequest AWS API Documentation
    #
    class CpuPerformanceFactorRequest < Struct.new(
      :references)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensure
    #   Idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] source_capacity_reservation_id
    #   The ID of the Capacity Reservation from which you want to split the
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances to split from the source Capacity
    #   Reservation.
    #   @return [Integer]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the new Capacity Reservation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservationBySplittingRequest AWS API Documentation
    #
    class CreateCapacityReservationBySplittingRequest < Struct.new(
      :dry_run,
      :client_token,
      :source_capacity_reservation_id,
      :instance_count,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] source_capacity_reservation
    #   Information about the source Capacity Reservation.
    #   @return [Types::CapacityReservation]
    #
    # @!attribute [rw] destination_capacity_reservation
    #   Information about the destination Capacity Reservation.
    #   @return [Types::CapacityReservation]
    #
    # @!attribute [rw] instance_count
    #   The number of instances in the new Capacity Reservation. The number
    #   of instances in the source Capacity Reservation was reduced by this
    #   amount.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservationBySplittingResult AWS API Documentation
    #
    class CreateCapacityReservationBySplittingResult < Struct.new(
      :source_capacity_reservation,
      :destination_capacity_reservation,
      :instance_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_strategy
    #   The strategy used by the Capacity Reservation Fleet to determine
    #   which of the specified instance types to use. Currently, only the
    #   `prioritized` allocation strategy is supported. For more
    #   information, see [ Allocation strategy][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #   Valid values: `prioritized`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensure
    #   Idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] instance_type_specifications
    #   Information about the instance types for which to reserve the
    #   capacity.
    #   @return [Array<Types::ReservationFleetInstanceSpecification>]
    #
    # @!attribute [rw] tenancy
    #   Indicates the tenancy of the Capacity Reservation Fleet. All
    #   Capacity Reservations in the Fleet inherit this tenancy. The
    #   Capacity Reservation Fleet can have one of the following tenancy
    #   settings:
    #
    #   * `default` - The Capacity Reservation Fleet is created on hardware
    #     that is shared with other Amazon Web Services accounts.
    #
    #   * `dedicated` - The Capacity Reservations are created on
    #     single-tenant hardware that is dedicated to a single Amazon Web
    #     Services account.
    #   @return [String]
    #
    # @!attribute [rw] total_target_capacity
    #   The total number of capacity units to be reserved by the Capacity
    #   Reservation Fleet. This value, together with the instance type
    #   weights that you assign to each instance type used by the Fleet
    #   determine the number of instances for which the Fleet reserves
    #   capacity. Both values are based on units that make sense for your
    #   workload. For more information, see [Total target capacity][1] in
    #   the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity
    #   @return [Integer]
    #
    # @!attribute [rw] end_date
    #   The date and time at which the Capacity Reservation Fleet expires.
    #   When the Capacity Reservation Fleet expires, its state changes to
    #   `expired` and all of the Capacity Reservations in the Fleet expire.
    #
    #   The Capacity Reservation Fleet expires within an hour after the
    #   specified time. For example, if you specify `5/31/2019`, `13:30:55`,
    #   the Capacity Reservation Fleet is guaranteed to expire between
    #   `13:30:55` and `14:30:55` on `5/31/2019`.
    #   @return [Time]
    #
    # @!attribute [rw] instance_match_criteria
    #   Indicates the type of instance launches that the Capacity
    #   Reservation Fleet accepts. All Capacity Reservations in the Fleet
    #   inherit this instance matching criteria.
    #
    #   Currently, Capacity Reservation Fleets support `open` instance
    #   matching criteria only. This means that instances that have matching
    #   attributes (instance type, platform, and Availability Zone) run in
    #   the Capacity Reservations automatically. Instances do not need to
    #   explicitly target a Capacity Reservation Fleet to use its reserved
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the Capacity Reservation Fleet. The tags are
    #   automatically assigned to the Capacity Reservations in the Fleet.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservationFleetRequest AWS API Documentation
    #
    class CreateCapacityReservationFleetRequest < Struct.new(
      :allocation_strategy,
      :client_token,
      :instance_type_specifications,
      :tenancy,
      :total_target_capacity,
      :end_date,
      :instance_match_criteria,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_fleet_id
    #   The ID of the Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The status of the Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] total_target_capacity
    #   The total number of capacity units for which the Capacity
    #   Reservation Fleet reserves capacity.
    #   @return [Integer]
    #
    # @!attribute [rw] total_fulfilled_capacity
    #   The requested capacity units that have been successfully reserved.
    #   @return [Float]
    #
    # @!attribute [rw] instance_match_criteria
    #   The instance matching criteria for the Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] allocation_strategy
    #   The allocation strategy used by the Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] create_time
    #   The date and time at which the Capacity Reservation Fleet was
    #   created.
    #   @return [Time]
    #
    # @!attribute [rw] end_date
    #   The date and time at which the Capacity Reservation Fleet expires.
    #   @return [Time]
    #
    # @!attribute [rw] tenancy
    #   Indicates the tenancy of Capacity Reservation Fleet.
    #   @return [String]
    #
    # @!attribute [rw] fleet_capacity_reservations
    #   Information about the individual Capacity Reservations in the
    #   Capacity Reservation Fleet.
    #   @return [Array<Types::FleetCapacityReservation>]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the Capacity Reservation Fleet.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservationFleetResult AWS API Documentation
    #
    class CreateCapacityReservationFleetResult < Struct.new(
      :capacity_reservation_fleet_id,
      :state,
      :total_target_capacity,
      :total_fulfilled_capacity,
      :instance_match_criteria,
      :allocation_strategy,
      :create_time,
      :end_date,
      :tenancy,
      :fleet_capacity_reservations,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensure
    #   Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type for which to reserve capacity.
    #
    #   <note markdown="1"> You can request future-dated Capacity Reservations for instance
    #   types in the C, M, R, I, T, and G instance families only.
    #
    #    </note>
    #
    #   For more information, see [Instance types][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
    #   @return [String]
    #
    # @!attribute [rw] instance_platform
    #   The type of operating system for which to reserve capacity.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which to create the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone in which to create the Capacity
    #   Reservation.
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   Indicates the tenancy of the Capacity Reservation. A Capacity
    #   Reservation can have one of the following tenancy settings:
    #
    #   * `default` - The Capacity Reservation is created on hardware that
    #     is shared with other Amazon Web Services accounts.
    #
    #   * `dedicated` - The Capacity Reservation is created on single-tenant
    #     hardware that is dedicated to a single Amazon Web Services
    #     account.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances for which to reserve capacity.
    #
    #   <note markdown="1"> You can request future-dated Capacity Reservations for an instance
    #   count with a minimum of 64 vCPUs. For example, if you request a
    #   future-dated Capacity Reservation for `m5.xlarge` instances, you
    #   must request at least 25 instances (*16 * m5.xlarge = 64 vCPUs*).
    #
    #    </note>
    #
    #   Valid range: 1 - 1000
    #   @return [Integer]
    #
    # @!attribute [rw] ebs_optimized
    #   Indicates whether the Capacity Reservation supports EBS-optimized
    #   instances. This optimization provides dedicated throughput to Amazon
    #   EBS and an optimized configuration stack to provide optimal I/O
    #   performance. This optimization isn't available with all instance
    #   types. Additional usage charges apply when using an EBS- optimized
    #   instance.
    #   @return [Boolean]
    #
    # @!attribute [rw] ephemeral_storage
    #   *Deprecated.*
    #   @return [Boolean]
    #
    # @!attribute [rw] end_date
    #   The date and time at which the Capacity Reservation expires. When a
    #   Capacity Reservation expires, the reserved capacity is released and
    #   you can no longer launch instances into it. The Capacity
    #   Reservation's state changes to `expired` when it reaches its end
    #   date and time.
    #
    #   You must provide an `EndDate` value if `EndDateType` is `limited`.
    #   Omit `EndDate` if `EndDateType` is `unlimited`.
    #
    #   If the `EndDateType` is `limited`, the Capacity Reservation is
    #   cancelled within an hour from the specified time. For example, if
    #   you specify 5/31/2019, 13:30:55, the Capacity Reservation is
    #   guaranteed to end between 13:30:55 and 14:30:55 on 5/31/2019.
    #
    #   If you are requesting a future-dated Capacity Reservation, you
    #   can't specify an end date and time that is within the commitment
    #   duration.
    #   @return [Time]
    #
    # @!attribute [rw] end_date_type
    #   Indicates the way in which the Capacity Reservation ends. A Capacity
    #   Reservation can have one of the following end types:
    #
    #   * `unlimited` - The Capacity Reservation remains active until you
    #     explicitly cancel it. Do not provide an `EndDate` if the
    #     `EndDateType` is `unlimited`.
    #
    #   * `limited` - The Capacity Reservation expires automatically at a
    #     specified date and time. You must provide an `EndDate` value if
    #     the `EndDateType` value is `limited`.
    #   @return [String]
    #
    # @!attribute [rw] instance_match_criteria
    #   Indicates the type of instance launches that the Capacity
    #   Reservation accepts. The options include:
    #
    #   * `open` - The Capacity Reservation automatically matches all
    #     instances that have matching attributes (instance type, platform,
    #     and Availability Zone). Instances that have matching attributes
    #     run in the Capacity Reservation automatically without specifying
    #     any additional parameters.
    #
    #   * `targeted` - The Capacity Reservation only accepts instances that
    #     have matching attributes (instance type, platform, and
    #     Availability Zone), and explicitly target the Capacity
    #     Reservation. This ensures that only permitted instances can use
    #     the reserved capacity.
    #
    #   <note markdown="1"> If you are requesting a future-dated Capacity Reservation, you must
    #   specify `targeted`.
    #
    #    </note>
    #
    #   Default: `open`
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the Capacity Reservation during launch.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] outpost_arn
    #   <note markdown="1"> Not supported for future-dated Capacity Reservations.
    #
    #    </note>
    #
    #   The Amazon Resource Name (ARN) of the Outpost on which to create the
    #   Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] placement_group_arn
    #   <note markdown="1"> Not supported for future-dated Capacity Reservations.
    #
    #    </note>
    #
    #   The Amazon Resource Name (ARN) of the cluster placement group in
    #   which to create the Capacity Reservation. For more information, see
    #   [ Capacity Reservations for cluster placement groups][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html
    #   @return [String]
    #
    # @!attribute [rw] start_date
    #   <note markdown="1"> Required for future-dated Capacity Reservations only. To create a
    #   Capacity Reservation for immediate use, omit this parameter.
    #
    #    </note>
    #
    #   The date and time at which the future-dated Capacity Reservation
    #   should become available for use, in the ISO8601 format in the UTC
    #   time zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #
    #   You can request a future-dated Capacity Reservation between 5 and
    #   120 days in advance.
    #   @return [Time]
    #
    # @!attribute [rw] commitment_duration
    #   <note markdown="1"> Required for future-dated Capacity Reservations only. To create a
    #   Capacity Reservation for immediate use, omit this parameter.
    #
    #    </note>
    #
    #   Specify a commitment duration, in seconds, for the future-dated
    #   Capacity Reservation.
    #
    #   The commitment duration is a minimum duration for which you commit
    #   to having the future-dated Capacity Reservation in the `active`
    #   state in your account after it has been delivered.
    #
    #   For more information, see [ Commitment duration][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-concepts.html#cr-commitment-duration
    #   @return [Integer]
    #
    # @!attribute [rw] delivery_preference
    #   <note markdown="1"> Required for future-dated Capacity Reservations only. To create a
    #   Capacity Reservation for immediate use, omit this parameter.
    #
    #    </note>
    #
    #   Indicates that the requested capacity will be delivered in addition
    #   to any running instances or reserved capacity that you have in your
    #   account at the requested date and time.
    #
    #   The only supported value is `incremental`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservationRequest AWS API Documentation
    #
    class CreateCapacityReservationRequest < Struct.new(
      :client_token,
      :instance_type,
      :instance_platform,
      :availability_zone,
      :availability_zone_id,
      :tenancy,
      :instance_count,
      :ebs_optimized,
      :ephemeral_storage,
      :end_date,
      :end_date_type,
      :instance_match_criteria,
      :tag_specifications,
      :dry_run,
      :outpost_arn,
      :placement_group_arn,
      :start_date,
      :commitment_duration,
      :delivery_preference)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation
    #   Information about the Capacity Reservation.
    #   @return [Types::CapacityReservation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCapacityReservationResult AWS API Documentation
    #
    class CreateCapacityReservationResult < Struct.new(
      :capacity_reservation)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_id
    #   The ID of the VPC to associate with the carrier gateway.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to associate with the carrier gateway.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCarrierGatewayRequest AWS API Documentation
    #
    class CreateCarrierGatewayRequest < Struct.new(
      :vpc_id,
      :tag_specifications,
      :dry_run,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] carrier_gateway
    #   Information about the carrier gateway.
    #   @return [Types::CarrierGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCarrierGatewayResult AWS API Documentation
    #
    class CreateCarrierGatewayResult < Struct.new(
      :carrier_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_cidr_block
    #   The IPv4 address range, in CIDR notation, from which to assign
    #   client IP addresses. The address range cannot overlap with the local
    #   CIDR of the VPC in which the associated subnet is located, or the
    #   routes that you add manually. The address range cannot be changed
    #   after the Client VPN endpoint has been created. Client CIDR range
    #   must have a size of at least /22 and must not be greater than /12.
    #   @return [String]
    #
    # @!attribute [rw] server_certificate_arn
    #   The ARN of the server certificate. For more information, see the
    #   [Certificate Manager User Guide][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/acm/latest/userguide/
    #   @return [String]
    #
    # @!attribute [rw] authentication_options
    #   Information about the authentication method to be used to
    #   authenticate clients.
    #   @return [Array<Types::ClientVpnAuthenticationRequest>]
    #
    # @!attribute [rw] connection_log_options
    #   Information about the client connection logging options.
    #
    #   If you enable client connection logging, data about client
    #   connections is sent to a Cloudwatch Logs log stream. The following
    #   information is logged:
    #
    #   * Client connection requests
    #
    #   * Client connection results (successful and unsuccessful)
    #
    #   * Reasons for unsuccessful client connection requests
    #
    #   * Client connection termination time
    #   @return [Types::ConnectionLogOptions]
    #
    # @!attribute [rw] dns_servers
    #   Information about the DNS servers to be used for DNS resolution. A
    #   Client VPN endpoint can have up to two DNS servers. If no DNS server
    #   is specified, the DNS address configured on the device is used for
    #   the DNS server.
    #   @return [Array<String>]
    #
    # @!attribute [rw] transport_protocol
    #   The transport protocol to be used by the VPN session.
    #
    #   Default value: `udp`
    #   @return [String]
    #
    # @!attribute [rw] vpn_port
    #   The port number to assign to the Client VPN endpoint for TCP and UDP
    #   traffic.
    #
    #   Valid Values: `443` \| `1194`
    #
    #   Default Value: `443`
    #   @return [Integer]
    #
    # @!attribute [rw] description
    #   A brief description of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] split_tunnel
    #   Indicates whether split-tunnel is enabled on the Client VPN
    #   endpoint.
    #
    #   By default, split-tunnel on a VPN endpoint is disabled.
    #
    #   For information about split-tunnel VPN endpoints, see [Split-tunnel
    #   Client VPN endpoint][1] in the *Client VPN Administrator Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the Client VPN endpoint during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of one or more security groups to apply to the target
    #   network. You must also specify the ID of the VPC that contains the
    #   security groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC to associate with the Client VPN endpoint. If no
    #   security group IDs are specified in the request, the default
    #   security group for the VPC is applied.
    #   @return [String]
    #
    # @!attribute [rw] self_service_portal
    #   Specify whether to enable the self-service portal for the Client VPN
    #   endpoint.
    #
    #   Default Value: `enabled`
    #   @return [String]
    #
    # @!attribute [rw] client_connect_options
    #   The options for managing connection authorization for new client
    #   connections.
    #   @return [Types::ClientConnectOptions]
    #
    # @!attribute [rw] session_timeout_hours
    #   The maximum VPN session duration time in hours.
    #
    #   Valid values: `8 | 10 | 12 | 24`
    #
    #   Default value: `24`
    #   @return [Integer]
    #
    # @!attribute [rw] client_login_banner_options
    #   Options for enabling a customizable text banner that will be
    #   displayed on Amazon Web Services provided clients when a VPN session
    #   is established.
    #   @return [Types::ClientLoginBannerOptions]
    #
    # @!attribute [rw] client_route_enforcement_options
    #   Client route enforcement is a feature of the Client VPN service that
    #   helps enforce administrator defined routes on devices connected
    #   through the VPN. T his feature helps improve your security posture
    #   by ensuring that network traffic originating from a connected client
    #   is not inadvertently sent outside the VPN tunnel.
    #
    #   Client route enforcement works by monitoring the route table of a
    #   connected device for routing policy changes to the VPN connection.
    #   If the feature detects any VPN routing policy modifications, it will
    #   automatically force an update to the route table, reverting it back
    #   to the expected route configurations.
    #   @return [Types::ClientRouteEnforcementOptions]
    #
    # @!attribute [rw] disconnect_on_session_timeout
    #   Indicates whether the client VPN session is disconnected after the
    #   maximum timeout specified in `SessionTimeoutHours` is reached. If
    #   `true`, users are prompted to reconnect client VPN. If `false`,
    #   client VPN attempts to reconnect automatically. The default value is
    #   `true`.
    #   @return [Boolean]
    #
    # @!attribute [rw] endpoint_ip_address_type
    #   The IP address type for the Client VPN endpoint. Valid values are
    #   `ipv4` (default) for IPv4 addressing only, `ipv6` for IPv6
    #   addressing only, or `dual-stack` for both IPv4 and IPv6 addressing.
    #   When set to `dual-stack,` clients can connect to the endpoint using
    #   either IPv4 or IPv6 addresses..
    #   @return [String]
    #
    # @!attribute [rw] traffic_ip_address_type
    #   The IP address type for traffic within the Client VPN tunnel. Valid
    #   values are `ipv4` (default) for IPv4 traffic only, `ipv6` for IPv6
    #   addressing only, or `dual-stack` for both IPv4 and IPv6 traffic.
    #   When set to `dual-stack`, clients can access both IPv4 and IPv6
    #   resources through the VPN .
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnEndpointRequest AWS API Documentation
    #
    class CreateClientVpnEndpointRequest < Struct.new(
      :client_cidr_block,
      :server_certificate_arn,
      :authentication_options,
      :connection_log_options,
      :dns_servers,
      :transport_protocol,
      :vpn_port,
      :description,
      :split_tunnel,
      :dry_run,
      :client_token,
      :tag_specifications,
      :security_group_ids,
      :vpc_id,
      :self_service_portal,
      :client_connect_options,
      :session_timeout_hours,
      :client_login_banner_options,
      :client_route_enforcement_options,
      :disconnect_on_session_timeout,
      :endpoint_ip_address_type,
      :traffic_ip_address_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The current state of the Client VPN endpoint.
    #   @return [Types::ClientVpnEndpointStatus]
    #
    # @!attribute [rw] dns_name
    #   The DNS name to be used by clients when establishing their VPN
    #   session.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnEndpointResult AWS API Documentation
    #
    class CreateClientVpnEndpointResult < Struct.new(
      :client_vpn_endpoint_id,
      :status,
      :dns_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint to which to add the route.
    #   @return [String]
    #
    # @!attribute [rw] destination_cidr_block
    #   The IPv4 address range, in CIDR notation, of the route destination.
    #   For example:
    #
    #   * To add a route for Internet access, enter `0.0.0.0/0`
    #
    #   * To add a route for a peered VPC, enter the peered VPC's IPv4 CIDR
    #     range
    #
    #   * To add a route for an on-premises network, enter the Amazon Web
    #     Services Site-to-Site VPN connection's IPv4 CIDR range
    #
    #   * To add a route for the local network, enter the client CIDR range
    #   @return [String]
    #
    # @!attribute [rw] target_vpc_subnet_id
    #   The ID of the subnet through which you want to route traffic. The
    #   specified subnet must be an existing target network of the Client
    #   VPN endpoint.
    #
    #   Alternatively, if you're adding a route for the local network,
    #   specify `local`.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A brief description of the route.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnRouteRequest AWS API Documentation
    #
    class CreateClientVpnRouteRequest < Struct.new(
      :client_vpn_endpoint_id,
      :destination_cidr_block,
      :target_vpc_subnet_id,
      :description,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] status
    #   The current state of the route.
    #   @return [Types::ClientVpnRouteStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateClientVpnRouteResult AWS API Documentation
    #
    class CreateClientVpnRouteResult < Struct.new(
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cidr
    #   A customer-owned IP address range to create.
    #   @return [String]
    #
    # @!attribute [rw] coip_pool_id
    #   The ID of the address pool.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCoipCidrRequest AWS API Documentation
    #
    class CreateCoipCidrRequest < Struct.new(
      :cidr,
      :coip_pool_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] coip_cidr
    #   Information about a range of customer-owned IP addresses.
    #   @return [Types::CoipCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCoipCidrResult AWS API Documentation
    #
    class CreateCoipCidrResult < Struct.new(
      :coip_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the CoIP address pool.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCoipPoolRequest AWS API Documentation
    #
    class CreateCoipPoolRequest < Struct.new(
      :local_gateway_route_table_id,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] coip_pool
    #   Information about the CoIP address pool.
    #   @return [Types::CoipPool]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCoipPoolResult AWS API Documentation
    #
    class CreateCoipPoolResult < Struct.new(
      :coip_pool)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CreateCustomerGateway.
    #
    # @!attribute [rw] bgp_asn
    #   For customer gateway devices that support BGP, specify the device's
    #   ASN. You must specify either `BgpAsn` or `BgpAsnExtended` when
    #   creating the customer gateway. If the ASN is larger than
    #   `2,147,483,647`, you must use `BgpAsnExtended`.
    #
    #   Default: 65000
    #
    #   Valid values: `1` to `2,147,483,647`
    #   @return [Integer]
    #
    # @!attribute [rw] public_ip
    #   *This member has been deprecated.* The Internet-routable IP address
    #   for the customer gateway's outside interface. The address must be
    #   static.
    #   @return [String]
    #
    # @!attribute [rw] certificate_arn
    #   The Amazon Resource Name (ARN) for the customer gateway certificate.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of VPN connection that this customer gateway supports
    #   (`ipsec.1`).
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the customer gateway.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] device_name
    #   A name for the customer gateway device.
    #
    #   Length Constraints: Up to 255 characters.
    #   @return [String]
    #
    # @!attribute [rw] ip_address
    #   The IP address for the customer gateway device's outside interface.
    #   The address must be static. If `OutsideIpAddressType` in your VPN
    #   connection options is set to `PrivateIpv4`, you can use an RFC6598
    #   or RFC1918 private IPv4 address. If `OutsideIpAddressType` is set to
    #   `Ipv6`, you can use an IPv6 address.
    #   @return [String]
    #
    # @!attribute [rw] bgp_asn_extended
    #   For customer gateway devices that support BGP, specify the device's
    #   ASN. You must specify either `BgpAsn` or `BgpAsnExtended` when
    #   creating the customer gateway. If the ASN is larger than
    #   `2,147,483,647`, you must use `BgpAsnExtended`.
    #
    #   Valid values: `2,147,483,648` to `4,294,967,295`
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGatewayRequest AWS API Documentation
    #
    class CreateCustomerGatewayRequest < Struct.new(
      :bgp_asn,
      :public_ip,
      :certificate_arn,
      :type,
      :tag_specifications,
      :device_name,
      :ip_address,
      :bgp_asn_extended,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CreateCustomerGateway.
    #
    # @!attribute [rw] customer_gateway
    #   Information about the customer gateway.
    #   @return [Types::CustomerGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateCustomerGatewayResult AWS API Documentation
    #
    class CreateCustomerGatewayResult < Struct.new(
      :customer_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] availability_zone
    #   The Availability Zone in which to create the default subnet.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` must be specified,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipv_6_native
    #   Indicates whether to create an IPv6 only subnet. If you already have
    #   a default subnet for this Availability Zone, you must delete it
    #   before you can create an IPv6 only subnet.
    #   @return [Boolean]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` must be specified,
    #   but not both.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultSubnetRequest AWS API Documentation
    #
    class CreateDefaultSubnetRequest < Struct.new(
      :availability_zone,
      :dry_run,
      :ipv_6_native,
      :availability_zone_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] subnet
    #   Information about the subnet.
    #   @return [Types::Subnet]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultSubnetResult AWS API Documentation
    #
    class CreateDefaultSubnetResult < Struct.new(
      :subnet)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultVpcRequest AWS API Documentation
    #
    class CreateDefaultVpcRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc
    #   Information about the VPC.
    #   @return [Types::Vpc]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDefaultVpcResult AWS API Documentation
    #
    class CreateDefaultVpcResult < Struct.new(
      :vpc)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the Amazon EC2 Mac instance.
    #   @return [String]
    #
    # @!attribute [rw] mac_credentials
    #   Specifies the following credentials:
    #
    #   * **Internal disk administrative user**
    #
    #     * **Username** - Only the default administrative user
    #       (`aws-managed-user`) is supported and it is used by default. You
    #       can't specify a different administrative user.
    #
    #     * **Password** - If you did not change the default password for
    #       `aws-managed-user`, specify the default password, which is
    #       *blank*. Otherwise, specify your password.
    #   * **Amazon EBS root volume administrative user**
    #
    #     * **Username** - If you did not change the default administrative
    #       user, specify `ec2-user`. Otherwise, specify the username for
    #       your administrative user.
    #
    #     * **Password** - Specify the password for the administrative user.
    #
    #   The credentials must be specified in the following JSON format:
    #
    #   `{ "internalDiskPassword":"internal-disk-admin_password",
    #   "rootVolumeUsername":"root-volume-admin_username",
    #   "rootVolumepassword":"root-volume-admin_password" }`
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the volume ownership delegation task.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDelegateMacVolumeOwnershipTaskRequest AWS API Documentation
    #
    class CreateDelegateMacVolumeOwnershipTaskRequest < Struct.new(
      :client_token,
      :dry_run,
      :instance_id,
      :mac_credentials,
      :tag_specifications)
      SENSITIVE = [:mac_credentials]
      include Aws::Structure
    end

    # @!attribute [rw] mac_modification_task
    #   Information about the volume ownership delegation task.
    #   @return [Types::MacModificationTask]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDelegateMacVolumeOwnershipTaskResult AWS API Documentation
    #
    class CreateDelegateMacVolumeOwnershipTaskResult < Struct.new(
      :mac_modification_task)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dhcp_configurations
    #   A DHCP configuration option.
    #   @return [Array<Types::NewDhcpConfiguration>]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the DHCP option.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptionsRequest AWS API Documentation
    #
    class CreateDhcpOptionsRequest < Struct.new(
      :dhcp_configurations,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dhcp_options
    #   A set of DHCP options.
    #   @return [Types::DhcpOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateDhcpOptionsResult AWS API Documentation
    #
    class CreateDhcpOptionsResult < Struct.new(
      :dhcp_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC for which to create the egress-only internet
    #   gateway.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the egress-only internet gateway.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGatewayRequest AWS API Documentation
    #
    class CreateEgressOnlyInternetGatewayRequest < Struct.new(
      :client_token,
      :dry_run,
      :vpc_id,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request.
    #   @return [String]
    #
    # @!attribute [rw] egress_only_internet_gateway
    #   Information about the egress-only internet gateway.
    #   @return [Types::EgressOnlyInternetGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateEgressOnlyInternetGatewayResult AWS API Documentation
    #
    class CreateEgressOnlyInternetGatewayResult < Struct.new(
      :client_token,
      :egress_only_internet_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the instances that could not be launched by the fleet.
    #
    # @!attribute [rw] launch_template_and_overrides
    #   The launch templates and overrides that were used for launching the
    #   instances. The values that you specify in the Overrides replace the
    #   values in the launch template.
    #   @return [Types::LaunchTemplateAndOverridesResponse]
    #
    # @!attribute [rw] lifecycle
    #   Indicates if the instance that could not be launched was a Spot
    #   Instance or On-Demand Instance.
    #   @return [String]
    #
    # @!attribute [rw] error_code
    #   The error code that indicates why the instance could not be
    #   launched. For more information about error codes, see [Error
    #   codes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html
    #   @return [String]
    #
    # @!attribute [rw] error_message
    #   The error message that describes why the instance could not be
    #   launched. For more information about error messages, see [Error
    #   codes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFleetError AWS API Documentation
    #
    class CreateFleetError < Struct.new(
      :launch_template_and_overrides,
      :lifecycle,
      :error_code,
      :error_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the instances that were launched by the fleet.
    #
    # @!attribute [rw] launch_template_and_overrides
    #   The launch templates and overrides that were used for launching the
    #   instances. The values that you specify in the Overrides replace the
    #   values in the launch template.
    #   @return [Types::LaunchTemplateAndOverridesResponse]
    #
    # @!attribute [rw] lifecycle
    #   Indicates if the instance that was launched is a Spot Instance or
    #   On-Demand Instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_ids
    #   The IDs of the instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The value is `windows` for Windows instances in an EC2 Fleet.
    #   Otherwise, the value is blank.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFleetInstance AWS API Documentation
    #
    class CreateFleetInstance < Struct.new(
      :launch_template_and_overrides,
      :lifecycle,
      :instance_ids,
      :instance_type,
      :platform)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that 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.
    #
    #   For more information, see [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] spot_options
    #   Describes the configuration of Spot Instances in an EC2 Fleet.
    #   @return [Types::SpotOptionsRequest]
    #
    # @!attribute [rw] on_demand_options
    #   Describes the configuration of On-Demand Instances in an EC2 Fleet.
    #   @return [Types::OnDemandOptionsRequest]
    #
    # @!attribute [rw] excess_capacity_termination_policy
    #   Indicates whether running instances should be terminated if the
    #   total target capacity of the EC2 Fleet is decreased below the
    #   current size of the EC2 Fleet.
    #
    #   Supported only for fleets of type `maintain`.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_configs
    #   The configuration for the EC2 Fleet.
    #   @return [Array<Types::FleetLaunchTemplateConfigRequest>]
    #
    # @!attribute [rw] target_capacity_specification
    #   The number of units to request.
    #   @return [Types::TargetCapacitySpecificationRequest]
    #
    # @!attribute [rw] terminate_instances_with_expiration
    #   Indicates whether running instances should be terminated when the
    #   EC2 Fleet expires.
    #   @return [Boolean]
    #
    # @!attribute [rw] type
    #   The fleet type. The default value is `maintain`.
    #
    #   * `maintain` - The EC2 Fleet places an asynchronous request for your
    #     desired capacity, and continues to maintain your desired Spot
    #     capacity by replenishing interrupted Spot Instances.
    #
    #   * `request` - The EC2 Fleet places an asynchronous one-time request
    #     for your desired capacity, but does submit Spot requests in
    #     alternative capacity pools if Spot capacity is unavailable, and
    #     does not maintain Spot capacity if Spot Instances are interrupted.
    #
    #   * `instant` - The EC2 Fleet places a synchronous one-time request
    #     for your desired capacity, and returns errors for any instances
    #     that could not be launched.
    #
    #   For more information, see [EC2 Fleet request types][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-request-type.html
    #   @return [String]
    #
    # @!attribute [rw] valid_from
    #   The start date and time of the request, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). The default is to start
    #   fulfilling the request immediately.
    #   @return [Time]
    #
    # @!attribute [rw] valid_until
    #   The end date and time of the request, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). At this point, no new EC2 Fleet
    #   requests are placed or able to fulfill the request. If no value is
    #   specified, the request remains until you cancel it.
    #   @return [Time]
    #
    # @!attribute [rw] replace_unhealthy_instances
    #   Indicates whether EC2 Fleet should replace unhealthy Spot Instances.
    #   Supported only for fleets of type `maintain`. For more information,
    #   see [EC2 Fleet health checks][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The key-value pair for tagging the EC2 Fleet request on creation.
    #   For more information, see [Tag your resources][1].
    #
    #   If the fleet type is `instant`, specify a resource type of `fleet`
    #   to tag the fleet or `instance` to tag the instances at launch.
    #
    #   If the fleet type is `maintain` or `request`, specify a resource
    #   type of `fleet` to tag the fleet. You cannot specify a resource type
    #   of `instance`. To tag instances at launch, specify the tags in a
    #   [launch template][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] context
    #   Reserved.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFleetRequest AWS API Documentation
    #
    class CreateFleetRequest < Struct.new(
      :dry_run,
      :client_token,
      :spot_options,
      :on_demand_options,
      :excess_capacity_termination_policy,
      :launch_template_configs,
      :target_capacity_specification,
      :terminate_instances_with_expiration,
      :type,
      :valid_from,
      :valid_until,
      :replace_unhealthy_instances,
      :tag_specifications,
      :context)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] fleet_id
    #   The ID of the EC2 Fleet.
    #   @return [String]
    #
    # @!attribute [rw] errors
    #   Information about the instances that could not be launched by the
    #   fleet. Supported only for fleets of type `instant`.
    #   @return [Array<Types::CreateFleetError>]
    #
    # @!attribute [rw] instances
    #   Information about the instances that were launched by the fleet.
    #   Supported only for fleets of type `instant`.
    #   @return [Array<Types::CreateFleetInstance>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFleetResult AWS API Documentation
    #
    class CreateFleetResult < Struct.new(
      :fleet_id,
      :errors,
      :instances)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] deliver_logs_permission_arn
    #   The ARN of the IAM role that allows Amazon EC2 to publish flow logs
    #   to the log destination.
    #
    #   This parameter is required if the destination type is
    #   `cloud-watch-logs`, or if the destination type is
    #   `kinesis-data-firehose` and the delivery stream and the resources to
    #   monitor are in different accounts.
    #   @return [String]
    #
    # @!attribute [rw] deliver_cross_account_role
    #   The ARN of the IAM role that allows Amazon EC2 to publish flow logs
    #   across accounts.
    #   @return [String]
    #
    # @!attribute [rw] log_group_name
    #   The name of a new or existing CloudWatch Logs log group where Amazon
    #   EC2 publishes your flow logs.
    #
    #   This parameter is valid only if the destination type is
    #   `cloud-watch-logs`.
    #   @return [String]
    #
    # @!attribute [rw] resource_ids
    #   The IDs of the resources to monitor. For example, if the resource
    #   type is `VPC`, specify the IDs of the VPCs.
    #
    #   Constraints: Maximum of 25 for transit gateway resource types.
    #   Maximum of 1000 for the other resource types.
    #   @return [Array<String>]
    #
    # @!attribute [rw] resource_type
    #   The type of resource to monitor.
    #   @return [String]
    #
    # @!attribute [rw] traffic_type
    #   The type of traffic to monitor (accepted traffic, rejected traffic,
    #   or all traffic). This parameter is not supported for transit gateway
    #   resource types. It is required for the other resource types.
    #   @return [String]
    #
    # @!attribute [rw] log_destination_type
    #   The type of destination for the flow log data.
    #
    #   Default: `cloud-watch-logs`
    #   @return [String]
    #
    # @!attribute [rw] log_destination
    #   The destination for the flow log data. The meaning of this parameter
    #   depends on the destination type.
    #
    #   * If the destination type is `cloud-watch-logs`, specify the ARN of
    #     a CloudWatch Logs log group. For example:
    #
    #     arn:aws:logs:*region*:*account\_id*:log-group:*my\_group*
    #
    #     Alternatively, use the `LogGroupName` parameter.
    #
    #   * If the destination type is `s3`, specify the ARN of an S3 bucket.
    #     For example:
    #
    #     arn:aws:s3:::*my\_bucket*/*my\_subfolder*/
    #
    #     The subfolder is optional. Note that you can't use `AWSLogs` as a
    #     subfolder name.
    #
    #   * If the destination type is `kinesis-data-firehose`, specify the
    #     ARN of a Kinesis Data Firehose delivery stream. For example:
    #
    #     arn:aws:firehose:*region*:*account\_id*:deliverystream:*my\_stream*
    #   @return [String]
    #
    # @!attribute [rw] log_format
    #   The fields to include in the flow log record. List the fields in the
    #   order in which they should appear. If you omit this parameter, the
    #   flow log is created using the default format. If you specify this
    #   parameter, you must include at least one field. For more information
    #   about the available fields, see [Flow log records][1] in the *Amazon
    #   VPC User Guide* or [Transit Gateway Flow Log records][2] in the
    #   *Amazon Web Services Transit Gateway Guide*.
    #
    #   Specify the fields using the `${field-id}` format, separated by
    #   spaces.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/userguide/flow-log-records.html
    #   [2]: https://docs.aws.amazon.com/vpc/latest/tgw/tgw-flow-logs.html#flow-log-records
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the flow logs.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] max_aggregation_interval
    #   The maximum interval of time during which a flow of packets is
    #   captured and aggregated into a flow log record. The possible values
    #   are 60 seconds (1 minute) or 600 seconds (10 minutes). This
    #   parameter must be 60 seconds for transit gateway resource types.
    #
    #   When a network interface is attached to a [Nitro-based instance][1],
    #   the aggregation interval is always 60 seconds or less, regardless of
    #   the value that you specify.
    #
    #   Default: 600
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html
    #   @return [Integer]
    #
    # @!attribute [rw] destination_options
    #   The destination options.
    #   @return [Types::DestinationOptionsRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogsRequest AWS API Documentation
    #
    class CreateFlowLogsRequest < Struct.new(
      :dry_run,
      :client_token,
      :deliver_logs_permission_arn,
      :deliver_cross_account_role,
      :log_group_name,
      :resource_ids,
      :resource_type,
      :traffic_type,
      :log_destination_type,
      :log_destination,
      :log_format,
      :tag_specifications,
      :max_aggregation_interval,
      :destination_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request.
    #   @return [String]
    #
    # @!attribute [rw] flow_log_ids
    #   The IDs of the flow logs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] unsuccessful
    #   Information about the flow logs that could not be created
    #   successfully.
    #   @return [Array<Types::UnsuccessfulItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFlowLogsResult AWS API Documentation
    #
    class CreateFlowLogsResult < Struct.new(
      :client_token,
      :flow_log_ids,
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] input_storage_location
    #   The location of the encrypted design checkpoint in Amazon S3. The
    #   input must be a tarball.
    #   @return [Types::StorageLocation]
    #
    # @!attribute [rw] logs_storage_location
    #   The location in Amazon S3 for the output logs.
    #   @return [Types::StorageLocation]
    #
    # @!attribute [rw] description
    #   A description for the AFI.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   A name for the AFI.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the FPGA image during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFpgaImageRequest AWS API Documentation
    #
    class CreateFpgaImageRequest < Struct.new(
      :dry_run,
      :input_storage_location,
      :logs_storage_location,
      :description,
      :name,
      :client_token,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] fpga_image_id
    #   The FPGA image identifier (AFI ID).
    #   @return [String]
    #
    # @!attribute [rw] fpga_image_global_id
    #   The global FPGA image identifier (AGFI ID).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateFpgaImageResult AWS API Documentation
    #
    class CreateFpgaImageResult < Struct.new(
      :fpga_image_id,
      :fpga_image_global_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tag_specifications
    #   The tags to apply to the AMI and snapshots on creation. You can tag
    #   the AMI, the snapshots, or both.
    #
    #   * To tag the AMI, the value for `ResourceType` must be `image`.
    #
    #   * To tag the snapshots that are created of the root volume and of
    #     other Amazon EBS volumes that are attached to the instance, the
    #     value for `ResourceType` must be `snapshot`. The same tag is
    #     applied to all of the snapshots that are created.
    #
    #   If you specify other values for `ResourceType`, the request fails.
    #
    #   To tag an AMI or snapshot after it has been created, see
    #   [CreateTags][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] snapshot_location
    #   <note markdown="1"> Only supported for instances in Local Zones. If the source instance
    #   is not in a Local Zone, omit this parameter.
    #
    #    </note>
    #
    #   The Amazon S3 location where the snapshots will be stored.
    #
    #   * To create local snapshots in the same Local Zone as the source
    #     instance, specify `local`.
    #
    #   * To create regional snapshots in the parent Region of the Local
    #     Zone, specify `regional` or omit this parameter.
    #
    #   Default: `regional`
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   A name for the new image.
    #
    #   Constraints: 3-128 alphanumeric characters, parentheses (()), square
    #   brackets (\[\]), spaces ( ), periods (.), slashes (/), dashes (-),
    #   single quotes ('), at-signs (@), or underscores(\_)
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the new image.
    #   @return [String]
    #
    # @!attribute [rw] no_reboot
    #   Indicates whether or not the instance should be automatically
    #   rebooted before creating the image. Specify one of the following
    #   values:
    #
    #   * `true` - The instance is not rebooted before creating the image.
    #     This creates crash-consistent snapshots that include only the data
    #     that has been written to the volumes at the time the snapshots are
    #     created. Buffered data and data in memory that has not yet been
    #     written to the volumes is not included in the snapshots.
    #
    #   * `false` - The instance is rebooted before creating the image. This
    #     ensures that all buffered data and data in memory is written to
    #     the volumes before the snapshots are created.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mappings.
    #
    #   When using the CreateImage action:
    #
    #   * You can't change the volume size using the VolumeSize parameter.
    #     If you want a different volume size, you must first change the
    #     volume size of the source instance.
    #
    #   * You can't modify the encryption status of existing volumes or
    #     snapshots. To create an AMI with volumes or snapshots that have a
    #     different encryption status (for example, where the source volume
    #     and snapshots are unencrypted, and you want to create an AMI with
    #     encrypted volumes or snapshots), copy the image instead.
    #
    #   * The only option that can be changed for existing mappings or
    #     snapshots is `DeleteOnTermination`.
    #   @return [Array<Types::BlockDeviceMapping>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImageRequest AWS API Documentation
    #
    class CreateImageRequest < Struct.new(
      :tag_specifications,
      :snapshot_location,
      :dry_run,
      :instance_id,
      :name,
      :description,
      :no_reboot,
      :block_device_mappings)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the new AMI.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImageResult AWS API Documentation
    #
    class CreateImageResult < Struct.new(
      :image_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the image to report on.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] resource_types
    #   The resource types to include in the report.
    #   @return [Array<Types::ImageUsageResourceTypeRequest>]
    #
    # @!attribute [rw] account_ids
    #   The Amazon Web Services account IDs to include in the report. To
    #   include all accounts, omit this parameter.
    #   @return [Array<String>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive identifier that you provide to ensure
    #   idempotency of the request.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the report on creation. The `ResourceType` must
    #   be set to `image-usage-report`; any other value will cause the
    #   report creation to fail.
    #
    #   To tag a report after it has been created, see [CreateTags][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImageUsageReportRequest AWS API Documentation
    #
    class CreateImageUsageReportRequest < Struct.new(
      :image_id,
      :dry_run,
      :resource_types,
      :account_ids,
      :client_token,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] report_id
    #   The ID of the report.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateImageUsageReportResult AWS API Documentation
    #
    class CreateImageUsageReportResult < Struct.new(
      :report_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which to create the EC2 Instance Connect
    #   Endpoint.
    #   @return [String]
    #
    # @!attribute [rw] security_group_ids
    #   One or more security groups to associate with the endpoint. If you
    #   don't specify a security group, the default security group for your
    #   VPC will be associated with the endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] preserve_client_ip
    #   Indicates whether the client IP address is preserved as the source.
    #   The following are the possible values.
    #
    #   * `true` - Use the client IP address as the source.
    #
    #   * `false` - Use the network interface IP address as the source.
    #
    #   <note markdown="1"> `PreserveClientIp` is only supported on IPv4 EC2 Instance Connect
    #   Endpoints. To use `PreserveClientIp`, the value for `IpAddressType`
    #   must be `ipv4`.
    #
    #    </note>
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the EC2 Instance Connect Endpoint during
    #   creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] ip_address_type
    #   The IP address type of the endpoint.
    #
    #   If no value is specified, the default value is determined by the IP
    #   address type of the subnet:
    #
    #   * `dualstack` - If the subnet has both IPv4 and IPv6 CIDRs
    #
    #   * `ipv4` - If the subnet has only IPv4 CIDRs
    #
    #   * `ipv6` - If the subnet has only IPv6 CIDRs
    #
    #   <note markdown="1"> `PreserveClientIp` is only supported on IPv4 EC2 Instance Connect
    #   Endpoints. To use `PreserveClientIp`, the value for `IpAddressType`
    #   must be `ipv4`.
    #
    #    </note>
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceConnectEndpointRequest AWS API Documentation
    #
    class CreateInstanceConnectEndpointRequest < Struct.new(
      :dry_run,
      :subnet_id,
      :security_group_ids,
      :preserve_client_ip,
      :client_token,
      :tag_specifications,
      :ip_address_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_connect_endpoint
    #   Information about the EC2 Instance Connect Endpoint.
    #   @return [Types::Ec2InstanceConnectEndpoint]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive idempotency token provided by the client in
    #   the the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceConnectEndpointResult AWS API Documentation
    #
    class CreateInstanceConnectEndpointResult < Struct.new(
      :instance_connect_endpoint,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] name
    #   The name of the event window.
    #   @return [String]
    #
    # @!attribute [rw] time_ranges
    #   The time range for the event window. If you specify a time range,
    #   you can't specify a cron expression.
    #   @return [Array<Types::InstanceEventWindowTimeRangeRequest>]
    #
    # @!attribute [rw] cron_expression
    #   The cron expression for the event window, for example, `* 0-4,20-23
    #   * * 1,5`. If you specify a cron expression, you can't specify a
    #   time range.
    #
    #   Constraints:
    #
    #   * Only hour and day of the week values are supported.
    #
    #   * For day of the week values, you can specify either integers `0`
    #     through `6`, or alternative single values `SUN` through `SAT`.
    #
    #   * The minute, month, and year must be specified by `*`.
    #
    #   * The hour value must be one or a multiple range, for example, `0-4`
    #     or `0-4,20-23`.
    #
    #   * Each hour range must be &gt;= 2 hours, for example, `0-2` or
    #     `20-23`.
    #
    #   * The event window must be &gt;= 4 hours. The combined total time
    #     ranges in the event window must be &gt;= 4 hours.
    #
    #   For more information about cron expressions, see [cron][1] on the
    #   *Wikipedia website*.
    #
    #
    #
    #   [1]: https://en.wikipedia.org/wiki/Cron
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the event window.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceEventWindowRequest AWS API Documentation
    #
    class CreateInstanceEventWindowRequest < Struct.new(
      :dry_run,
      :name,
      :time_ranges,
      :cron_expression,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_event_window
    #   Information about the event window.
    #   @return [Types::InstanceEventWindow]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceEventWindowResult AWS API Documentation
    #
    class CreateInstanceEventWindowResult < Struct.new(
      :instance_event_window)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tag_specifications
    #   The tags to apply to the export instance task during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] description
    #   A description for the conversion task or the resource being
    #   exported. The maximum length is 255 characters.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] target_environment
    #   The target virtualization environment.
    #   @return [String]
    #
    # @!attribute [rw] export_to_s3_task
    #   The format and location for an export instance task.
    #   @return [Types::ExportToS3TaskSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTaskRequest AWS API Documentation
    #
    class CreateInstanceExportTaskRequest < Struct.new(
      :tag_specifications,
      :description,
      :instance_id,
      :target_environment,
      :export_to_s3_task)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] export_task
    #   Information about the export instance task.
    #   @return [Types::ExportTask]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInstanceExportTaskResult AWS API Documentation
    #
    class CreateInstanceExportTaskResult < Struct.new(
      :export_task)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tag_specifications
    #   The tags to assign to the internet gateway.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGatewayRequest AWS API Documentation
    #
    class CreateInternetGatewayRequest < Struct.new(
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] internet_gateway
    #   Information about the internet gateway.
    #   @return [Types::InternetGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateInternetGatewayResult AWS API Documentation
    #
    class CreateInternetGatewayResult < Struct.new(
      :internet_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_id
    #   The ID of the IPAM that will create the token.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   Token tags.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamExternalResourceVerificationTokenRequest AWS API Documentation
    #
    class CreateIpamExternalResourceVerificationTokenRequest < Struct.new(
      :dry_run,
      :ipam_id,
      :tag_specifications,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_external_resource_verification_token
    #   The verification token.
    #   @return [Types::IpamExternalResourceVerificationToken]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamExternalResourceVerificationTokenResult AWS API Documentation
    #
    class CreateIpamExternalResourceVerificationTokenResult < Struct.new(
      :ipam_external_resource_verification_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_scope_id
    #   The ID of the scope in which you would like to create the IPAM pool.
    #   @return [String]
    #
    # @!attribute [rw] locale
    #   The locale for the pool should be one of the following:
    #
    #   * An Amazon Web Services Region where you want this IPAM pool to be
    #     available for allocations.
    #
    #   * The network border group for an Amazon Web Services Local Zone
    #     where you want this IPAM pool to be available for allocations
    #     ([supported Local Zones][1]). This option is only available for
    #     IPAM IPv4 pools in the public scope.
    #
    #   Possible values: Any Amazon Web Services Region or supported Amazon
    #   Web Services Local Zone. Default is `none` and means any locale.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#byoip-zone-avail
    #   @return [String]
    #
    # @!attribute [rw] source_ipam_pool_id
    #   The ID of the source IPAM pool. Use this option to create a pool
    #   within an existing pool. Note that the CIDR you provision for the
    #   pool within the source pool must be available in the source pool's
    #   CIDR range.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the IPAM pool.
    #   @return [String]
    #
    # @!attribute [rw] address_family
    #   The IP protocol assigned to this IPAM pool. You must choose either
    #   IPv4 or IPv6 protocol for a pool.
    #   @return [String]
    #
    # @!attribute [rw] auto_import
    #   If selected, IPAM will continuously look for resources within the
    #   CIDR range of this pool and automatically import them as allocations
    #   into your IPAM. The CIDRs that will be allocated for these resources
    #   must not already be allocated to other resources in order for the
    #   import to succeed. IPAM will import a CIDR regardless of its
    #   compliance with the pool's allocation rules, so a resource might be
    #   imported and subsequently marked as noncompliant. If IPAM discovers
    #   multiple CIDRs that overlap, IPAM will import the largest CIDR only.
    #   If IPAM discovers multiple CIDRs with matching CIDRs, IPAM will
    #   randomly import one of them only.
    #
    #   A locale must be set on the pool for this feature to work.
    #   @return [Boolean]
    #
    # @!attribute [rw] publicly_advertisable
    #   Determines if the pool is publicly advertisable. The request can
    #   only contain `PubliclyAdvertisable` if `AddressFamily` is `ipv6` and
    #   `PublicIpSource` is `byoip`.
    #   @return [Boolean]
    #
    # @!attribute [rw] allocation_min_netmask_length
    #   The minimum netmask length required for CIDR allocations in this
    #   IPAM pool to be compliant. The minimum netmask length must be less
    #   than the maximum netmask length. Possible netmask lengths for IPv4
    #   addresses are 0 - 32. Possible netmask lengths for IPv6 addresses
    #   are 0 - 128.
    #   @return [Integer]
    #
    # @!attribute [rw] allocation_max_netmask_length
    #   The maximum netmask length possible for CIDR allocations in this
    #   IPAM pool to be compliant. The maximum netmask length must be
    #   greater than the minimum netmask length. Possible netmask lengths
    #   for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6
    #   addresses are 0 - 128.
    #   @return [Integer]
    #
    # @!attribute [rw] allocation_default_netmask_length
    #   The default netmask length for allocations added to this pool. If,
    #   for example, the CIDR assigned to this pool is 10.0.0.0/8 and you
    #   enter 16 here, new allocations will default to 10.0.0.0/16.
    #   @return [Integer]
    #
    # @!attribute [rw] allocation_resource_tags
    #   Tags that are required for resources that use CIDRs from this IPAM
    #   pool. Resources that do not have these tags will not be allowed to
    #   allocate space from the pool. If the resources have their tags
    #   changed after they have allocated space or if the allocation tagging
    #   requirements are changed on the pool, the resource may be marked as
    #   noncompliant.
    #   @return [Array<Types::RequestIpamResourceTag>]
    #
    # @!attribute [rw] tag_specifications
    #   The key/value combination of a tag assigned to the resource. Use the
    #   tag key in the filter name and the tag value as the filter value.
    #   For example, to find all resources that have a tag with the key
    #   `Owner` and the value `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] aws_service
    #   Limits which service in Amazon Web Services that the pool can be
    #   used in. "ec2", for example, allows users to use space for Elastic
    #   IP addresses and VPCs.
    #   @return [String]
    #
    # @!attribute [rw] public_ip_source
    #   The IP address source for pools in the public scope. Only used for
    #   provisioning IP address CIDRs to pools in the public scope. Default
    #   is `byoip`. For more information, see [Create IPv6 pools][1] in the
    #   *Amazon VPC IPAM User Guide*. By default, you can add only one
    #   Amazon-provided IPv6 CIDR block to a top-level IPv6 pool if
    #   PublicIpSource is `amazon`. For information on increasing the
    #   default limit, see [ Quotas for your IPAM][2] in the *Amazon VPC
    #   IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/intro-create-ipv6-pools.html
    #   [2]: https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] source_resource
    #   The resource used to provision CIDRs to a resource planning pool.
    #   @return [Types::IpamPoolSourceResourceRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamPoolRequest AWS API Documentation
    #
    class CreateIpamPoolRequest < Struct.new(
      :dry_run,
      :ipam_scope_id,
      :locale,
      :source_ipam_pool_id,
      :description,
      :address_family,
      :auto_import,
      :publicly_advertisable,
      :allocation_min_netmask_length,
      :allocation_max_netmask_length,
      :allocation_default_netmask_length,
      :allocation_resource_tags,
      :tag_specifications,
      :client_token,
      :aws_service,
      :public_ip_source,
      :source_resource)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_pool
    #   Information about the IPAM pool created.
    #   @return [Types::IpamPool]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamPoolResult AWS API Documentation
    #
    class CreateIpamPoolResult < Struct.new(
      :ipam_pool)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   A description for the IPAM.
    #   @return [String]
    #
    # @!attribute [rw] operating_regions
    #   The operating Regions for the IPAM. Operating Regions are Amazon Web
    #   Services Regions where the IPAM is allowed to manage IP address
    #   CIDRs. IPAM only discovers and monitors resources in the Amazon Web
    #   Services Regions you select as operating Regions.
    #
    #   For more information about operating Regions, see [Create an
    #   IPAM][1] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html
    #   @return [Array<Types::AddIpamOperatingRegion>]
    #
    # @!attribute [rw] tag_specifications
    #   The key/value combination of a tag assigned to the resource. Use the
    #   tag key in the filter name and the tag value as the filter value.
    #   For example, to find all resources that have a tag with the key
    #   `Owner` and the value `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] tier
    #   IPAM is offered in a Free Tier and an Advanced Tier. For more
    #   information about the features available in each tier and the costs
    #   associated with the tiers, see [Amazon VPC pricing &gt; IPAM
    #   tab][1].
    #
    #
    #
    #   [1]: http://aws.amazon.com/vpc/pricing/
    #   @return [String]
    #
    # @!attribute [rw] enable_private_gua
    #   Enable this option to use your own GUA ranges as private IPv6
    #   addresses. This option is disabled by default.
    #   @return [Boolean]
    #
    # @!attribute [rw] metered_account
    #   A metered account is an Amazon Web Services account that is charged
    #   for active IP addresses managed in IPAM. For more information, see
    #   [Enable cost distribution][1] in the *Amazon VPC IPAM User Guide*.
    #
    #   Possible values:
    #
    #   * `ipam-owner` (default): The Amazon Web Services account which owns
    #     the IPAM is charged for all active IP addresses managed in IPAM.
    #
    #   * `resource-owner`: The Amazon Web Services account that owns the IP
    #     address is charged for the active IP address.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/ipam-enable-cost-distro.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamRequest AWS API Documentation
    #
    class CreateIpamRequest < Struct.new(
      :dry_run,
      :description,
      :operating_regions,
      :tag_specifications,
      :client_token,
      :tier,
      :enable_private_gua,
      :metered_account)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   A description for the IPAM resource discovery.
    #   @return [String]
    #
    # @!attribute [rw] operating_regions
    #   Operating Regions for the IPAM resource discovery. Operating Regions
    #   are Amazon Web Services Regions where the IPAM is allowed to manage
    #   IP address CIDRs. IPAM only discovers and monitors resources in the
    #   Amazon Web Services Regions you select as operating Regions.
    #   @return [Array<Types::AddIpamOperatingRegion>]
    #
    # @!attribute [rw] tag_specifications
    #   Tag specifications for the IPAM resource discovery.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A client token for the IPAM resource discovery.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamResourceDiscoveryRequest AWS API Documentation
    #
    class CreateIpamResourceDiscoveryRequest < Struct.new(
      :dry_run,
      :description,
      :operating_regions,
      :tag_specifications,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_resource_discovery
    #   An IPAM resource discovery.
    #   @return [Types::IpamResourceDiscovery]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamResourceDiscoveryResult AWS API Documentation
    #
    class CreateIpamResourceDiscoveryResult < Struct.new(
      :ipam_resource_discovery)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam
    #   Information about the IPAM created.
    #   @return [Types::Ipam]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamResult AWS API Documentation
    #
    class CreateIpamResult < Struct.new(
      :ipam)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_id
    #   The ID of the IPAM for which you're creating this scope.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the scope you're creating.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The key/value combination of a tag assigned to the resource. Use the
    #   tag key in the filter name and the tag value as the filter value.
    #   For example, to find all resources that have a tag with the key
    #   `Owner` and the value `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamScopeRequest AWS API Documentation
    #
    class CreateIpamScopeRequest < Struct.new(
      :dry_run,
      :ipam_id,
      :description,
      :tag_specifications,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_scope
    #   Information about the created scope.
    #   @return [Types::IpamScope]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateIpamScopeResult AWS API Documentation
    #
    class CreateIpamScopeResult < Struct.new(
      :ipam_scope)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] key_name
    #   A unique name for the key pair.
    #
    #   Constraints: Up to 255 ASCII characters
    #   @return [String]
    #
    # @!attribute [rw] key_type
    #   The type of key pair. Note that ED25519 keys are not supported for
    #   Windows instances.
    #
    #   Default: `rsa`
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the new key pair.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] key_format
    #   The format of the key pair.
    #
    #   Default: `pem`
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateKeyPairRequest AWS API Documentation
    #
    class CreateKeyPairRequest < Struct.new(
      :key_name,
      :key_type,
      :tag_specifications,
      :key_format,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier you provide to ensure the
    #   idempotency of the request. If a client token isn't specified, a
    #   randomly generated token is used in the request to ensure
    #   idempotency.
    #
    #   For more information, see [Ensuring idempotency][1].
    #
    #   Constraint: Maximum 128 ASCII characters.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   A name for the launch template.
    #   @return [String]
    #
    # @!attribute [rw] version_description
    #   A description for the first version of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_data
    #   The information for the launch template.
    #   @return [Types::RequestLaunchTemplateData]
    #
    # @!attribute [rw] operator
    #   Reserved for internal use.
    #   @return [Types::OperatorRequest]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the launch template on creation. To tag the
    #   launch template, the resource type must be `launch-template`.
    #
    #   To specify the tags for the resources that are created when an
    #   instance is launched, you must use the `TagSpecifications` parameter
    #   in the [launch template data][1] structure.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplateRequest AWS API Documentation
    #
    class CreateLaunchTemplateRequest < Struct.new(
      :dry_run,
      :client_token,
      :launch_template_name,
      :version_description,
      :launch_template_data,
      :operator,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] launch_template
    #   Information about the launch template.
    #   @return [Types::LaunchTemplate]
    #
    # @!attribute [rw] warning
    #   If the launch template contains parameters or parameter combinations
    #   that are not valid, an error code and an error message are returned
    #   for each issue that's found.
    #   @return [Types::ValidationWarning]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplateResult AWS API Documentation
    #
    class CreateLaunchTemplateResult < Struct.new(
      :launch_template,
      :warning)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier you provide to ensure the
    #   idempotency of the request. If a client token isn't specified, a
    #   randomly generated token is used in the request to ensure
    #   idempotency.
    #
    #   For more information, see [Ensuring idempotency][1].
    #
    #   Constraint: Maximum 128 ASCII characters.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @!attribute [rw] source_version
    #   The version of the launch template on which to base the new version.
    #   Snapshots applied to the block device mapping are ignored when
    #   creating a new version unless they are explicitly included.
    #
    #   If you specify this parameter, the new version inherits the launch
    #   parameters from the source version. If you specify additional launch
    #   parameters for the new version, they overwrite any corresponding
    #   launch parameters inherited from the source version.
    #
    #   If you omit this parameter, the new version contains only the launch
    #   parameters that you specify for the new version.
    #   @return [String]
    #
    # @!attribute [rw] version_description
    #   A description for the version of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_data
    #   The information for the launch template.
    #   @return [Types::RequestLaunchTemplateData]
    #
    # @!attribute [rw] resolve_alias
    #   If `true`, and if a Systems Manager parameter is specified for
    #   `ImageId`, the AMI ID is displayed in the response for `imageID`.
    #   For more information, see [Use a Systems Manager parameter instead
    #   of an AMI ID][1] in the *Amazon EC2 User Guide*.
    #
    #   Default: `false`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplateVersionRequest AWS API Documentation
    #
    class CreateLaunchTemplateVersionRequest < Struct.new(
      :dry_run,
      :client_token,
      :launch_template_id,
      :launch_template_name,
      :source_version,
      :version_description,
      :launch_template_data,
      :resolve_alias)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] launch_template_version
    #   Information about the launch template version.
    #   @return [Types::LaunchTemplateVersion]
    #
    # @!attribute [rw] warning
    #   If the new version of the launch template contains parameters or
    #   parameter combinations that are not valid, an error code and an
    #   error message are returned for each issue that's found.
    #   @return [Types::ValidationWarning]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLaunchTemplateVersionResult AWS API Documentation
    #
    class CreateLaunchTemplateVersionResult < Struct.new(
      :launch_template_version,
      :warning)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] destination_cidr_block
    #   The CIDR range used for destination matches. Routing decisions are
    #   based on the most specific match.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_virtual_interface_group_id
    #   The ID of the virtual interface group.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] destination_prefix_list_id
    #   The ID of the prefix list. Use a prefix list in place of
    #   `DestinationCidrBlock`. You cannot use `DestinationPrefixListId` and
    #   `DestinationCidrBlock` in the same request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayRouteRequest AWS API Documentation
    #
    class CreateLocalGatewayRouteRequest < Struct.new(
      :destination_cidr_block,
      :local_gateway_route_table_id,
      :local_gateway_virtual_interface_group_id,
      :dry_run,
      :network_interface_id,
      :destination_prefix_list_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route
    #   Information about the route.
    #   @return [Types::LocalGatewayRoute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayRouteResult AWS API Documentation
    #
    class CreateLocalGatewayRouteResult < Struct.new(
      :route)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] mode
    #   The mode of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags assigned to the local gateway route table.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayRouteTableRequest AWS API Documentation
    #
    class CreateLocalGatewayRouteTableRequest < Struct.new(
      :local_gateway_id,
      :mode,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table
    #   Information about the local gateway route table.
    #   @return [Types::LocalGatewayRouteTable]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayRouteTableResult AWS API Documentation
    #
    class CreateLocalGatewayRouteTableResult < Struct.new(
      :local_gateway_route_table)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_virtual_interface_group_id
    #   The ID of the local gateway route table virtual interface group
    #   association.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags assigned to the local gateway route table virtual interface
    #   group association.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationRequest AWS API Documentation
    #
    class CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationRequest < Struct.new(
      :local_gateway_route_table_id,
      :local_gateway_virtual_interface_group_id,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_virtual_interface_group_association
    #   Information about the local gateway route table virtual interface
    #   group association.
    #   @return [Types::LocalGatewayRouteTableVirtualInterfaceGroupAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResult AWS API Documentation
    #
    class CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResult < Struct.new(
      :local_gateway_route_table_virtual_interface_group_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the local gateway route table VPC association.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayRouteTableVpcAssociationRequest AWS API Documentation
    #
    class CreateLocalGatewayRouteTableVpcAssociationRequest < Struct.new(
      :local_gateway_route_table_id,
      :vpc_id,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_vpc_association
    #   Information about the association.
    #   @return [Types::LocalGatewayRouteTableVpcAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayRouteTableVpcAssociationResult AWS API Documentation
    #
    class CreateLocalGatewayRouteTableVpcAssociationResult < Struct.new(
      :local_gateway_route_table_vpc_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] local_bgp_asn
    #   The Autonomous System Number(ASN) for the local Border Gateway
    #   Protocol (BGP).
    #   @return [Integer]
    #
    # @!attribute [rw] local_bgp_asn_extended
    #   The extended 32-bit ASN for the local BGP configuration.
    #   @return [Integer]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the local gateway virtual interface group when
    #   the resource is being created.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayVirtualInterfaceGroupRequest AWS API Documentation
    #
    class CreateLocalGatewayVirtualInterfaceGroupRequest < Struct.new(
      :local_gateway_id,
      :local_bgp_asn,
      :local_bgp_asn_extended,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface_group
    #   Information about the created local gateway virtual interface group.
    #   @return [Types::LocalGatewayVirtualInterfaceGroup]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayVirtualInterfaceGroupResult AWS API Documentation
    #
    class CreateLocalGatewayVirtualInterfaceGroupResult < Struct.new(
      :local_gateway_virtual_interface_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface_group_id
    #   The ID of the local gateway virtual interface group.
    #   @return [String]
    #
    # @!attribute [rw] outpost_lag_id
    #   References the Link Aggregation Group (LAG) that connects the
    #   Outpost to on-premises network devices.
    #   @return [String]
    #
    # @!attribute [rw] vlan
    #   The virtual local area network (VLAN) used for the local gateway
    #   virtual interface.
    #   @return [Integer]
    #
    # @!attribute [rw] local_address
    #   The IP address assigned to the local gateway virtual interface on
    #   the Outpost side. Only IPv4 is supported.
    #   @return [String]
    #
    # @!attribute [rw] peer_address
    #   The peer IP address for the local gateway virtual interface. Only
    #   IPv4 is supported.
    #   @return [String]
    #
    # @!attribute [rw] peer_bgp_asn
    #   The Autonomous System Number (ASN) of the Border Gateway Protocol
    #   (BGP) peer.
    #   @return [Integer]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to a resource when the local gateway virtual
    #   interface is being created.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] peer_bgp_asn_extended
    #   The extended 32-bit ASN of the BGP peer for use with larger ASN
    #   values.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayVirtualInterfaceRequest AWS API Documentation
    #
    class CreateLocalGatewayVirtualInterfaceRequest < Struct.new(
      :local_gateway_virtual_interface_group_id,
      :outpost_lag_id,
      :vlan,
      :local_address,
      :peer_address,
      :peer_bgp_asn,
      :tag_specifications,
      :dry_run,
      :peer_bgp_asn_extended)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface
    #   Information about the local gateway virtual interface.
    #   @return [Types::LocalGatewayVirtualInterface]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateLocalGatewayVirtualInterfaceResult AWS API Documentation
    #
    class CreateLocalGatewayVirtualInterfaceResult < Struct.new(
      :local_gateway_virtual_interface)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the Amazon EC2 Mac instance.
    #   @return [String]
    #
    # @!attribute [rw] mac_credentials
    #   **\[Apple silicon Mac instances only\]** Specifies the following
    #   credentials:
    #
    #   * **Internal disk administrative user**
    #
    #     * **Username** - Only the default administrative user
    #       (`aws-managed-user`) is supported and it is used by default. You
    #       can't specify a different administrative user.
    #
    #     * **Password** - If you did not change the default password for
    #       `aws-managed-user`, specify the default password, which is
    #       *blank*. Otherwise, specify your password.
    #   * **Amazon EBS root volume administrative user**
    #
    #     * **Username** - If you did not change the default administrative
    #       user, specify `ec2-user`. Otherwise, specify the username for
    #       your administrative user.
    #
    #     * **Password** - Specify the password for the administrative user.
    #
    #   The credentials must be specified in the following JSON format:
    #
    #   `{ "internalDiskPassword":"internal-disk-admin_password",
    #   "rootVolumeUsername":"root-volume-admin_username",
    #   "rootVolumepassword":"root-volume-admin_password" }`
    #   @return [String]
    #
    # @!attribute [rw] mac_system_integrity_protection_configuration
    #   Specifies the overrides to selectively enable or disable individual
    #   SIP settings. The individual settings you specify here override the
    #   overall SIP status you specify for
    #   **MacSystemIntegrityProtectionStatus**.
    #   @return [Types::MacSystemIntegrityProtectionConfigurationRequest]
    #
    # @!attribute [rw] mac_system_integrity_protection_status
    #   Specifies the overall SIP status for the instance. To enable all SIP
    #   settings, specify `enabled`. To disable all SIP settings, specify
    #   `disabled`.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   Specifies tags to apply to the SIP modification task.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateMacSystemIntegrityProtectionModificationTaskRequest AWS API Documentation
    #
    class CreateMacSystemIntegrityProtectionModificationTaskRequest < Struct.new(
      :client_token,
      :dry_run,
      :instance_id,
      :mac_credentials,
      :mac_system_integrity_protection_configuration,
      :mac_system_integrity_protection_status,
      :tag_specifications)
      SENSITIVE = [:mac_credentials]
      include Aws::Structure
    end

    # @!attribute [rw] mac_modification_task
    #   Information about the SIP modification task.
    #   @return [Types::MacModificationTask]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateMacSystemIntegrityProtectionModificationTaskResult AWS API Documentation
    #
    class CreateMacSystemIntegrityProtectionModificationTaskResult < Struct.new(
      :mac_modification_task)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] prefix_list_name
    #   A name for the prefix list.
    #
    #   Constraints: Up to 255 characters in length. The name cannot start
    #   with `com.amazonaws`.
    #   @return [String]
    #
    # @!attribute [rw] entries
    #   One or more entries for the prefix list.
    #   @return [Array<Types::AddPrefixListEntry>]
    #
    # @!attribute [rw] max_entries
    #   The maximum number of entries for the prefix list.
    #   @return [Integer]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the prefix list during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] address_family
    #   The IP address type.
    #
    #   Valid Values: `IPv4` \| `IPv6`
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   Constraints: Up to 255 UTF-8 characters in length.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateManagedPrefixListRequest AWS API Documentation
    #
    class CreateManagedPrefixListRequest < Struct.new(
      :dry_run,
      :prefix_list_name,
      :entries,
      :max_entries,
      :tag_specifications,
      :address_family,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] prefix_list
    #   Information about the prefix list.
    #   @return [Types::ManagedPrefixList]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateManagedPrefixListResult AWS API Documentation
    #
    class CreateManagedPrefixListResult < Struct.new(
      :prefix_list)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_id
    #   \[Public NAT gateways only\] The allocation ID of an Elastic IP
    #   address to associate with the NAT gateway. You cannot specify an
    #   Elastic IP address with a private NAT gateway. If the Elastic IP
    #   address is associated with another resource, you must first
    #   disassociate it.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   Constraint: Maximum 64 ASCII characters.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which to create the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the NAT gateway.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] connectivity_type
    #   Indicates whether the NAT gateway supports public or private
    #   connectivity. The default is public connectivity.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The private IPv4 address to assign to the NAT gateway. If you don't
    #   provide an address, a private IPv4 address will be automatically
    #   assigned.
    #   @return [String]
    #
    # @!attribute [rw] secondary_allocation_ids
    #   Secondary EIP allocation IDs. For more information, see [Create a
    #   NAT gateway][1] in the *Amazon VPC User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-working-with.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] secondary_private_ip_addresses
    #   Secondary private IPv4 addresses. For more information about
    #   secondary addresses, see [Create a NAT gateway][1] in the *Amazon
    #   VPC User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-working-with.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] secondary_private_ip_address_count
    #   \[Private NAT gateway only\] The number of secondary private IPv4
    #   addresses you want to assign to the NAT gateway. For more
    #   information about secondary addresses, see [Create a NAT gateway][1]
    #   in the *Amazon VPC User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-working-with.html
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGatewayRequest AWS API Documentation
    #
    class CreateNatGatewayRequest < Struct.new(
      :allocation_id,
      :client_token,
      :dry_run,
      :subnet_id,
      :tag_specifications,
      :connectivity_type,
      :private_ip_address,
      :secondary_allocation_ids,
      :secondary_private_ip_addresses,
      :secondary_private_ip_address_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier to ensure the idempotency of the
    #   request. Only returned if a client token was provided in the
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway
    #   Information about the NAT gateway.
    #   @return [Types::NatGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNatGatewayResult AWS API Documentation
    #
    class CreateNatGatewayResult < Struct.new(
      :client_token,
      :nat_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_acl_id
    #   The ID of the network ACL.
    #   @return [String]
    #
    # @!attribute [rw] rule_number
    #   The rule number for the entry (for example, 100). ACL entries are
    #   processed in ascending order by rule number.
    #
    #   Constraints: Positive integer from 1 to 32766. The range 32767 to
    #   65535 is reserved for internal use.
    #   @return [Integer]
    #
    # @!attribute [rw] protocol
    #   The protocol number. A value of "-1" means all protocols. If you
    #   specify "-1" or a protocol number other than "6" (TCP), "17"
    #   (UDP), or "1" (ICMP), traffic on all ports is allowed, regardless
    #   of any ports or ICMP types or codes that you specify. If you specify
    #   protocol "58" (ICMPv6) and specify an IPv4 CIDR block, traffic for
    #   all ICMP types and codes allowed, regardless of any that you
    #   specify. If you specify protocol "58" (ICMPv6) and specify an IPv6
    #   CIDR block, you must specify an ICMP type and code.
    #   @return [String]
    #
    # @!attribute [rw] rule_action
    #   Indicates whether to allow or deny the traffic that matches the
    #   rule.
    #   @return [String]
    #
    # @!attribute [rw] egress
    #   Indicates whether this is an egress rule (rule is applied to traffic
    #   leaving the subnet).
    #   @return [Boolean]
    #
    # @!attribute [rw] cidr_block
    #   The IPv4 network range to allow or deny, in CIDR notation (for
    #   example `172.16.0.0/24`). We modify the specified CIDR block to its
    #   canonical form; for example, if you specify `100.68.0.18/18`, we
    #   modify it to `100.68.0.0/18`.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   The IPv6 network range to allow or deny, in CIDR notation (for
    #   example `2001:db8:1234:1a00::/64`).
    #   @return [String]
    #
    # @!attribute [rw] icmp_type_code
    #   ICMP protocol: The ICMP or ICMPv6 type and code. Required if
    #   specifying protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6
    #   CIDR block.
    #   @return [Types::IcmpTypeCode]
    #
    # @!attribute [rw] port_range
    #   TCP or UDP protocols: The range of ports the rule applies to.
    #   Required if specifying protocol 6 (TCP) or 17 (UDP).
    #   @return [Types::PortRange]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclEntryRequest AWS API Documentation
    #
    class CreateNetworkAclEntryRequest < Struct.new(
      :dry_run,
      :network_acl_id,
      :rule_number,
      :protocol,
      :rule_action,
      :egress,
      :cidr_block,
      :ipv_6_cidr_block,
      :icmp_type_code,
      :port_range)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tag_specifications
    #   The tags to assign to the network ACL.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclRequest AWS API Documentation
    #
    class CreateNetworkAclRequest < Struct.new(
      :tag_specifications,
      :client_token,
      :dry_run,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_acl
    #   Information about the network ACL.
    #   @return [Types::NetworkAcl]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier to ensure the idempotency of the
    #   request. Only returned if a client token was provided in the
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkAclResult AWS API Documentation
    #
    class CreateNetworkAclResult < Struct.new(
      :network_acl,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] match_paths
    #   The paths to match.
    #   @return [Array<Types::AccessScopePathRequest>]
    #
    # @!attribute [rw] exclude_paths
    #   The paths to exclude.
    #   @return [Array<Types::AccessScopePathRequest>]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInsightsAccessScopeRequest AWS API Documentation
    #
    class CreateNetworkInsightsAccessScopeRequest < Struct.new(
      :match_paths,
      :exclude_paths,
      :client_token,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope
    #   The Network Access Scope.
    #   @return [Types::NetworkInsightsAccessScope]
    #
    # @!attribute [rw] network_insights_access_scope_content
    #   The Network Access Scope content.
    #   @return [Types::NetworkInsightsAccessScopeContent]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInsightsAccessScopeResult AWS API Documentation
    #
    class CreateNetworkInsightsAccessScopeResult < Struct.new(
      :network_insights_access_scope,
      :network_insights_access_scope_content)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] source_ip
    #   The IP address of the source.
    #   @return [String]
    #
    # @!attribute [rw] destination_ip
    #   The IP address of the destination.
    #   @return [String]
    #
    # @!attribute [rw] source
    #   The ID or ARN of the source. If the resource is in another account,
    #   you must specify an ARN.
    #   @return [String]
    #
    # @!attribute [rw] destination
    #   The ID or ARN of the destination. If the resource is in another
    #   account, you must specify an ARN.
    #   @return [String]
    #
    # @!attribute [rw] protocol
    #   The protocol.
    #   @return [String]
    #
    # @!attribute [rw] destination_port
    #   The destination port.
    #   @return [Integer]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to add to the path.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] filter_at_source
    #   Scopes the analysis to network paths that match specific filters at
    #   the source. If you specify this parameter, you can't specify the
    #   parameters for the source IP address or the destination port.
    #   @return [Types::PathRequestFilter]
    #
    # @!attribute [rw] filter_at_destination
    #   Scopes the analysis to network paths that match specific filters at
    #   the destination. If you specify this parameter, you can't specify
    #   the parameter for the destination IP address.
    #   @return [Types::PathRequestFilter]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInsightsPathRequest AWS API Documentation
    #
    class CreateNetworkInsightsPathRequest < Struct.new(
      :source_ip,
      :destination_ip,
      :source,
      :destination,
      :protocol,
      :destination_port,
      :tag_specifications,
      :dry_run,
      :client_token,
      :filter_at_source,
      :filter_at_destination)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_path
    #   Information about the path.
    #   @return [Types::NetworkInsightsPath]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInsightsPathResult AWS API Documentation
    #
    class CreateNetworkInsightsPathResult < Struct.new(
      :network_insights_path)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CreateNetworkInterfacePermission.
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] aws_account_id
    #   The Amazon Web Services account ID.
    #   @return [String]
    #
    # @!attribute [rw] aws_service
    #   The Amazon Web Services service. Currently not supported.
    #   @return [String]
    #
    # @!attribute [rw] permission
    #   The type of permission to grant.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfacePermissionRequest AWS API Documentation
    #
    class CreateNetworkInterfacePermissionRequest < Struct.new(
      :network_interface_id,
      :aws_account_id,
      :aws_service,
      :permission,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CreateNetworkInterfacePermission.
    #
    # @!attribute [rw] interface_permission
    #   Information about the permission for the network interface.
    #   @return [Types::NetworkInterfacePermission]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfacePermissionResult AWS API Documentation
    #
    class CreateNetworkInterfacePermissionResult < Struct.new(
      :interface_permission)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipv_4_prefixes
    #   The IPv4 prefixes assigned to the network interface.
    #
    #   You can't specify IPv4 prefixes if you've specified one of the
    #   following: a count of IPv4 prefixes, specific private IPv4
    #   addresses, or a count of private IPv4 addresses.
    #   @return [Array<Types::Ipv4PrefixSpecificationRequest>]
    #
    # @!attribute [rw] ipv_4_prefix_count
    #   The number of IPv4 prefixes that Amazon Web Services automatically
    #   assigns to the network interface.
    #
    #   You can't specify a count of IPv4 prefixes if you've specified one
    #   of the following: specific IPv4 prefixes, specific private IPv4
    #   addresses, or a count of private IPv4 addresses.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_prefixes
    #   The IPv6 prefixes assigned to the network interface.
    #
    #   You can't specify IPv6 prefixes if you've specified one of the
    #   following: a count of IPv6 prefixes, specific IPv6 addresses, or a
    #   count of IPv6 addresses.
    #   @return [Array<Types::Ipv6PrefixSpecificationRequest>]
    #
    # @!attribute [rw] ipv_6_prefix_count
    #   The number of IPv6 prefixes that Amazon Web Services automatically
    #   assigns to the network interface.
    #
    #   You can't specify a count of IPv6 prefixes if you've specified one
    #   of the following: specific IPv6 prefixes, specific IPv6 addresses,
    #   or a count of IPv6 addresses.
    #   @return [Integer]
    #
    # @!attribute [rw] interface_type
    #   The type of network interface. The default is `interface`.
    #
    #   If you specify `efa-only`, do not assign any IP addresses to the
    #   network interface. EFA-only network interfaces do not support IP
    #   addresses.
    #
    #   The only supported values are `interface`, `efa`, `efa-only`, and
    #   `trunk`.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the new network interface.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] enable_primary_ipv_6
    #   If you’re creating a network interface in a dual-stack or IPv6-only
    #   subnet, you have the option to assign a primary IPv6 IP 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 the instance that this ENI will be attached to relies on its IPv6
    #   address not changing. 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.
    #   @return [Boolean]
    #
    # @!attribute [rw] connection_tracking_specification
    #   A connection tracking specification for the network interface.
    #   @return [Types::ConnectionTrackingSpecificationRequest]
    #
    # @!attribute [rw] operator
    #   Reserved for internal use.
    #   @return [Types::OperatorRequest]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet to associate with the network interface.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the network interface.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The primary private IPv4 address of the network interface. If you
    #   don't specify an IPv4 address, Amazon EC2 selects one for you from
    #   the subnet's IPv4 CIDR range. If you specify an IP address, you
    #   cannot indicate any IP addresses specified in `privateIpAddresses`
    #   as primary (only one IP address can be designated as primary).
    #   @return [String]
    #
    # @!attribute [rw] groups
    #   The IDs of the security groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] private_ip_addresses
    #   The private IPv4 addresses.
    #
    #   You can't specify private IPv4 addresses if you've specified one
    #   of the following: a count of private IPv4 addresses, specific IPv4
    #   prefixes, or a count of IPv4 prefixes.
    #   @return [Array<Types::PrivateIpAddressSpecification>]
    #
    # @!attribute [rw] secondary_private_ip_address_count
    #   The number of secondary private IPv4 addresses to assign to a
    #   network interface. When you specify a number of secondary IPv4
    #   addresses, Amazon EC2 selects these IP addresses within the
    #   subnet's IPv4 CIDR range. You can't specify this option and
    #   specify more than one private IP address using `privateIpAddresses`.
    #
    #   You can't specify a count of private IPv4 addresses if you've
    #   specified one of the following: specific private IPv4 addresses,
    #   specific IPv4 prefixes, or a count of IPv4 prefixes.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_addresses
    #   The IPv6 addresses from the IPv6 CIDR block range of your subnet.
    #
    #   You can't specify IPv6 addresses using this parameter if you've
    #   specified one of the following: a count of IPv6 addresses, specific
    #   IPv6 prefixes, or a count of IPv6 prefixes.
    #   @return [Array<Types::InstanceIpv6Address>]
    #
    # @!attribute [rw] ipv_6_address_count
    #   The number of IPv6 addresses to assign to a network interface.
    #   Amazon EC2 automatically selects the IPv6 addresses from the subnet
    #   range.
    #
    #   You can't specify a count of IPv6 addresses using this parameter if
    #   you've specified one of the following: specific IPv6 addresses,
    #   specific IPv6 prefixes, or a count of IPv6 prefixes.
    #
    #   If your subnet has the `AssignIpv6AddressOnCreation` attribute set,
    #   you can override that setting by specifying 0 as the IPv6 address
    #   count.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfaceRequest AWS API Documentation
    #
    class CreateNetworkInterfaceRequest < Struct.new(
      :ipv_4_prefixes,
      :ipv_4_prefix_count,
      :ipv_6_prefixes,
      :ipv_6_prefix_count,
      :interface_type,
      :tag_specifications,
      :client_token,
      :enable_primary_ipv_6,
      :connection_tracking_specification,
      :operator,
      :subnet_id,
      :description,
      :private_ip_address,
      :groups,
      :private_ip_addresses,
      :secondary_private_ip_address_count,
      :ipv_6_addresses,
      :ipv_6_address_count,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_interface
    #   Information about the network interface.
    #   @return [Types::NetworkInterface]
    #
    # @!attribute [rw] client_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateNetworkInterfaceResult AWS API Documentation
    #
    class CreateNetworkInterfaceResult < Struct.new(
      :network_interface,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] partition_count
    #   The number of partitions. Valid only when **Strategy** is set to
    #   `partition`.
    #   @return [Integer]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the new placement group.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] spread_level
    #   Determines how placement groups spread instances.
    #
    #   * Host – You can use `host` only with Outpost placement groups.
    #
    #   * Rack – No usage restrictions.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_name
    #   A name for the placement group. Must be unique within the scope of
    #   your account for the Region.
    #
    #   Constraints: Up to 255 ASCII characters
    #   @return [String]
    #
    # @!attribute [rw] strategy
    #   The placement strategy.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroupRequest AWS API Documentation
    #
    class CreatePlacementGroupRequest < Struct.new(
      :partition_count,
      :tag_specifications,
      :spread_level,
      :dry_run,
      :group_name,
      :strategy)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] placement_group
    #   Information about the placement group.
    #   @return [Types::PlacementGroup]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePlacementGroupResult AWS API Documentation
    #
    class CreatePlacementGroupResult < Struct.new(
      :placement_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The key/value combination of a tag assigned to the resource. Use the
    #   tag key in the filter name and the tag value as the filter value.
    #   For example, to find all resources that have a tag with the key
    #   `Owner` and the value `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] network_border_group
    #   The Availability Zone (AZ) or Local Zone (LZ) network border group
    #   that the resource that the IP address is assigned to is in. Defaults
    #   to an AZ network border group. For more information on available
    #   Local Zones, see [Local Zone availability][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#byoip-zone-avail
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePublicIpv4PoolRequest AWS API Documentation
    #
    class CreatePublicIpv4PoolRequest < Struct.new(
      :dry_run,
      :tag_specifications,
      :network_border_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] pool_id
    #   The ID of the public IPv4 pool.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreatePublicIpv4PoolResult AWS API Documentation
    #
    class CreatePublicIpv4PoolResult < Struct.new(
      :pool_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance for which to replace the root volume.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot from which to restore the replacement root
    #   volume. The specified snapshot must be a snapshot that you
    #   previously created from the original root volume.
    #
    #   If you want to restore the replacement root volume to the initial
    #   launch state, or if you want to restore the replacement root volume
    #   from an AMI, omit this parameter.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   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. For more information, see [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the root volume replacement task.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI to use to restore the root volume. The specified
    #   AMI must have the same product code, billing information,
    #   architecture type, and virtualization type as that of the instance.
    #
    #   If you want to restore the replacement volume from a specific
    #   snapshot, or if you want to restore it to its launch state, omit
    #   this parameter.
    #   @return [String]
    #
    # @!attribute [rw] delete_replaced_root_volume
    #   Indicates whether to automatically delete the original root volume
    #   after the root volume replacement task completes. To delete the
    #   original root volume, specify `true`. If you choose to keep the
    #   original root volume after the replacement task completes, you must
    #   manually delete it when you no longer need it.
    #   @return [Boolean]
    #
    # @!attribute [rw] volume_initialization_rate
    #   Specifies the Amazon EBS Provisioned Rate for Volume Initialization
    #   (volume initialization rate), in MiB/s, at which to download the
    #   snapshot blocks from Amazon S3 to the replacement root volume. This
    #   is also known as *volume initialization*. Specifying a volume
    #   initialization rate ensures that the volume is initialized at a
    #   predictable and consistent rate after creation.
    #
    #   Omit this parameter if:
    #
    #   * You want to create the volume using fast snapshot restore. You
    #     must specify a snapshot that is enabled for fast snapshot restore.
    #     In this case, the volume is fully initialized at creation.
    #
    #     <note markdown="1"> If you specify a snapshot that is enabled for fast snapshot
    #     restore and a volume initialization rate, the volume will be
    #     initialized at the specified rate instead of fast snapshot
    #     restore.
    #
    #      </note>
    #
    #   * You want to create a volume that is initialized at the default
    #     rate.
    #
    #   For more information, see [ Initialize Amazon EBS volumes][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #   Valid range: 100 - 300 MiB/s
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReplaceRootVolumeTaskRequest AWS API Documentation
    #
    class CreateReplaceRootVolumeTaskRequest < Struct.new(
      :instance_id,
      :snapshot_id,
      :client_token,
      :dry_run,
      :tag_specifications,
      :image_id,
      :delete_replaced_root_volume,
      :volume_initialization_rate)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] replace_root_volume_task
    #   Information about the root volume replacement task.
    #   @return [Types::ReplaceRootVolumeTask]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReplaceRootVolumeTaskResult AWS API Documentation
    #
    class CreateReplaceRootVolumeTaskResult < Struct.new(
      :replace_root_volume_task)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CreateReservedInstancesListing.
    #
    # @!attribute [rw] reserved_instances_id
    #   The ID of the active Standard Reserved Instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances that are a part of a Reserved Instance
    #   account to be listed in the Reserved Instance Marketplace. This
    #   number should be less than or equal to the instance count associated
    #   with the Reserved Instance ID specified in this call.
    #   @return [Integer]
    #
    # @!attribute [rw] price_schedules
    #   A list specifying the price of the Standard Reserved Instance for
    #   each month remaining in the Reserved Instance term.
    #   @return [Array<Types::PriceScheduleSpecification>]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier you provide to ensure idempotency
    #   of your listings. This helps avoid duplicate listings. For more
    #   information, see [Ensuring Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListingRequest AWS API Documentation
    #
    class CreateReservedInstancesListingRequest < Struct.new(
      :reserved_instances_id,
      :instance_count,
      :price_schedules,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CreateReservedInstancesListing.
    #
    # @!attribute [rw] reserved_instances_listings
    #   Information about the Standard Reserved Instance listing.
    #   @return [Array<Types::ReservedInstancesListing>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateReservedInstancesListingResult AWS API Documentation
    #
    class CreateReservedInstancesListingResult < Struct.new(
      :reserved_instances_listings)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket that contains the stored AMI
    #   object.
    #   @return [String]
    #
    # @!attribute [rw] object_key
    #   The name of the stored AMI object in the bucket.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name for the restored AMI. The name must be unique for AMIs in
    #   the Region for this account. If you do not provide a name, the new
    #   AMI gets the same name as the original AMI.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the AMI and snapshots on restoration. You can
    #   tag the AMI, the snapshots, or both.
    #
    #   * To tag the AMI, the value for `ResourceType` must be `image`.
    #
    #   * To tag the snapshots, the value for `ResourceType` must be
    #     `snapshot`. The same tag is applied to all of the snapshots that
    #     are created.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRestoreImageTaskRequest AWS API Documentation
    #
    class CreateRestoreImageTaskRequest < Struct.new(
      :bucket,
      :object_key,
      :name,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The AMI ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRestoreImageTaskResult AWS API Documentation
    #
    class CreateRestoreImageTaskResult < Struct.new(
      :image_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] destination_prefix_list_id
    #   The ID of a prefix list used for the destination match.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_id
    #   The ID of a VPC endpoint. Supported for Gateway Load Balancer
    #   endpoints only.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of a transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] carrier_gateway_id
    #   The ID of the carrier gateway.
    #
    #   You can only use this option when the VPC contains a subnet which is
    #   associated with a Wavelength Zone.
    #   @return [String]
    #
    # @!attribute [rw] core_network_arn
    #   The Amazon Resource Name (ARN) of the core network.
    #   @return [String]
    #
    # @!attribute [rw] odb_network_arn
    #   The Amazon Resource Name (ARN) of the ODB network.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table for the route.
    #   @return [String]
    #
    # @!attribute [rw] destination_cidr_block
    #   The IPv4 CIDR address block used for the destination match. Routing
    #   decisions are based on the most specific match. We modify the
    #   specified CIDR block to its canonical form; for example, if you
    #   specify `100.68.0.18/18`, we modify it to `100.68.0.0/18`.
    #   @return [String]
    #
    # @!attribute [rw] gateway_id
    #   The ID of an internet gateway or virtual private gateway attached to
    #   your VPC.
    #   @return [String]
    #
    # @!attribute [rw] destination_ipv_6_cidr_block
    #   The IPv6 CIDR block used for the destination match. Routing
    #   decisions are based on the most specific match.
    #   @return [String]
    #
    # @!attribute [rw] egress_only_internet_gateway_id
    #   \[IPv6 traffic only\] The ID of an egress-only internet gateway.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of a NAT instance in your VPC. The operation fails if you
    #   specify an instance ID unless exactly one network interface is
    #   attached.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of a network interface.
    #   @return [String]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of a VPC peering connection.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway_id
    #   \[IPv4 traffic only\] The ID of a NAT gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteRequest AWS API Documentation
    #
    class CreateRouteRequest < Struct.new(
      :destination_prefix_list_id,
      :vpc_endpoint_id,
      :transit_gateway_id,
      :local_gateway_id,
      :carrier_gateway_id,
      :core_network_arn,
      :odb_network_arn,
      :dry_run,
      :route_table_id,
      :destination_cidr_block,
      :gateway_id,
      :destination_ipv_6_cidr_block,
      :egress_only_internet_gateway_id,
      :instance_id,
      :network_interface_id,
      :vpc_peering_connection_id,
      :nat_gateway_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteResult AWS API Documentation
    #
    class CreateRouteResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The ID of the route server for which to create an endpoint.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which to create the route server endpoint.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier to ensure idempotency of the
    #   request.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the route server endpoint during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteServerEndpointRequest AWS API Documentation
    #
    class CreateRouteServerEndpointRequest < Struct.new(
      :route_server_id,
      :subnet_id,
      :client_token,
      :dry_run,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_endpoint
    #   Information about the created route server endpoint.
    #   @return [Types::RouteServerEndpoint]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteServerEndpointResult AWS API Documentation
    #
    class CreateRouteServerEndpointResult < Struct.new(
      :route_server_endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_endpoint_id
    #   The ID of the route server endpoint for which to create a peer.
    #   @return [String]
    #
    # @!attribute [rw] peer_address
    #   The IPv4 address of the peer device.
    #   @return [String]
    #
    # @!attribute [rw] bgp_options
    #   The BGP options for the peer, including ASN (Autonomous System
    #   Number) and BFD (Bidrectional Forwarding Detection) settings.
    #   @return [Types::RouteServerBgpOptionsRequest]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the route server peer during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteServerPeerRequest AWS API Documentation
    #
    class CreateRouteServerPeerRequest < Struct.new(
      :route_server_endpoint_id,
      :peer_address,
      :bgp_options,
      :dry_run,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_peer
    #   Information about the created route server peer.
    #   @return [Types::RouteServerPeer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteServerPeerResult AWS API Documentation
    #
    class CreateRouteServerPeerResult < Struct.new(
      :route_server_peer)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] amazon_side_asn
    #   The private Autonomous System Number (ASN) for the Amazon side of
    #   the BGP session. Valid values are from 1 to 4294967295. We recommend
    #   using a private ASN in the 64512–65534 (16-bit ASN) or
    #   4200000000–4294967294 (32-bit ASN) range.
    #   @return [Integer]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier to ensure idempotency of the
    #   request.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] persist_routes
    #   Indicates whether routes should be persisted after all BGP sessions
    #   are terminated.
    #   @return [String]
    #
    # @!attribute [rw] persist_routes_duration
    #   The number of minutes a route server will wait after BGP is
    #   re-established to unpersist the routes in the FIB and RIB. Value
    #   must be in the range of 1-5. Required if PersistRoutes is `enabled`.
    #
    #   If you set the duration to 1 minute, then when your network
    #   appliance re-establishes BGP with route server, it has 1 minute to
    #   relearn it's adjacent network and advertise those routes to route
    #   server before route server resumes normal functionality. In most
    #   cases, 1 minute is probably sufficient. If, however, you have
    #   concerns that your BGP network may not be capable of fully
    #   re-establishing and re-learning everything in 1 minute, you can
    #   increase the duration up to 5 minutes.
    #   @return [Integer]
    #
    # @!attribute [rw] sns_notifications_enabled
    #   Indicates whether SNS notifications should be enabled for route
    #   server events. Enabling SNS notifications persists BGP status
    #   changes to an SNS topic provisioned by Amazon Web Services.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the route server during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteServerRequest AWS API Documentation
    #
    class CreateRouteServerRequest < Struct.new(
      :amazon_side_asn,
      :client_token,
      :dry_run,
      :persist_routes,
      :persist_routes_duration,
      :sns_notifications_enabled,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server
    #   Information about the created route server.
    #   @return [Types::RouteServer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteServerResult AWS API Documentation
    #
    class CreateRouteServerResult < Struct.new(
      :route_server)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tag_specifications
    #   The tags to assign to the route table.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTableRequest AWS API Documentation
    #
    class CreateRouteTableRequest < Struct.new(
      :tag_specifications,
      :client_token,
      :dry_run,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_table
    #   Information about the route table.
    #   @return [Types::RouteTable]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier to ensure the idempotency of the
    #   request. Only returned if a client token was provided in the
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateRouteTableResult AWS API Documentation
    #
    class CreateRouteTableResult < Struct.new(
      :route_table,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] description
    #   A description for the security group.
    #
    #   Constraints: Up to 255 characters in length
    #
    #   Valid characters: a-z, A-Z, 0-9, spaces, and
    #   .\_-:/()#,@\[\]+=&amp;;\{}!$*
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the security group. Names are case-insensitive and must
    #   be unique within the VPC.
    #
    #   Constraints: Up to 255 characters in length. Can't start with
    #   `sg-`.
    #
    #   Valid characters: a-z, A-Z, 0-9, spaces, and
    #   .\_-:/()#,@\[\]+=&amp;;\{}!$*
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC. Required for a nondefault VPC.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the security group.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroupRequest AWS API Documentation
    #
    class CreateSecurityGroupRequest < Struct.new(
      :description,
      :group_name,
      :vpc_id,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the security group.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] security_group_arn
    #   The security group ARN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSecurityGroupResult AWS API Documentation
    #
    class CreateSecurityGroupResult < Struct.new(
      :group_id,
      :tags,
      :security_group_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] description
    #   A description for the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   <note markdown="1"> Only supported for volumes on Outposts. If the source volume is not
    #   on an Outpost, omit this parameter.
    #
    #    </note>
    #
    #   * To create the snapshot on the same Outpost as the source volume,
    #     specify the ARN of that Outpost. The snapshot must be created on
    #     the same Outpost as the volume.
    #
    #   * To create the snapshot in the parent Region of the Outpost, omit
    #     this parameter.
    #
    #   For more information, see [Create local snapshots from volumes on an
    #   Outpost][1] in the *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#create-snapshot
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the Amazon EBS volume.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the snapshot during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] location
    #   <note markdown="1"> Only supported for volumes in Local Zones. If the source volume is
    #   not in a Local Zone, omit this parameter.
    #
    #    </note>
    #
    #   * To create a local snapshot in the same Local Zone as the source
    #     volume, specify `local`.
    #
    #   * To create a regional snapshot in the parent Region of the Local
    #     Zone, specify `regional` or omit this parameter.
    #
    #   Default value: `regional`
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshotRequest AWS API Documentation
    #
    class CreateSnapshotRequest < Struct.new(
      :description,
      :outpost_arn,
      :volume_id,
      :tag_specifications,
      :location,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] description
    #   A description propagated to every snapshot specified by the
    #   instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_specification
    #   The instance to specify which volumes should be included in the
    #   snapshots.
    #   @return [Types::InstanceSpecification]
    #
    # @!attribute [rw] outpost_arn
    #   <note markdown="1"> Only supported for instances on Outposts. If the source instance is
    #   not on an Outpost, omit this parameter.
    #
    #    </note>
    #
    #   * To create the snapshots on the same Outpost as the source
    #     instance, specify the ARN of that Outpost. The snapshots must be
    #     created on the same Outpost as the instance.
    #
    #   * To create the snapshots in the parent Region of the Outpost, omit
    #     this parameter.
    #
    #   For more information, see [ Create local snapshots from volumes on
    #   an Outpost][1] in the *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#create-snapshot
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   Tags to apply to every snapshot specified by the instance.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] copy_tags_from_source
    #   Copies the tags from the specified volume to corresponding snapshot.
    #   @return [String]
    #
    # @!attribute [rw] location
    #   <note markdown="1"> Only supported for instances in Local Zones. If the source instance
    #   is not in a Local Zone, omit this parameter.
    #
    #    </note>
    #
    #   * To create local snapshots in the same Local Zone as the source
    #     instance, specify `local`.
    #
    #   * To create regional snapshots in the parent Region of the Local
    #     Zone, specify `regional` or omit this parameter.
    #
    #   Default value: `regional`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshotsRequest AWS API Documentation
    #
    class CreateSnapshotsRequest < Struct.new(
      :description,
      :instance_specification,
      :outpost_arn,
      :tag_specifications,
      :dry_run,
      :copy_tags_from_source,
      :location)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshots
    #   List of snapshots.
    #   @return [Array<Types::SnapshotInfo>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSnapshotsResult AWS API Documentation
    #
    class CreateSnapshotsResult < Struct.new(
      :snapshots)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CreateSpotDatafeedSubscription.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket in which to store the Spot Instance
    #   data feed. For more information about bucket names, see [Bucket
    #   naming rules][1] in the *Amazon S3 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   The prefix for the data feed file names.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscriptionRequest AWS API Documentation
    #
    class CreateSpotDatafeedSubscriptionRequest < Struct.new(
      :dry_run,
      :bucket,
      :prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CreateSpotDatafeedSubscription.
    #
    # @!attribute [rw] spot_datafeed_subscription
    #   The Spot Instance data feed subscription.
    #   @return [Types::SpotDatafeedSubscription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSpotDatafeedSubscriptionResult AWS API Documentation
    #
    class CreateSpotDatafeedSubscriptionResult < Struct.new(
      :spot_datafeed_subscription)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket in which the AMI object will be
    #   stored. The bucket must be in the Region in which the request is
    #   being made. The AMI object appears in the bucket only after the
    #   upload task has completed.
    #   @return [String]
    #
    # @!attribute [rw] s3_object_tags
    #   The tags to apply to the AMI object that will be stored in the
    #   Amazon S3 bucket.
    #   @return [Array<Types::S3ObjectTag>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateStoreImageTaskRequest AWS API Documentation
    #
    class CreateStoreImageTaskRequest < Struct.new(
      :image_id,
      :bucket,
      :s3_object_tags,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] object_key
    #   The name of the stored AMI object in the S3 bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateStoreImageTaskResult AWS API Documentation
    #
    class CreateStoreImageTaskResult < Struct.new(
      :object_key)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   The IPv4 or IPV6 CIDR range to reserve.
    #   @return [String]
    #
    # @!attribute [rw] reservation_type
    #   The type of reservation. The reservation type determines how the
    #   reserved IP addresses are assigned to resources.
    #
    #   * `prefix` - Amazon Web Services assigns the reserved IP addresses
    #     to network interfaces.
    #
    #   * `explicit` - You assign the reserved IP addresses to network
    #     interfaces.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description to assign to the subnet CIDR reservation.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the subnet CIDR reservation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnetCidrReservationRequest AWS API Documentation
    #
    class CreateSubnetCidrReservationRequest < Struct.new(
      :subnet_id,
      :cidr,
      :reservation_type,
      :description,
      :dry_run,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] subnet_cidr_reservation
    #   Information about the created subnet CIDR reservation.
    #   @return [Types::SubnetCidrReservation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnetCidrReservationResult AWS API Documentation
    #
    class CreateSubnetCidrReservationResult < Struct.new(
      :subnet_cidr_reservation)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tag_specifications
    #   The tags to assign to the subnet.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone or Local Zone for the subnet.
    #
    #   Default: Amazon Web Services selects one for you. If you create more
    #   than one subnet in your VPC, we do not necessarily select a
    #   different zone for each subnet.
    #
    #   To create a subnet in a Local Zone, set this value to the Local Zone
    #   ID, for example `us-west-2-lax-1a`. For information about the
    #   Regions that support Local Zones, see [Available Local Zones][1].
    #
    #   To create a subnet in an Outpost, set this value to the Availability
    #   Zone for the Outpost and specify the Outpost ARN.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/local-zones/latest/ug/available-local-zones.html
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The AZ ID or the Local Zone ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] cidr_block
    #   The IPv4 network range for the subnet, in CIDR notation. For
    #   example, `10.0.0.0/24`. We modify the specified CIDR block to its
    #   canonical form; for example, if you specify `100.68.0.18/18`, we
    #   modify it to `100.68.0.0/18`.
    #
    #   This parameter is not supported for an IPv6 only subnet.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   The IPv6 network range for the subnet, in CIDR notation. This
    #   parameter is required for an IPv6 only subnet.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost. If you specify an
    #   Outpost ARN, you must also specify the Availability Zone of the
    #   Outpost subnet.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_native
    #   Indicates whether to create an IPv6 only subnet.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipv_4_ipam_pool_id
    #   An IPv4 IPAM pool ID for the subnet.
    #   @return [String]
    #
    # @!attribute [rw] ipv_4_netmask_length
    #   An IPv4 netmask length for the subnet.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_ipam_pool_id
    #   An IPv6 IPAM pool ID for the subnet.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_netmask_length
    #   An IPv6 netmask length for the subnet.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnetRequest AWS API Documentation
    #
    class CreateSubnetRequest < Struct.new(
      :tag_specifications,
      :availability_zone,
      :availability_zone_id,
      :cidr_block,
      :ipv_6_cidr_block,
      :outpost_arn,
      :vpc_id,
      :ipv_6_native,
      :ipv_4_ipam_pool_id,
      :ipv_4_netmask_length,
      :ipv_6_ipam_pool_id,
      :ipv_6_netmask_length,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] subnet
    #   Information about the subnet.
    #   @return [Types::Subnet]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateSubnetResult AWS API Documentation
    #
    class CreateSubnetResult < Struct.new(
      :subnet)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] resources
    #   The IDs of the resources, separated by spaces.
    #
    #   Constraints: Up to 1000 resource IDs. We recommend breaking up this
    #   request into smaller batches.
    #   @return [Array<String>]
    #
    # @!attribute [rw] tags
    #   The tags. The `value` parameter is required, but if you don't want
    #   the tag to have a value, specify the parameter with no value, and we
    #   set the value to an empty string.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTagsRequest AWS API Documentation
    #
    class CreateTagsRequest < Struct.new(
      :dry_run,
      :resources,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] description
    #   The description of the Traffic Mirror filter.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to a Traffic Mirror filter.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilterRequest AWS API Documentation
    #
    class CreateTrafficMirrorFilterRequest < Struct.new(
      :description,
      :tag_specifications,
      :dry_run,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter
    #   Information about the Traffic Mirror filter.
    #   @return [Types::TrafficMirrorFilter]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilterResult AWS API Documentation
    #
    class CreateTrafficMirrorFilterResult < Struct.new(
      :traffic_mirror_filter,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_id
    #   The ID of the filter that this rule is associated with.
    #   @return [String]
    #
    # @!attribute [rw] traffic_direction
    #   The type of traffic.
    #   @return [String]
    #
    # @!attribute [rw] rule_number
    #   The number of the Traffic Mirror rule. This number must be unique
    #   for each Traffic Mirror rule in a given direction. The rules are
    #   processed in ascending order by rule number.
    #   @return [Integer]
    #
    # @!attribute [rw] rule_action
    #   The action to take on the filtered traffic.
    #   @return [String]
    #
    # @!attribute [rw] destination_port_range
    #   The destination port range.
    #   @return [Types::TrafficMirrorPortRangeRequest]
    #
    # @!attribute [rw] source_port_range
    #   The source port range.
    #   @return [Types::TrafficMirrorPortRangeRequest]
    #
    # @!attribute [rw] protocol
    #   The protocol, for example UDP, to assign to the Traffic Mirror rule.
    #
    #   For information about the protocol value, see [Protocol Numbers][1]
    #   on the Internet Assigned Numbers Authority (IANA) website.
    #
    #
    #
    #   [1]: https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
    #   @return [Integer]
    #
    # @!attribute [rw] destination_cidr_block
    #   The destination CIDR block to assign to the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] source_cidr_block
    #   The source CIDR block to assign to the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   Traffic Mirroring tags specifications.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilterRuleRequest AWS API Documentation
    #
    class CreateTrafficMirrorFilterRuleRequest < Struct.new(
      :traffic_mirror_filter_id,
      :traffic_direction,
      :rule_number,
      :rule_action,
      :destination_port_range,
      :source_port_range,
      :protocol,
      :destination_cidr_block,
      :source_cidr_block,
      :description,
      :dry_run,
      :client_token,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_rule
    #   The Traffic Mirror rule.
    #   @return [Types::TrafficMirrorFilterRule]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorFilterRuleResult AWS API Documentation
    #
    class CreateTrafficMirrorFilterRuleResult < Struct.new(
      :traffic_mirror_filter_rule,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_interface_id
    #   The ID of the source network interface.
    #   @return [String]
    #
    # @!attribute [rw] traffic_mirror_target_id
    #   The ID of the Traffic Mirror target.
    #   @return [String]
    #
    # @!attribute [rw] traffic_mirror_filter_id
    #   The ID of the Traffic Mirror filter.
    #   @return [String]
    #
    # @!attribute [rw] packet_length
    #   The number of bytes in each packet to mirror. These are bytes after
    #   the VXLAN header. Do not specify this parameter when you want to
    #   mirror the entire packet. To mirror a subset of the packet, set this
    #   to the length (in bytes) that you want to mirror. For example, if
    #   you set this value to 100, then the first 100 bytes that meet the
    #   filter criteria are copied to the target.
    #
    #   If you do not want to mirror the entire packet, use the
    #   `PacketLength` parameter to specify the number of bytes in each
    #   packet to mirror.
    #
    #   For sessions with Network Load Balancer (NLB) Traffic Mirror targets
    #   the default `PacketLength` will be set to 8500. Valid values are
    #   1-8500. Setting a `PacketLength` greater than 8500 will result in an
    #   error response.
    #   @return [Integer]
    #
    # @!attribute [rw] session_number
    #   The session number determines the order in which sessions are
    #   evaluated when an interface is used by multiple sessions. The first
    #   session with a matching filter is the one that mirrors the packets.
    #
    #   Valid values are 1-32766.
    #   @return [Integer]
    #
    # @!attribute [rw] virtual_network_id
    #   The VXLAN ID for the Traffic Mirror session. For more information
    #   about the VXLAN protocol, see [RFC 7348][1]. If you do not specify a
    #   `VirtualNetworkId`, an account-wide unique ID is chosen at random.
    #
    #
    #
    #   [1]: https://datatracker.ietf.org/doc/html/rfc7348
    #   @return [Integer]
    #
    # @!attribute [rw] description
    #   The description of the Traffic Mirror session.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to a Traffic Mirror session.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorSessionRequest AWS API Documentation
    #
    class CreateTrafficMirrorSessionRequest < Struct.new(
      :network_interface_id,
      :traffic_mirror_target_id,
      :traffic_mirror_filter_id,
      :packet_length,
      :session_number,
      :virtual_network_id,
      :description,
      :tag_specifications,
      :dry_run,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_session
    #   Information about the Traffic Mirror session.
    #   @return [Types::TrafficMirrorSession]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorSessionResult AWS API Documentation
    #
    class CreateTrafficMirrorSessionResult < Struct.new(
      :traffic_mirror_session,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_interface_id
    #   The network interface ID that is associated with the target.
    #   @return [String]
    #
    # @!attribute [rw] network_load_balancer_arn
    #   The Amazon Resource Name (ARN) of the Network Load Balancer that is
    #   associated with the target.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the Traffic Mirror target.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the Traffic Mirror target.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] gateway_load_balancer_endpoint_id
    #   The ID of the Gateway Load Balancer endpoint.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorTargetRequest AWS API Documentation
    #
    class CreateTrafficMirrorTargetRequest < Struct.new(
      :network_interface_id,
      :network_load_balancer_arn,
      :description,
      :tag_specifications,
      :dry_run,
      :client_token,
      :gateway_load_balancer_endpoint_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_target
    #   Information about the Traffic Mirror target.
    #   @return [Types::TrafficMirrorTarget]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTrafficMirrorTargetResult AWS API Documentation
    #
    class CreateTrafficMirrorTargetResult < Struct.new(
      :traffic_mirror_target,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the Connect attachment.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_address
    #   The peer IP address (GRE outer IP address) on the transit gateway
    #   side of the Connect peer, which must be specified from a transit
    #   gateway CIDR block. If not specified, Amazon automatically assigns
    #   the first available IP address from the transit gateway CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] peer_address
    #   The peer IP address (GRE outer IP address) on the appliance side of
    #   the Connect peer.
    #   @return [String]
    #
    # @!attribute [rw] bgp_options
    #   The BGP options for the Connect peer.
    #   @return [Types::TransitGatewayConnectRequestBgpOptions]
    #
    # @!attribute [rw] inside_cidr_blocks
    #   The range of inside IP addresses that are used for BGP peering. You
    #   must specify a size /29 IPv4 CIDR block from the `169.254.0.0/16`
    #   range. The first address from the range must be configured on the
    #   appliance as the BGP IP address. You can also optionally specify a
    #   size /125 IPv6 CIDR block from the `fd00::/8` range.
    #   @return [Array<String>]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the Connect peer.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayConnectPeerRequest AWS API Documentation
    #
    class CreateTransitGatewayConnectPeerRequest < Struct.new(
      :transit_gateway_attachment_id,
      :transit_gateway_address,
      :peer_address,
      :bgp_options,
      :inside_cidr_blocks,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_connect_peer
    #   Information about the Connect peer.
    #   @return [Types::TransitGatewayConnectPeer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayConnectPeerResult AWS API Documentation
    #
    class CreateTransitGatewayConnectPeerResult < Struct.new(
      :transit_gateway_connect_peer)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transport_transit_gateway_attachment_id
    #   The ID of the transit gateway attachment. You can specify a VPC
    #   attachment or Amazon Web Services Direct Connect attachment.
    #   @return [String]
    #
    # @!attribute [rw] options
    #   The Connect attachment options.
    #   @return [Types::CreateTransitGatewayConnectRequestOptions]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the Connect attachment.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayConnectRequest AWS API Documentation
    #
    class CreateTransitGatewayConnectRequest < Struct.new(
      :transport_transit_gateway_attachment_id,
      :options,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options for a Connect attachment.
    #
    # @!attribute [rw] protocol
    #   The tunnel protocol.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayConnectRequestOptions AWS API Documentation
    #
    class CreateTransitGatewayConnectRequestOptions < Struct.new(
      :protocol)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_connect
    #   Information about the Connect attachment.
    #   @return [Types::TransitGatewayConnect]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayConnectResult AWS API Documentation
    #
    class CreateTransitGatewayConnectResult < Struct.new(
      :transit_gateway_connect)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] options
    #   The options for the transit gateway multicast domain.
    #   @return [Types::CreateTransitGatewayMulticastDomainRequestOptions]
    #
    # @!attribute [rw] tag_specifications
    #   The tags for the transit gateway multicast domain.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayMulticastDomainRequest AWS API Documentation
    #
    class CreateTransitGatewayMulticastDomainRequest < Struct.new(
      :transit_gateway_id,
      :options,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options for the transit gateway multicast domain.
    #
    # @!attribute [rw] igmpv_2_support
    #   Specify whether to enable Internet Group Management Protocol (IGMP)
    #   version 2 for the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] static_sources_support
    #   Specify whether to enable support for statically configuring
    #   multicast group sources for a domain.
    #   @return [String]
    #
    # @!attribute [rw] auto_accept_shared_associations
    #   Indicates whether to automatically accept cross-account subnet
    #   associations that are associated with the transit gateway multicast
    #   domain.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayMulticastDomainRequestOptions AWS API Documentation
    #
    class CreateTransitGatewayMulticastDomainRequestOptions < Struct.new(
      :igmpv_2_support,
      :static_sources_support,
      :auto_accept_shared_associations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain
    #   Information about the transit gateway multicast domain.
    #   @return [Types::TransitGatewayMulticastDomain]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayMulticastDomainResult AWS API Documentation
    #
    class CreateTransitGatewayMulticastDomainResult < Struct.new(
      :transit_gateway_multicast_domain)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] peer_transit_gateway_id
    #   The ID of the peer transit gateway with which to create the peering
    #   attachment.
    #   @return [String]
    #
    # @!attribute [rw] peer_account_id
    #   The ID of the Amazon Web Services account that owns the peer transit
    #   gateway.
    #   @return [String]
    #
    # @!attribute [rw] peer_region
    #   The Region where the peer transit gateway is located.
    #   @return [String]
    #
    # @!attribute [rw] options
    #   Requests a transit gateway peering attachment.
    #   @return [Types::CreateTransitGatewayPeeringAttachmentRequestOptions]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the transit gateway peering attachment.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayPeeringAttachmentRequest AWS API Documentation
    #
    class CreateTransitGatewayPeeringAttachmentRequest < Struct.new(
      :transit_gateway_id,
      :peer_transit_gateway_id,
      :peer_account_id,
      :peer_region,
      :options,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes whether dynamic routing is enabled or disabled for the
    # transit gateway peering request.
    #
    # @!attribute [rw] dynamic_routing
    #   Indicates whether dynamic routing is enabled or disabled.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayPeeringAttachmentRequestOptions AWS API Documentation
    #
    class CreateTransitGatewayPeeringAttachmentRequestOptions < Struct.new(
      :dynamic_routing)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_peering_attachment
    #   The transit gateway peering attachment.
    #   @return [Types::TransitGatewayPeeringAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayPeeringAttachmentResult AWS API Documentation
    #
    class CreateTransitGatewayPeeringAttachmentResult < Struct.new(
      :transit_gateway_peering_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway used for the policy table.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags specification for the transit gateway policy table created
    #   during the request.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayPolicyTableRequest AWS API Documentation
    #
    class CreateTransitGatewayPolicyTableRequest < Struct.new(
      :transit_gateway_id,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_table
    #   Describes the created transit gateway policy table.
    #   @return [Types::TransitGatewayPolicyTable]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayPolicyTableResult AWS API Documentation
    #
    class CreateTransitGatewayPolicyTableResult < Struct.new(
      :transit_gateway_policy_table)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list that is used for destination matches.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment to which traffic is routed.
    #   @return [String]
    #
    # @!attribute [rw] blackhole
    #   Indicates whether to drop traffic that matches this route.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayPrefixListReferenceRequest AWS API Documentation
    #
    class CreateTransitGatewayPrefixListReferenceRequest < Struct.new(
      :transit_gateway_route_table_id,
      :prefix_list_id,
      :transit_gateway_attachment_id,
      :blackhole,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_prefix_list_reference
    #   Information about the prefix list reference.
    #   @return [Types::TransitGatewayPrefixListReference]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayPrefixListReferenceResult AWS API Documentation
    #
    class CreateTransitGatewayPrefixListReferenceResult < Struct.new(
      :transit_gateway_prefix_list_reference)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] description
    #   A description of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] options
    #   The transit gateway options.
    #   @return [Types::TransitGatewayRequestOptions]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the transit gateway.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRequest AWS API Documentation
    #
    class CreateTransitGatewayRequest < Struct.new(
      :description,
      :options,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway
    #   Information about the transit gateway.
    #   @return [Types::TransitGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayResult AWS API Documentation
    #
    class CreateTransitGatewayResult < Struct.new(
      :transit_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] destination_cidr_block
    #   The CIDR range used for destination matches. Routing decisions are
    #   based on the most specific match.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] blackhole
    #   Indicates whether to drop traffic that matches this route.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteRequest AWS API Documentation
    #
    class CreateTransitGatewayRouteRequest < Struct.new(
      :destination_cidr_block,
      :transit_gateway_route_table_id,
      :transit_gateway_attachment_id,
      :blackhole,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route
    #   Information about the route.
    #   @return [Types::TransitGatewayRoute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteResult AWS API Documentation
    #
    class CreateTransitGatewayRouteResult < Struct.new(
      :route)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] peering_attachment_id
    #   The ID of the peering attachment.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags specifications applied to the transit gateway route table
    #   announcement.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteTableAnnouncementRequest AWS API Documentation
    #
    class CreateTransitGatewayRouteTableAnnouncementRequest < Struct.new(
      :transit_gateway_route_table_id,
      :peering_attachment_id,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_announcement
    #   Provides details about the transit gateway route table announcement.
    #   @return [Types::TransitGatewayRouteTableAnnouncement]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteTableAnnouncementResult AWS API Documentation
    #
    class CreateTransitGatewayRouteTableAnnouncementResult < Struct.new(
      :transit_gateway_route_table_announcement)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the transit gateway route table.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteTableRequest AWS API Documentation
    #
    class CreateTransitGatewayRouteTableRequest < Struct.new(
      :transit_gateway_id,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table
    #   Information about the transit gateway route table.
    #   @return [Types::TransitGatewayRouteTable]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayRouteTableResult AWS API Documentation
    #
    class CreateTransitGatewayRouteTableResult < Struct.new(
      :transit_gateway_route_table)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of one or more subnets. You can specify only one subnet per
    #   Availability Zone. You must specify at least one subnet, but we
    #   recommend that you specify two subnets for better availability. The
    #   transit gateway uses one IP address from each specified subnet.
    #   @return [Array<String>]
    #
    # @!attribute [rw] options
    #   The VPC attachment options.
    #   @return [Types::CreateTransitGatewayVpcAttachmentRequestOptions]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the VPC attachment.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayVpcAttachmentRequest AWS API Documentation
    #
    class CreateTransitGatewayVpcAttachmentRequest < Struct.new(
      :transit_gateway_id,
      :vpc_id,
      :subnet_ids,
      :options,
      :tag_specifications,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for a VPC attachment.
    #
    # @!attribute [rw] dns_support
    #   Enable or disable DNS support. The default is `enable`.
    #   @return [String]
    #
    # @!attribute [rw] security_group_referencing_support
    #   Enables you to reference a security group across VPCs attached to a
    #   transit gateway to simplify security group management.
    #
    #   This option is set to `enable` by default. However, at the transit
    #   gateway level the default is set to `disable`.
    #
    #   For more information about security group referencing, see [Security
    #   group referencing ][1] in the *Amazon Web Services Transit Gateways
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#vpc-attachment-security
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_support
    #   Enable or disable IPv6 support. The default is `disable`.
    #   @return [String]
    #
    # @!attribute [rw] appliance_mode_support
    #   Enable or disable support for appliance mode. If enabled, a traffic
    #   flow between a source and destination uses the same Availability
    #   Zone for the VPC attachment for the lifetime of that flow. The
    #   default is `disable`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayVpcAttachmentRequestOptions AWS API Documentation
    #
    class CreateTransitGatewayVpcAttachmentRequestOptions < Struct.new(
      :dns_support,
      :security_group_referencing_support,
      :ipv_6_support,
      :appliance_mode_support)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_vpc_attachment
    #   Information about the VPC attachment.
    #   @return [Types::TransitGatewayVpcAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateTransitGatewayVpcAttachmentResult AWS API Documentation
    #
    class CreateTransitGatewayVpcAttachmentResult < Struct.new(
      :transit_gateway_vpc_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the CIDR options for a Verified Access endpoint.
    #
    # @!attribute [rw] protocol
    #   The protocol.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets.
    #   @return [Array<String>]
    #
    # @!attribute [rw] cidr
    #   The CIDR.
    #   @return [String]
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::CreateVerifiedAccessEndpointPortRange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessEndpointCidrOptions AWS API Documentation
    #
    class CreateVerifiedAccessEndpointCidrOptions < Struct.new(
      :protocol,
      :subnet_ids,
      :cidr,
      :port_ranges)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the network interface options when creating an Amazon Web
    # Services Verified Access endpoint using the `network-interface` type.
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] protocol
    #   The IP protocol.
    #   @return [String]
    #
    # @!attribute [rw] port
    #   The IP port number.
    #   @return [Integer]
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::CreateVerifiedAccessEndpointPortRange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessEndpointEniOptions AWS API Documentation
    #
    class CreateVerifiedAccessEndpointEniOptions < Struct.new(
      :network_interface_id,
      :protocol,
      :port,
      :port_ranges)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the load balancer options when creating an Amazon Web
    # Services Verified Access endpoint using the `load-balancer` type.
    #
    # @!attribute [rw] protocol
    #   The IP protocol.
    #   @return [String]
    #
    # @!attribute [rw] port
    #   The IP port number.
    #   @return [Integer]
    #
    # @!attribute [rw] load_balancer_arn
    #   The ARN of the load balancer.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets. You can specify only one subnet per
    #   Availability Zone.
    #   @return [Array<String>]
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::CreateVerifiedAccessEndpointPortRange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessEndpointLoadBalancerOptions AWS API Documentation
    #
    class CreateVerifiedAccessEndpointLoadBalancerOptions < Struct.new(
      :protocol,
      :port,
      :load_balancer_arn,
      :subnet_ids,
      :port_ranges)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the port range for a Verified Access endpoint.
    #
    # @!attribute [rw] from_port
    #   The start of the port range.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   The end of the port range.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessEndpointPortRange AWS API Documentation
    #
    class CreateVerifiedAccessEndpointPortRange < Struct.new(
      :from_port,
      :to_port)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the RDS options for a Verified Access endpoint.
    #
    # @!attribute [rw] protocol
    #   The protocol.
    #   @return [String]
    #
    # @!attribute [rw] port
    #   The port.
    #   @return [Integer]
    #
    # @!attribute [rw] rds_db_instance_arn
    #   The ARN of the RDS instance.
    #   @return [String]
    #
    # @!attribute [rw] rds_db_cluster_arn
    #   The ARN of the DB cluster.
    #   @return [String]
    #
    # @!attribute [rw] rds_db_proxy_arn
    #   The ARN of the RDS proxy.
    #   @return [String]
    #
    # @!attribute [rw] rds_endpoint
    #   The RDS endpoint.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets. You can specify only one subnet per
    #   Availability Zone.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessEndpointRdsOptions AWS API Documentation
    #
    class CreateVerifiedAccessEndpointRdsOptions < Struct.new(
      :protocol,
      :port,
      :rds_db_instance_arn,
      :rds_db_cluster_arn,
      :rds_db_proxy_arn,
      :rds_endpoint,
      :subnet_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_group_id
    #   The ID of the Verified Access group to associate the endpoint with.
    #   @return [String]
    #
    # @!attribute [rw] endpoint_type
    #   The type of Verified Access endpoint to create.
    #   @return [String]
    #
    # @!attribute [rw] attachment_type
    #   The type of attachment.
    #   @return [String]
    #
    # @!attribute [rw] domain_certificate_arn
    #   The ARN of the public TLS/SSL certificate in Amazon Web Services
    #   Certificate Manager to associate with the endpoint. The CN in the
    #   certificate must match the DNS name your end users will use to reach
    #   your application.
    #   @return [String]
    #
    # @!attribute [rw] application_domain
    #   The DNS name for users to reach your application.
    #   @return [String]
    #
    # @!attribute [rw] endpoint_domain_prefix
    #   A custom identifier that is prepended to the DNS name that is
    #   generated for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of the security groups to associate with the Verified Access
    #   endpoint. Required if `AttachmentType` is set to `vpc`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] load_balancer_options
    #   The load balancer details. This parameter is required if the
    #   endpoint type is `load-balancer`.
    #   @return [Types::CreateVerifiedAccessEndpointLoadBalancerOptions]
    #
    # @!attribute [rw] network_interface_options
    #   The network interface details. This parameter is required if the
    #   endpoint type is `network-interface`.
    #   @return [Types::CreateVerifiedAccessEndpointEniOptions]
    #
    # @!attribute [rw] description
    #   A description for the Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] policy_document
    #   The Verified Access policy document.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the Verified Access endpoint.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] sse_specification
    #   The options for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationRequest]
    #
    # @!attribute [rw] rds_options
    #   The RDS details. This parameter is required if the endpoint type is
    #   `rds`.
    #   @return [Types::CreateVerifiedAccessEndpointRdsOptions]
    #
    # @!attribute [rw] cidr_options
    #   The CIDR options. This parameter is required if the endpoint type is
    #   `cidr`.
    #   @return [Types::CreateVerifiedAccessEndpointCidrOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessEndpointRequest AWS API Documentation
    #
    class CreateVerifiedAccessEndpointRequest < Struct.new(
      :verified_access_group_id,
      :endpoint_type,
      :attachment_type,
      :domain_certificate_arn,
      :application_domain,
      :endpoint_domain_prefix,
      :security_group_ids,
      :load_balancer_options,
      :network_interface_options,
      :description,
      :policy_document,
      :tag_specifications,
      :client_token,
      :dry_run,
      :sse_specification,
      :rds_options,
      :cidr_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint
    #   Details about the Verified Access endpoint.
    #   @return [Types::VerifiedAccessEndpoint]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessEndpointResult AWS API Documentation
    #
    class CreateVerifiedAccessEndpointResult < Struct.new(
      :verified_access_endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] policy_document
    #   The Verified Access policy document.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the Verified Access group.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] sse_specification
    #   The options for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessGroupRequest AWS API Documentation
    #
    class CreateVerifiedAccessGroupRequest < Struct.new(
      :verified_access_instance_id,
      :description,
      :policy_document,
      :tag_specifications,
      :client_token,
      :dry_run,
      :sse_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_group
    #   Details about the Verified Access group.
    #   @return [Types::VerifiedAccessGroup]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessGroupResult AWS API Documentation
    #
    class CreateVerifiedAccessGroupResult < Struct.new(
      :verified_access_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] description
    #   A description for the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the Verified Access instance.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] fips_enabled
    #   Enable or disable support for Federal Information Processing
    #   Standards (FIPS) on the instance.
    #   @return [Boolean]
    #
    # @!attribute [rw] cidr_endpoints_custom_sub_domain
    #   The custom subdomain.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessInstanceRequest AWS API Documentation
    #
    class CreateVerifiedAccessInstanceRequest < Struct.new(
      :description,
      :tag_specifications,
      :client_token,
      :dry_run,
      :fips_enabled,
      :cidr_endpoints_custom_sub_domain)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance
    #   Details about the Verified Access instance.
    #   @return [Types::VerifiedAccessInstance]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessInstanceResult AWS API Documentation
    #
    class CreateVerifiedAccessInstanceResult < Struct.new(
      :verified_access_instance)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the OpenID Connect (OIDC) options.
    #
    # @!attribute [rw] public_signing_key_endpoint
    #   The public signing key endpoint.
    #   @return [String]
    #
    # @!attribute [rw] issuer
    #   The OIDC issuer identifier of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] authorization_endpoint
    #   The authorization endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] token_endpoint
    #   The token endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] user_info_endpoint
    #   The user info endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] client_id
    #   The OAuth 2.0 client identifier.
    #   @return [String]
    #
    # @!attribute [rw] client_secret
    #   The OAuth 2.0 client secret.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   The set of user claims to be requested from the IdP.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessNativeApplicationOidcOptions AWS API Documentation
    #
    class CreateVerifiedAccessNativeApplicationOidcOptions < Struct.new(
      :public_signing_key_endpoint,
      :issuer,
      :authorization_endpoint,
      :token_endpoint,
      :user_info_endpoint,
      :client_id,
      :client_secret,
      :scope)
      SENSITIVE = [:client_secret]
      include Aws::Structure
    end

    # Describes the options when creating an Amazon Web Services Verified
    # Access trust provider using the `device` type.
    #
    # @!attribute [rw] tenant_id
    #   The ID of the tenant application with the device-identity provider.
    #   @return [String]
    #
    # @!attribute [rw] public_signing_key_url
    #   The URL Amazon Web Services Verified Access will use to verify the
    #   authenticity of the device tokens.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessTrustProviderDeviceOptions AWS API Documentation
    #
    class CreateVerifiedAccessTrustProviderDeviceOptions < Struct.new(
      :tenant_id,
      :public_signing_key_url)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options when creating an Amazon Web Services Verified
    # Access trust provider using the `user` type.
    #
    # @!attribute [rw] issuer
    #   The OIDC issuer.
    #   @return [String]
    #
    # @!attribute [rw] authorization_endpoint
    #   The OIDC authorization endpoint.
    #   @return [String]
    #
    # @!attribute [rw] token_endpoint
    #   The OIDC token endpoint.
    #   @return [String]
    #
    # @!attribute [rw] user_info_endpoint
    #   The OIDC user info endpoint.
    #   @return [String]
    #
    # @!attribute [rw] client_id
    #   The client identifier.
    #   @return [String]
    #
    # @!attribute [rw] client_secret
    #   The client secret.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   OpenID Connect (OIDC) scopes are used by an application during
    #   authentication to authorize access to a user's details. Each scope
    #   returns a specific set of user attributes.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessTrustProviderOidcOptions AWS API Documentation
    #
    class CreateVerifiedAccessTrustProviderOidcOptions < Struct.new(
      :issuer,
      :authorization_endpoint,
      :token_endpoint,
      :user_info_endpoint,
      :client_id,
      :client_secret,
      :scope)
      SENSITIVE = [:client_secret]
      include Aws::Structure
    end

    # @!attribute [rw] trust_provider_type
    #   The type of trust provider.
    #   @return [String]
    #
    # @!attribute [rw] user_trust_provider_type
    #   The type of user-based trust provider. This parameter is required
    #   when the provider type is `user`.
    #   @return [String]
    #
    # @!attribute [rw] device_trust_provider_type
    #   The type of device-based trust provider. This parameter is required
    #   when the provider type is `device`.
    #   @return [String]
    #
    # @!attribute [rw] oidc_options
    #   The options for a OpenID Connect-compatible user-identity trust
    #   provider. This parameter is required when the provider type is
    #   `user`.
    #   @return [Types::CreateVerifiedAccessTrustProviderOidcOptions]
    #
    # @!attribute [rw] device_options
    #   The options for a device-based trust provider. This parameter is
    #   required when the provider type is `device`.
    #   @return [Types::CreateVerifiedAccessTrustProviderDeviceOptions]
    #
    # @!attribute [rw] policy_reference_name
    #   The identifier to be used when working with policy rules.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the Verified Access trust provider.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the Verified Access trust provider.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] sse_specification
    #   The options for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationRequest]
    #
    # @!attribute [rw] native_application_oidc_options
    #   The OpenID Connect (OIDC) options.
    #   @return [Types::CreateVerifiedAccessNativeApplicationOidcOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessTrustProviderRequest AWS API Documentation
    #
    class CreateVerifiedAccessTrustProviderRequest < Struct.new(
      :trust_provider_type,
      :user_trust_provider_type,
      :device_trust_provider_type,
      :oidc_options,
      :device_options,
      :policy_reference_name,
      :description,
      :tag_specifications,
      :client_token,
      :dry_run,
      :sse_specification,
      :native_application_oidc_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_trust_provider
    #   Details about the Verified Access trust provider.
    #   @return [Types::VerifiedAccessTrustProvider]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVerifiedAccessTrustProviderResult AWS API Documentation
    #
    class CreateVerifiedAccessTrustProviderResult < Struct.new(
      :verified_access_trust_provider)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the user or group to be added or removed from the list of
    # create volume permissions for a volume.
    #
    # @!attribute [rw] user_id
    #   The ID of the Amazon Web Services account to be added or removed.
    #   @return [String]
    #
    # @!attribute [rw] group
    #   The group to be added or removed. The possible value is `all`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolumePermission AWS API Documentation
    #
    class CreateVolumePermission < Struct.new(
      :user_id,
      :group)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes modifications to the list of create volume permissions for a
    # volume.
    #
    # @!attribute [rw] add
    #   Adds the specified Amazon Web Services account ID or group to the
    #   list.
    #   @return [Array<Types::CreateVolumePermission>]
    #
    # @!attribute [rw] remove
    #   Removes the specified Amazon Web Services account ID or group from
    #   the list.
    #   @return [Array<Types::CreateVolumePermission>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolumePermissionModifications AWS API Documentation
    #
    class CreateVolumePermissionModifications < Struct.new(
      :add,
      :remove)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] availability_zone
    #   The ID of the Availability Zone in which to create the volume. For
    #   example, `us-east-1a`.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` must be specified,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone in which to create the volume. For
    #   example, `use1-az1`.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` must be specified,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the volume should be encrypted. The effect of
    #   setting the encryption state to `true` depends on the volume origin
    #   (new or from a snapshot), starting encryption state, ownership, and
    #   whether encryption by default is enabled. For more information, see
    #   [Encryption by default][1] in the *Amazon EBS User Guide*.
    #
    #   Encrypted Amazon EBS volumes must be attached to instances that
    #   support Amazon EBS encryption. For more information, see [Supported
    #   instance types][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/work-with-ebs-encr.html#encryption-by-default
    #   [2]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption-requirements.html#ebs-encryption_supported_instances
    #   @return [Boolean]
    #
    # @!attribute [rw] iops
    #   The number of I/O operations per second (IOPS). For `gp3`, `io1`,
    #   and `io2` volumes, this represents the number of IOPS that are
    #   provisioned for the volume. For `gp2` volumes, this represents the
    #   baseline performance of the volume and the rate at which the volume
    #   accumulates I/O credits for bursting.
    #
    #   The following are the supported values for each volume type:
    #
    #   * `gp3`: 3,000 - 80,000 IOPS
    #
    #   * `io1`: 100 - 64,000 IOPS
    #
    #   * `io2`: 100 - 256,000 IOPS
    #
    #   For `io2` volumes, you can achieve up to 256,000 IOPS on [instances
    #   built on the Nitro System][1]. On other instances, you can achieve
    #   performance up to 32,000 IOPS.
    #
    #   This parameter is required for `io1` and `io2` volumes. The default
    #   for `gp3` volumes is 3,000 IOPS. This parameter is not supported for
    #   `gp2`, `st1`, `sc1`, or `standard` volumes.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html
    #   @return [Integer]
    #
    # @!attribute [rw] kms_key_id
    #   The identifier of the KMS key to use for Amazon EBS encryption. If
    #   this parameter is not specified, your KMS key for Amazon EBS is
    #   used. If `KmsKeyId` is specified, the encrypted state must be
    #   `true`.
    #
    #   You can specify the KMS key using any of the following:
    #
    #   * Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
    #
    #   * Key alias. For example, alias/ExampleAlias.
    #
    #   * Key ARN. For example,
    #     arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.
    #
    #   * Alias ARN. For example,
    #     arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.
    #
    #   Amazon Web Services authenticates the KMS key asynchronously.
    #   Therefore, if you specify an ID, alias, or ARN that is not valid,
    #   the action can appear to complete, but eventually fails.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost on which to create the
    #   volume.
    #
    #   If you intend to use a volume with an instance running on an
    #   outpost, then you must create the volume on the same outpost as the
    #   instance. You can't use a volume created in an Amazon Web Services
    #   Region with an instance on an Amazon Web Services outpost, or the
    #   other way around.
    #   @return [String]
    #
    # @!attribute [rw] size
    #   The size of the volume, in GiBs. You must specify either a snapshot
    #   ID or a volume size. If you specify a snapshot, the default is the
    #   snapshot size. You can specify a volume size that is equal to or
    #   larger than the snapshot size.
    #
    #   The following are the supported volumes sizes for each volume type:
    #
    #   * `gp2`: 1 - 16,384 GiB
    #
    #   * `gp3`: 1 - 65,536 GiB
    #
    #   * `io1`: 4 - 16,384 GiB
    #
    #   * `io2`: 4 - 65,536 GiB
    #
    #   * `st1` and `sc1`: 125 - 16,384 GiB
    #
    #   * `standard`: 1 - 1024 GiB
    #   @return [Integer]
    #
    # @!attribute [rw] snapshot_id
    #   The snapshot from which to create the volume. You must specify
    #   either a snapshot ID or a volume size.
    #   @return [String]
    #
    # @!attribute [rw] volume_type
    #   The volume type. This parameter can be one of the following values:
    #
    #   * General Purpose SSD: `gp2` \| `gp3`
    #
    #   * Provisioned IOPS SSD: `io1` \| `io2`
    #
    #   * Throughput Optimized HDD: `st1`
    #
    #   * Cold HDD: `sc1`
    #
    #   * Magnetic: `standard`
    #
    #   Throughput Optimized HDD (`st1`) and Cold HDD (`sc1`) volumes can't
    #   be used as boot volumes.
    #
    #   For more information, see [Amazon EBS volume types][1] in the
    #   *Amazon EBS User Guide*.
    #
    #   Default: `gp2`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the volume during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] multi_attach_enabled
    #   Indicates whether to enable Amazon EBS Multi-Attach. If you enable
    #   Multi-Attach, you can attach the volume to up to 16 [Instances built
    #   on the Nitro System][1] in the same Availability Zone. This
    #   parameter is supported with `io1` and `io2` volumes only. For more
    #   information, see [ Amazon EBS Multi-Attach][2] in the *Amazon EBS
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html
    #   [2]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes-multi.html
    #   @return [Boolean]
    #
    # @!attribute [rw] throughput
    #   The throughput to provision for a volume, with a maximum of 2,000
    #   MiB/s.
    #
    #   This parameter is valid only for `gp3` volumes.
    #
    #   Valid Range: Minimum value of 125. Maximum value of 2,000.
    #   @return [Integer]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensure
    #   Idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] volume_initialization_rate
    #   Specifies the Amazon EBS Provisioned Rate for Volume Initialization
    #   (volume initialization rate), in MiB/s, at which to download the
    #   snapshot blocks from Amazon S3 to the volume. This is also known as
    #   *volume initialization*. Specifying a volume initialization rate
    #   ensures that the volume is initialized at a predictable and
    #   consistent rate after creation.
    #
    #   This parameter is supported only for volumes created from snapshots.
    #   Omit this parameter if:
    #
    #   * You want to create the volume using fast snapshot restore. You
    #     must specify a snapshot that is enabled for fast snapshot restore.
    #     In this case, the volume is fully initialized at creation.
    #
    #     <note markdown="1"> If you specify a snapshot that is enabled for fast snapshot
    #     restore and a volume initialization rate, the volume will be
    #     initialized at the specified rate instead of fast snapshot
    #     restore.
    #
    #      </note>
    #
    #   * You want to create a volume that is initialized at the default
    #     rate.
    #
    #   For more information, see [ Initialize Amazon EBS volumes][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #   Valid range: 100 - 300 MiB/s
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html
    #   @return [Integer]
    #
    # @!attribute [rw] operator
    #   Reserved for internal use.
    #   @return [Types::OperatorRequest]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVolumeRequest AWS API Documentation
    #
    class CreateVolumeRequest < Struct.new(
      :availability_zone,
      :availability_zone_id,
      :encrypted,
      :iops,
      :kms_key_id,
      :outpost_arn,
      :size,
      :snapshot_id,
      :volume_type,
      :tag_specifications,
      :multi_attach_enabled,
      :throughput,
      :client_token,
      :volume_initialization_rate,
      :operator,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] subnet_id
    #   A subnet ID.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   A VPC ID.
    #   @return [String]
    #
    # @!attribute [rw] internet_gateway_exclusion_mode
    #   The exclusion mode for internet gateway traffic.
    #
    #   * `allow-bidirectional`: Allow all internet traffic to and from the
    #     excluded VPCs and subnets.
    #
    #   * `allow-egress`: Allow outbound internet traffic from the excluded
    #     VPCs and subnets. Block inbound internet traffic to the excluded
    #     VPCs and subnets. Only applies when VPC Block Public Access is set
    #     to Bidirectional.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   `tag` - The key/value combination of a tag assigned to the resource.
    #   Use the tag key in the filter name and the tag value as the filter
    #   value. For example, to find all resources that have a tag with the
    #   key `Owner` and the value `TeamA`, specify `tag:Owner` for the
    #   filter name and `TeamA` for the filter value.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcBlockPublicAccessExclusionRequest AWS API Documentation
    #
    class CreateVpcBlockPublicAccessExclusionRequest < Struct.new(
      :dry_run,
      :subnet_id,
      :vpc_id,
      :internet_gateway_exclusion_mode,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_block_public_access_exclusion
    #   Details about an exclusion.
    #   @return [Types::VpcBlockPublicAccessExclusion]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcBlockPublicAccessExclusionResult AWS API Documentation
    #
    class CreateVpcBlockPublicAccessExclusionResult < Struct.new(
      :vpc_block_public_access_exclusion)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_id
    #   The ID of the endpoint service.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_id
    #   The ID of the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] connection_notification_arn
    #   The ARN of the SNS topic for the notifications.
    #   @return [String]
    #
    # @!attribute [rw] connection_events
    #   The endpoint events for which to receive notifications. Valid values
    #   are `Accept`, `Connect`, `Delete`, and `Reject`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointConnectionNotificationRequest AWS API Documentation
    #
    class CreateVpcEndpointConnectionNotificationRequest < Struct.new(
      :dry_run,
      :service_id,
      :vpc_endpoint_id,
      :connection_notification_arn,
      :connection_events,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] connection_notification
    #   Information about the notification.
    #   @return [Types::ConnectionNotification]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointConnectionNotificationResult AWS API Documentation
    #
    class CreateVpcEndpointConnectionNotificationResult < Struct.new(
      :connection_notification,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_endpoint_type
    #   The type of endpoint.
    #
    #   Default: Gateway
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] service_name
    #   The name of the endpoint service.
    #   @return [String]
    #
    # @!attribute [rw] policy_document
    #   (Interface and gateway endpoints) A policy to attach to the endpoint
    #   that controls access to the service. The policy must be in valid
    #   JSON format. If this parameter is not specified, we attach a default
    #   policy that allows full access to the service.
    #   @return [String]
    #
    # @!attribute [rw] route_table_ids
    #   (Gateway endpoint) The route table IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] subnet_ids
    #   (Interface and Gateway Load Balancer endpoints) The IDs of the
    #   subnets in which to create endpoint network interfaces. For a
    #   Gateway Load Balancer endpoint, you can specify only one subnet.
    #   @return [Array<String>]
    #
    # @!attribute [rw] security_group_ids
    #   (Interface endpoint) The IDs of the security groups to associate
    #   with the endpoint network interfaces. If this parameter is not
    #   specified, we use the default security group for the VPC.
    #   @return [Array<String>]
    #
    # @!attribute [rw] ip_address_type
    #   The IP address type for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] dns_options
    #   The DNS options for the endpoint.
    #   @return [Types::DnsOptionsSpecification]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] private_dns_enabled
    #   (Interface endpoint) Indicates whether to associate a private hosted
    #   zone with the specified VPC. The private hosted zone contains a
    #   record set for the default public DNS name for the service for the
    #   Region (for example, `kinesis.us-east-1.amazonaws.com`), which
    #   resolves to the private IP addresses of the endpoint network
    #   interfaces in the VPC. This enables you to make requests to the
    #   default public DNS name for the service instead of the public DNS
    #   names that are automatically generated by the VPC endpoint service.
    #
    #   To use a private hosted zone, you must set the following VPC
    #   attributes to `true`: `enableDnsHostnames` and `enableDnsSupport`.
    #   Use ModifyVpcAttribute to set the VPC attributes.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to associate with the endpoint.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] subnet_configurations
    #   The subnet configurations for the endpoint.
    #   @return [Array<Types::SubnetConfiguration>]
    #
    # @!attribute [rw] service_network_arn
    #   The Amazon Resource Name (ARN) of a service network that will be
    #   associated with the VPC endpoint of type service-network.
    #   @return [String]
    #
    # @!attribute [rw] resource_configuration_arn
    #   The Amazon Resource Name (ARN) of a resource configuration that will
    #   be associated with the VPC endpoint of type resource.
    #   @return [String]
    #
    # @!attribute [rw] service_region
    #   The Region where the service is hosted. The default is the current
    #   Region.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointRequest AWS API Documentation
    #
    class CreateVpcEndpointRequest < Struct.new(
      :dry_run,
      :vpc_endpoint_type,
      :vpc_id,
      :service_name,
      :policy_document,
      :route_table_ids,
      :subnet_ids,
      :security_group_ids,
      :ip_address_type,
      :dns_options,
      :client_token,
      :private_dns_enabled,
      :tag_specifications,
      :subnet_configurations,
      :service_network_arn,
      :resource_configuration_arn,
      :service_region)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_endpoint
    #   Information about the endpoint.
    #   @return [Types::VpcEndpoint]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointResult AWS API Documentation
    #
    class CreateVpcEndpointResult < Struct.new(
      :vpc_endpoint,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] acceptance_required
    #   Indicates whether requests from service consumers to create an
    #   endpoint to your service must be accepted manually.
    #   @return [Boolean]
    #
    # @!attribute [rw] private_dns_name
    #   (Interface endpoint configuration) The private DNS name to assign to
    #   the VPC endpoint service.
    #   @return [String]
    #
    # @!attribute [rw] network_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of the Network Load Balancers.
    #   @return [Array<String>]
    #
    # @!attribute [rw] gateway_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of the Gateway Load Balancers.
    #   @return [Array<String>]
    #
    # @!attribute [rw] supported_ip_address_types
    #   The supported IP address types. The possible values are `ipv4` and
    #   `ipv6`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] supported_regions
    #   The Regions from which service consumers can access the service.
    #   @return [Array<String>]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to associate with the service.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointServiceConfigurationRequest AWS API Documentation
    #
    class CreateVpcEndpointServiceConfigurationRequest < Struct.new(
      :dry_run,
      :acceptance_required,
      :private_dns_name,
      :network_load_balancer_arns,
      :gateway_load_balancer_arns,
      :supported_ip_address_types,
      :supported_regions,
      :client_token,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] service_configuration
    #   Information about the service configuration.
    #   @return [Types::ServiceConfiguration]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcEndpointServiceConfigurationResult AWS API Documentation
    #
    class CreateVpcEndpointServiceConfigurationResult < Struct.new(
      :service_configuration,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] peer_region
    #   The Region code for the accepter VPC, if the accepter VPC is located
    #   in a Region other than the Region in which you make the request.
    #
    #   Default: The Region in which you make the request.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the peering connection.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the requester VPC. You must specify this parameter in the
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] peer_vpc_id
    #   The ID of the VPC with which you are creating the VPC peering
    #   connection. You must specify this parameter in the request.
    #   @return [String]
    #
    # @!attribute [rw] peer_owner_id
    #   The Amazon Web Services account ID of the owner of the accepter VPC.
    #
    #   Default: Your Amazon Web Services account ID
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnectionRequest AWS API Documentation
    #
    class CreateVpcPeeringConnectionRequest < Struct.new(
      :peer_region,
      :tag_specifications,
      :dry_run,
      :vpc_id,
      :peer_vpc_id,
      :peer_owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_peering_connection
    #   Information about the VPC peering connection.
    #   @return [Types::VpcPeeringConnection]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcPeeringConnectionResult AWS API Documentation
    #
    class CreateVpcPeeringConnectionResult < Struct.new(
      :vpc_peering_connection)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cidr_block
    #   The IPv4 network range for the VPC, in CIDR notation. For example,
    #   `10.0.0.0/16`. We modify the specified CIDR block to its canonical
    #   form; for example, if you specify `100.68.0.18/18`, we modify it to
    #   `100.68.0.0/18`.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_pool
    #   The ID of an IPv6 address pool from which to allocate the IPv6 CIDR
    #   block.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   The IPv6 CIDR block from the IPv6 address pool. You must also
    #   specify `Ipv6Pool` in the request.
    #
    #   To let Amazon choose the IPv6 CIDR block for you, omit this
    #   parameter.
    #   @return [String]
    #
    # @!attribute [rw] ipv_4_ipam_pool_id
    #   The ID of an IPv4 IPAM pool you want to use for allocating this
    #   VPC's CIDR. For more information, see [What is IPAM?][1] in the
    #   *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] ipv_4_netmask_length
    #   The netmask length of the IPv4 CIDR you want to allocate to this VPC
    #   from an Amazon VPC IP Address Manager (IPAM) pool. For more
    #   information about IPAM, see [What is IPAM?][1] in the *Amazon VPC
    #   IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_ipam_pool_id
    #   The ID of an IPv6 IPAM pool which will be used to allocate this VPC
    #   an IPv6 CIDR. IPAM is a VPC feature that you can use to automate
    #   your IP address management workflows including assigning, tracking,
    #   troubleshooting, and auditing IP addresses across Amazon Web
    #   Services Regions and accounts throughout your Amazon Web Services
    #   Organization. For more information, see [What is IPAM?][1] in the
    #   *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_netmask_length
    #   The netmask length of the IPv6 CIDR you want to allocate to this VPC
    #   from an Amazon VPC IP Address Manager (IPAM) pool. For more
    #   information about IPAM, see [What is IPAM?][1] in the *Amazon VPC
    #   IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_cidr_block_network_border_group
    #   The name of the location from which we advertise the IPV6 CIDR
    #   block. Use this parameter to limit the address to this location.
    #
    #   You must set `AmazonProvidedIpv6CidrBlock` to `true` to use this
    #   parameter.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to assign to the VPC.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_tenancy
    #   The tenancy options for instances launched into the VPC. For
    #   `default`, instances are launched with shared tenancy by default.
    #   You can launch instances with any tenancy into a shared tenancy VPC.
    #   For `dedicated`, instances are launched as dedicated tenancy
    #   instances by default. You can only launch instances with a tenancy
    #   of `dedicated` or `host` into a dedicated tenancy VPC.
    #
    #   **Important:** The `host` value cannot be used with this parameter.
    #   Use the `default` or `dedicated` values only.
    #
    #   Default: `default`
    #   @return [String]
    #
    # @!attribute [rw] amazon_provided_ipv_6_cidr_block
    #   Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length
    #   for the VPC. You cannot specify the range of IP addresses, or the
    #   size of the CIDR block.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcRequest AWS API Documentation
    #
    class CreateVpcRequest < Struct.new(
      :cidr_block,
      :ipv_6_pool,
      :ipv_6_cidr_block,
      :ipv_4_ipam_pool_id,
      :ipv_4_netmask_length,
      :ipv_6_ipam_pool_id,
      :ipv_6_netmask_length,
      :ipv_6_cidr_block_network_border_group,
      :tag_specifications,
      :dry_run,
      :instance_tenancy,
      :amazon_provided_ipv_6_cidr_block)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc
    #   Information about the VPC.
    #   @return [Types::Vpc]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpcResult AWS API Documentation
    #
    class CreateVpcResult < Struct.new(
      :vpc)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CreateVpnConnection.
    #
    # @!attribute [rw] customer_gateway_id
    #   The ID of the customer gateway.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of VPN connection (`ipsec.1`).
    #   @return [String]
    #
    # @!attribute [rw] vpn_gateway_id
    #   The ID of the virtual private gateway. If you specify a virtual
    #   private gateway, you cannot specify a transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway. If you specify a transit gateway, you
    #   cannot specify a virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the VPN connection.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] pre_shared_key_storage
    #   Specifies the storage mode for the pre-shared key (PSK). Valid
    #   values are `Standard`" (stored in the Site-to-Site VPN service) or
    #   `SecretsManager` (stored in Amazon Web Services Secrets Manager).
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] options
    #   The options for the VPN connection.
    #   @return [Types::VpnConnectionOptionsSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRequest AWS API Documentation
    #
    class CreateVpnConnectionRequest < Struct.new(
      :customer_gateway_id,
      :type,
      :vpn_gateway_id,
      :transit_gateway_id,
      :tag_specifications,
      :pre_shared_key_storage,
      :dry_run,
      :options)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CreateVpnConnection.
    #
    # @!attribute [rw] vpn_connection
    #   Information about the VPN connection.
    #   @return [Types::VpnConnection]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionResult AWS API Documentation
    #
    class CreateVpnConnectionResult < Struct.new(
      :vpn_connection)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CreateVpnConnectionRoute.
    #
    # @!attribute [rw] destination_cidr_block
    #   The CIDR block associated with the local subnet of the customer
    #   network.
    #   @return [String]
    #
    # @!attribute [rw] vpn_connection_id
    #   The ID of the VPN connection.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnConnectionRouteRequest AWS API Documentation
    #
    class CreateVpnConnectionRouteRequest < Struct.new(
      :destination_cidr_block,
      :vpn_connection_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for CreateVpnGateway.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone for the virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of VPN connection this virtual private gateway supports.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the virtual private gateway.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] amazon_side_asn
    #   A private Autonomous System Number (ASN) for the Amazon side of a
    #   BGP session. If you're using a 16-bit ASN, it must be in the 64512
    #   to 65534 range. If you're using a 32-bit ASN, it must be in the
    #   4200000000 to 4294967294 range.
    #
    #   Default: 64512
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGatewayRequest AWS API Documentation
    #
    class CreateVpnGatewayRequest < Struct.new(
      :availability_zone,
      :type,
      :tag_specifications,
      :amazon_side_asn,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of CreateVpnGateway.
    #
    # @!attribute [rw] vpn_gateway
    #   Information about the virtual private gateway.
    #   @return [Types::VpnGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreateVpnGatewayResult AWS API Documentation
    #
    class CreateVpnGatewayResult < Struct.new(
      :vpn_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # The maximum age for allowed images.
    #
    # @!attribute [rw] maximum_days_since_created
    #   The maximum number of days that have elapsed since the image was
    #   created. For example, a value of `300` allows images that were
    #   created within the last 300 days.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreationDateCondition AWS API Documentation
    #
    class CreationDateCondition < Struct.new(
      :maximum_days_since_created)
      SENSITIVE = []
      include Aws::Structure
    end

    # The maximum age for allowed images.
    #
    # @!attribute [rw] maximum_days_since_created
    #   The maximum number of days that have elapsed since the image was
    #   created. For example, a value of `300` allows images that were
    #   created within the last 300 days.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreationDateConditionRequest AWS API Documentation
    #
    class CreationDateConditionRequest < Struct.new(
      :maximum_days_since_created)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the credit option for CPU usage of a T instance.
    #
    # @!attribute [rw] cpu_credits
    #   The credit option for CPU usage of a T instance.
    #
    #   Valid values: `standard` \| `unlimited`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreditSpecification AWS API Documentation
    #
    class CreditSpecification < Struct.new(
      :cpu_credits)
      SENSITIVE = []
      include Aws::Structure
    end

    # The credit option for CPU usage of a T instance.
    #
    # @!attribute [rw] cpu_credits
    #   The credit option for CPU usage of a T instance.
    #
    #   Valid values: `standard` \| `unlimited`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CreditSpecificationRequest AWS API Documentation
    #
    class CreditSpecificationRequest < Struct.new(
      :cpu_credits)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a customer gateway.
    #
    # @!attribute [rw] certificate_arn
    #   The Amazon Resource Name (ARN) for the customer gateway certificate.
    #   @return [String]
    #
    # @!attribute [rw] device_name
    #   The name of customer gateway device.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the customer gateway.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] bgp_asn_extended
    #   The customer gateway device's Border Gateway Protocol (BGP)
    #   Autonomous System Number (ASN).
    #
    #   Valid values: `2,147,483,648` to `4,294,967,295`
    #   @return [String]
    #
    # @!attribute [rw] customer_gateway_id
    #   The ID of the customer gateway.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the customer gateway (`pending | available |
    #   deleting | deleted`).
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of VPN connection the customer gateway supports
    #   (`ipsec.1`).
    #   @return [String]
    #
    # @!attribute [rw] ip_address
    #   The IP address for the customer gateway device's outside interface.
    #   The address must be static. If `OutsideIpAddressType` in your VPN
    #   connection options is set to `PrivateIpv4`, you can use an RFC6598
    #   or RFC1918 private IPv4 address. If `OutsideIpAddressType` is set to
    #   `PublicIpv4`, you can use a public IPv4 address. If
    #   `OutsideIpAddressType` is set to `Ipv6`, you can use a public IPv6
    #   address.
    #   @return [String]
    #
    # @!attribute [rw] bgp_asn
    #   The customer gateway device's Border Gateway Protocol (BGP)
    #   Autonomous System Number (ASN).
    #
    #   Valid values: `1` to `2,147,483,647`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/CustomerGateway AWS API Documentation
    #
    class CustomerGateway < Struct.new(
      :certificate_arn,
      :device_name,
      :tags,
      :bgp_asn_extended,
      :customer_gateway_id,
      :state,
      :type,
      :ip_address,
      :bgp_asn)
      SENSITIVE = []
      include Aws::Structure
    end

    # A query used for retrieving network health data.
    #
    # @!attribute [rw] id
    #   A user-defined ID associated with a data query that's returned in
    #   the `dataResponse` identifying the query. For example, if you set
    #   the Id to `MyQuery01`in the query, the `dataResponse` identifies the
    #   query as `MyQuery01`.
    #   @return [String]
    #
    # @!attribute [rw] source
    #   The Region or Availability Zone that's the source for the data
    #   query. For example, `us-east-1`.
    #   @return [String]
    #
    # @!attribute [rw] destination
    #   The Region or Availability Zone that's the target for the data
    #   query. For example, `eu-north-1`.
    #   @return [String]
    #
    # @!attribute [rw] metric
    #   The metric used for the network performance request.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The metric data aggregation period, `p50`, between the specified
    #   `startDate` and `endDate`. For example, a metric of `five_minutes`
    #   is the median of all the data points gathered within those five
    #   minutes. `p50` is the only supported metric.
    #   @return [String]
    #
    # @!attribute [rw] period
    #   The aggregation period used for the data query.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DataQuery AWS API Documentation
    #
    class DataQuery < Struct.new(
      :id,
      :source,
      :destination,
      :metric,
      :statistic,
      :period)
      SENSITIVE = []
      include Aws::Structure
    end

    # The response to a `DataQuery`.
    #
    # @!attribute [rw] id
    #   The ID passed in the `DataQuery`.
    #   @return [String]
    #
    # @!attribute [rw] source
    #   The Region or Availability Zone that's the source for the data
    #   query. For example, `us-east-1`.
    #   @return [String]
    #
    # @!attribute [rw] destination
    #   The Region or Availability Zone that's the destination for the data
    #   query. For example, `eu-west-1`.
    #   @return [String]
    #
    # @!attribute [rw] metric
    #   The metric used for the network performance request.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic used for the network performance request.
    #   @return [String]
    #
    # @!attribute [rw] period
    #   The period used for the network performance request.
    #   @return [String]
    #
    # @!attribute [rw] metric_points
    #   A list of `MetricPoint` objects.
    #   @return [Array<Types::MetricPoint>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DataResponse AWS API Documentation
    #
    class DataResponse < Struct.new(
      :id,
      :source,
      :destination,
      :metric,
      :statistic,
      :period,
      :metric_points)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the metadata of the account status report.
    #
    # @!attribute [rw] report_id
    #   The ID of the report.
    #   @return [String]
    #
    # @!attribute [rw] s3_bucket
    #   The name of the Amazon S3 bucket where the report is located.
    #   @return [String]
    #
    # @!attribute [rw] s3_prefix
    #   The prefix for your S3 object.
    #   @return [String]
    #
    # @!attribute [rw] target_id
    #   The root ID, organizational unit ID, or account ID.
    #
    #   Format:
    #
    #   * For root: `r-ab12`
    #
    #   * For OU: `ou-ab12-cdef1234`
    #
    #   * For account: `123456789012`
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The time when the report generation started.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The time when the report generation ended.
    #   @return [Time]
    #
    # @!attribute [rw] status
    #   The current status of the report.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the report.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeclarativePoliciesReport AWS API Documentation
    #
    class DeclarativePoliciesReport < Struct.new(
      :report_id,
      :s3_bucket,
      :s3_prefix,
      :target_id,
      :start_time,
      :end_time,
      :status,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] carrier_gateway_id
    #   The ID of the carrier gateway.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCarrierGatewayRequest AWS API Documentation
    #
    class DeleteCarrierGatewayRequest < Struct.new(
      :carrier_gateway_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] carrier_gateway
    #   Information about the carrier gateway.
    #   @return [Types::CarrierGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCarrierGatewayResult AWS API Documentation
    #
    class DeleteCarrierGatewayResult < Struct.new(
      :carrier_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN to be deleted.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnEndpointRequest AWS API Documentation
    #
    class DeleteClientVpnEndpointRequest < Struct.new(
      :client_vpn_endpoint_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] status
    #   The current state of the Client VPN endpoint.
    #   @return [Types::ClientVpnEndpointStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnEndpointResult AWS API Documentation
    #
    class DeleteClientVpnEndpointResult < Struct.new(
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint from which the route is to be
    #   deleted.
    #   @return [String]
    #
    # @!attribute [rw] target_vpc_subnet_id
    #   The ID of the target subnet used by the route.
    #   @return [String]
    #
    # @!attribute [rw] destination_cidr_block
    #   The IPv4 address range, in CIDR notation, of the route to be
    #   deleted.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnRouteRequest AWS API Documentation
    #
    class DeleteClientVpnRouteRequest < Struct.new(
      :client_vpn_endpoint_id,
      :target_vpc_subnet_id,
      :destination_cidr_block,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] status
    #   The current state of the route.
    #   @return [Types::ClientVpnRouteStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteClientVpnRouteResult AWS API Documentation
    #
    class DeleteClientVpnRouteResult < Struct.new(
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cidr
    #   A customer-owned IP address range that you want to delete.
    #   @return [String]
    #
    # @!attribute [rw] coip_pool_id
    #   The ID of the customer-owned address pool.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCoipCidrRequest AWS API Documentation
    #
    class DeleteCoipCidrRequest < Struct.new(
      :cidr,
      :coip_pool_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] coip_cidr
    #   Information about a range of customer-owned IP addresses.
    #   @return [Types::CoipCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCoipCidrResult AWS API Documentation
    #
    class DeleteCoipCidrResult < Struct.new(
      :coip_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] coip_pool_id
    #   The ID of the CoIP pool that you want to delete.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCoipPoolRequest AWS API Documentation
    #
    class DeleteCoipPoolRequest < Struct.new(
      :coip_pool_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] coip_pool
    #   Information about the CoIP address pool.
    #   @return [Types::CoipPool]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCoipPoolResult AWS API Documentation
    #
    class DeleteCoipPoolResult < Struct.new(
      :coip_pool)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DeleteCustomerGateway.
    #
    # @!attribute [rw] customer_gateway_id
    #   The ID of the customer gateway.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteCustomerGatewayRequest AWS API Documentation
    #
    class DeleteCustomerGatewayRequest < Struct.new(
      :customer_gateway_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dhcp_options_id
    #   The ID of the DHCP options set.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteDhcpOptionsRequest AWS API Documentation
    #
    class DeleteDhcpOptionsRequest < Struct.new(
      :dhcp_options_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] egress_only_internet_gateway_id
    #   The ID of the egress-only internet gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGatewayRequest AWS API Documentation
    #
    class DeleteEgressOnlyInternetGatewayRequest < Struct.new(
      :dry_run,
      :egress_only_internet_gateway_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return_code
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteEgressOnlyInternetGatewayResult AWS API Documentation
    #
    class DeleteEgressOnlyInternetGatewayResult < Struct.new(
      :return_code)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an EC2 Fleet error.
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The description for the error code.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFleetError AWS API Documentation
    #
    class DeleteFleetError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an EC2 Fleet that was not successfully deleted.
    #
    # @!attribute [rw] error
    #   The error.
    #   @return [Types::DeleteFleetError]
    #
    # @!attribute [rw] fleet_id
    #   The ID of the EC2 Fleet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFleetErrorItem AWS API Documentation
    #
    class DeleteFleetErrorItem < Struct.new(
      :error,
      :fleet_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an EC2 Fleet that was successfully deleted.
    #
    # @!attribute [rw] current_fleet_state
    #   The current state of the EC2 Fleet.
    #   @return [String]
    #
    # @!attribute [rw] previous_fleet_state
    #   The previous state of the EC2 Fleet.
    #   @return [String]
    #
    # @!attribute [rw] fleet_id
    #   The ID of the EC2 Fleet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFleetSuccessItem AWS API Documentation
    #
    class DeleteFleetSuccessItem < Struct.new(
      :current_fleet_state,
      :previous_fleet_state,
      :fleet_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] fleet_ids
    #   The IDs of the EC2 Fleets.
    #
    #   Constraints: In a single request, you can specify up to 25 `instant`
    #   fleet IDs and up to 100 `maintain` or `request` fleet IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] terminate_instances
    #   Indicates whether to terminate the associated instances when the EC2
    #   Fleet is deleted. The default is to terminate the instances.
    #
    #   To let the instances continue to run after the EC2 Fleet is deleted,
    #   specify `no-terminate-instances`. Supported only for fleets of type
    #   `maintain` and `request`.
    #
    #   For `instant` fleets, you cannot specify `NoTerminateInstances`. A
    #   deleted `instant` fleet with running instances is not supported.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFleetsRequest AWS API Documentation
    #
    class DeleteFleetsRequest < Struct.new(
      :dry_run,
      :fleet_ids,
      :terminate_instances)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successful_fleet_deletions
    #   Information about the EC2 Fleets that are successfully deleted.
    #   @return [Array<Types::DeleteFleetSuccessItem>]
    #
    # @!attribute [rw] unsuccessful_fleet_deletions
    #   Information about the EC2 Fleets that are not successfully deleted.
    #   @return [Array<Types::DeleteFleetErrorItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFleetsResult AWS API Documentation
    #
    class DeleteFleetsResult < Struct.new(
      :successful_fleet_deletions,
      :unsuccessful_fleet_deletions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] flow_log_ids
    #   One or more flow log IDs.
    #
    #   Constraint: Maximum of 1000 flow log IDs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogsRequest AWS API Documentation
    #
    class DeleteFlowLogsRequest < Struct.new(
      :dry_run,
      :flow_log_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] unsuccessful
    #   Information about the flow logs that could not be deleted
    #   successfully.
    #   @return [Array<Types::UnsuccessfulItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFlowLogsResult AWS API Documentation
    #
    class DeleteFlowLogsResult < Struct.new(
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] fpga_image_id
    #   The ID of the AFI.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFpgaImageRequest AWS API Documentation
    #
    class DeleteFpgaImageRequest < Struct.new(
      :dry_run,
      :fpga_image_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Is `true` if the request succeeds, and an error otherwise.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteFpgaImageResult AWS API Documentation
    #
    class DeleteFpgaImageResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] report_id
    #   The ID of the report to delete.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteImageUsageReportRequest AWS API Documentation
    #
    class DeleteImageUsageReportRequest < Struct.new(
      :report_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteImageUsageReportResult AWS API Documentation
    #
    class DeleteImageUsageReportResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_connect_endpoint_id
    #   The ID of the EC2 Instance Connect Endpoint to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInstanceConnectEndpointRequest AWS API Documentation
    #
    class DeleteInstanceConnectEndpointRequest < Struct.new(
      :dry_run,
      :instance_connect_endpoint_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_connect_endpoint
    #   Information about the EC2 Instance Connect Endpoint.
    #   @return [Types::Ec2InstanceConnectEndpoint]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInstanceConnectEndpointResult AWS API Documentation
    #
    class DeleteInstanceConnectEndpointResult < Struct.new(
      :instance_connect_endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] force_delete
    #   Specify `true` to force delete the event window. Use the force
    #   delete parameter if the event window is currently associated with
    #   targets.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_event_window_id
    #   The ID of the event window.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInstanceEventWindowRequest AWS API Documentation
    #
    class DeleteInstanceEventWindowRequest < Struct.new(
      :dry_run,
      :force_delete,
      :instance_event_window_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_event_window_state
    #   The state of the event window.
    #   @return [Types::InstanceEventWindowStateChange]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInstanceEventWindowResult AWS API Documentation
    #
    class DeleteInstanceEventWindowResult < Struct.new(
      :instance_event_window_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] internet_gateway_id
    #   The ID of the internet gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteInternetGatewayRequest AWS API Documentation
    #
    class DeleteInternetGatewayRequest < Struct.new(
      :dry_run,
      :internet_gateway_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_external_resource_verification_token_id
    #   The token ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamExternalResourceVerificationTokenRequest AWS API Documentation
    #
    class DeleteIpamExternalResourceVerificationTokenRequest < Struct.new(
      :dry_run,
      :ipam_external_resource_verification_token_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_external_resource_verification_token
    #   The verification token.
    #   @return [Types::IpamExternalResourceVerificationToken]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamExternalResourceVerificationTokenResult AWS API Documentation
    #
    class DeleteIpamExternalResourceVerificationTokenResult < Struct.new(
      :ipam_external_resource_verification_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the pool to delete.
    #   @return [String]
    #
    # @!attribute [rw] cascade
    #   Enables you to quickly delete an IPAM pool and all resources within
    #   that pool, including provisioned CIDRs, allocations, and other
    #   pools.
    #
    #   You can only use this option to delete pools in the private scope or
    #   pools in the public scope with a source resource. A source resource
    #   is a resource used to provision CIDRs to a resource planning pool.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamPoolRequest AWS API Documentation
    #
    class DeleteIpamPoolRequest < Struct.new(
      :dry_run,
      :ipam_pool_id,
      :cascade)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_pool
    #   Information about the results of the deletion.
    #   @return [Types::IpamPool]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamPoolResult AWS API Documentation
    #
    class DeleteIpamPoolResult < Struct.new(
      :ipam_pool)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_id
    #   The ID of the IPAM to delete.
    #   @return [String]
    #
    # @!attribute [rw] cascade
    #   Enables you to quickly delete an IPAM, private scopes, pools in
    #   private scopes, and any allocations in the pools in private scopes.
    #   You cannot delete the IPAM with this option if there is a pool in
    #   your public scope. If you use this option, IPAM does the following:
    #
    #   * Deallocates any CIDRs allocated to VPC resources (such as VPCs) in
    #     pools in private scopes.
    #
    #     <note markdown="1"> No VPC resources are deleted as a result of enabling this option.
    #     The CIDR associated with the resource will no longer be allocated
    #     from an IPAM pool, but the CIDR itself will remain unchanged.
    #
    #      </note>
    #
    #   * Deprovisions all IPv4 CIDRs provisioned to IPAM pools in private
    #     scopes.
    #
    #   * Deletes all IPAM pools in private scopes.
    #
    #   * Deletes all non-default private scopes in the IPAM.
    #
    #   * Deletes the default public and private scopes and the IPAM.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamRequest AWS API Documentation
    #
    class DeleteIpamRequest < Struct.new(
      :dry_run,
      :ipam_id,
      :cascade)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   The IPAM resource discovery ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamResourceDiscoveryRequest AWS API Documentation
    #
    class DeleteIpamResourceDiscoveryRequest < Struct.new(
      :dry_run,
      :ipam_resource_discovery_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_resource_discovery
    #   The IPAM resource discovery.
    #   @return [Types::IpamResourceDiscovery]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamResourceDiscoveryResult AWS API Documentation
    #
    class DeleteIpamResourceDiscoveryResult < Struct.new(
      :ipam_resource_discovery)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam
    #   Information about the results of the deletion.
    #   @return [Types::Ipam]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamResult AWS API Documentation
    #
    class DeleteIpamResult < Struct.new(
      :ipam)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_scope_id
    #   The ID of the scope to delete.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamScopeRequest AWS API Documentation
    #
    class DeleteIpamScopeRequest < Struct.new(
      :dry_run,
      :ipam_scope_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_scope
    #   Information about the results of the deletion.
    #   @return [Types::IpamScope]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteIpamScopeResult AWS API Documentation
    #
    class DeleteIpamScopeResult < Struct.new(
      :ipam_scope)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] key_name
    #   The name of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] key_pair_id
    #   The ID of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPairRequest AWS API Documentation
    #
    class DeleteKeyPairRequest < Struct.new(
      :key_name,
      :key_pair_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Is `true` if the request succeeds, and an error otherwise.
    #   @return [Boolean]
    #
    # @!attribute [rw] key_pair_id
    #   The ID of the key pair.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteKeyPairResult AWS API Documentation
    #
    class DeleteKeyPairResult < Struct.new(
      :return,
      :key_pair_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateRequest AWS API Documentation
    #
    class DeleteLaunchTemplateRequest < Struct.new(
      :dry_run,
      :launch_template_id,
      :launch_template_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] launch_template
    #   Information about the launch template.
    #   @return [Types::LaunchTemplate]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateResult AWS API Documentation
    #
    class DeleteLaunchTemplateResult < Struct.new(
      :launch_template)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @!attribute [rw] versions
    #   The version numbers of one or more launch template versions to
    #   delete. You can specify up to 200 launch template version numbers.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateVersionsRequest AWS API Documentation
    #
    class DeleteLaunchTemplateVersionsRequest < Struct.new(
      :dry_run,
      :launch_template_id,
      :launch_template_name,
      :versions)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a launch template version that could not be deleted.
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] version_number
    #   The version number of the launch template.
    #   @return [Integer]
    #
    # @!attribute [rw] response_error
    #   Information about the error.
    #   @return [Types::ResponseError]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateVersionsResponseErrorItem AWS API Documentation
    #
    class DeleteLaunchTemplateVersionsResponseErrorItem < Struct.new(
      :launch_template_id,
      :launch_template_name,
      :version_number,
      :response_error)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a launch template version that was successfully deleted.
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] version_number
    #   The version number of the launch template.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateVersionsResponseSuccessItem AWS API Documentation
    #
    class DeleteLaunchTemplateVersionsResponseSuccessItem < Struct.new(
      :launch_template_id,
      :launch_template_name,
      :version_number)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successfully_deleted_launch_template_versions
    #   Information about the launch template versions that were
    #   successfully deleted.
    #   @return [Array<Types::DeleteLaunchTemplateVersionsResponseSuccessItem>]
    #
    # @!attribute [rw] unsuccessfully_deleted_launch_template_versions
    #   Information about the launch template versions that could not be
    #   deleted.
    #   @return [Array<Types::DeleteLaunchTemplateVersionsResponseErrorItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLaunchTemplateVersionsResult AWS API Documentation
    #
    class DeleteLaunchTemplateVersionsResult < Struct.new(
      :successfully_deleted_launch_template_versions,
      :unsuccessfully_deleted_launch_template_versions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] destination_cidr_block
    #   The CIDR range for the route. This must match the CIDR for the route
    #   exactly.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] destination_prefix_list_id
    #   Use a prefix list in place of `DestinationCidrBlock`. You cannot use
    #   `DestinationPrefixListId` and `DestinationCidrBlock` in the same
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayRouteRequest AWS API Documentation
    #
    class DeleteLocalGatewayRouteRequest < Struct.new(
      :destination_cidr_block,
      :local_gateway_route_table_id,
      :dry_run,
      :destination_prefix_list_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route
    #   Information about the route.
    #   @return [Types::LocalGatewayRoute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayRouteResult AWS API Documentation
    #
    class DeleteLocalGatewayRouteResult < Struct.new(
      :route)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayRouteTableRequest AWS API Documentation
    #
    class DeleteLocalGatewayRouteTableRequest < Struct.new(
      :local_gateway_route_table_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table
    #   Information about the local gateway route table.
    #   @return [Types::LocalGatewayRouteTable]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayRouteTableResult AWS API Documentation
    #
    class DeleteLocalGatewayRouteTableResult < Struct.new(
      :local_gateway_route_table)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_virtual_interface_group_association_id
    #   The ID of the local gateway route table virtual interface group
    #   association.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationRequest AWS API Documentation
    #
    class DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationRequest < Struct.new(
      :local_gateway_route_table_virtual_interface_group_association_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_virtual_interface_group_association
    #   Information about the association.
    #   @return [Types::LocalGatewayRouteTableVirtualInterfaceGroupAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResult AWS API Documentation
    #
    class DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResult < Struct.new(
      :local_gateway_route_table_virtual_interface_group_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_vpc_association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayRouteTableVpcAssociationRequest AWS API Documentation
    #
    class DeleteLocalGatewayRouteTableVpcAssociationRequest < Struct.new(
      :local_gateway_route_table_vpc_association_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_vpc_association
    #   Information about the association.
    #   @return [Types::LocalGatewayRouteTableVpcAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayRouteTableVpcAssociationResult AWS API Documentation
    #
    class DeleteLocalGatewayRouteTableVpcAssociationResult < Struct.new(
      :local_gateway_route_table_vpc_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface_group_id
    #   The ID of the local gateway virtual interface group to delete.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayVirtualInterfaceGroupRequest AWS API Documentation
    #
    class DeleteLocalGatewayVirtualInterfaceGroupRequest < Struct.new(
      :local_gateway_virtual_interface_group_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface_group
    #   Information about the deleted local gateway virtual interface group.
    #   @return [Types::LocalGatewayVirtualInterfaceGroup]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayVirtualInterfaceGroupResult AWS API Documentation
    #
    class DeleteLocalGatewayVirtualInterfaceGroupResult < Struct.new(
      :local_gateway_virtual_interface_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface_id
    #   The ID of the local virtual interface to delete.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayVirtualInterfaceRequest AWS API Documentation
    #
    class DeleteLocalGatewayVirtualInterfaceRequest < Struct.new(
      :local_gateway_virtual_interface_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface
    #   Information about the deleted local gateway virtual interface.
    #   @return [Types::LocalGatewayVirtualInterface]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteLocalGatewayVirtualInterfaceResult AWS API Documentation
    #
    class DeleteLocalGatewayVirtualInterfaceResult < Struct.new(
      :local_gateway_virtual_interface)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteManagedPrefixListRequest AWS API Documentation
    #
    class DeleteManagedPrefixListRequest < Struct.new(
      :dry_run,
      :prefix_list_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] prefix_list
    #   Information about the prefix list.
    #   @return [Types::ManagedPrefixList]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteManagedPrefixListResult AWS API Documentation
    #
    class DeleteManagedPrefixListResult < Struct.new(
      :prefix_list)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGatewayRequest AWS API Documentation
    #
    class DeleteNatGatewayRequest < Struct.new(
      :dry_run,
      :nat_gateway_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNatGatewayResult AWS API Documentation
    #
    class DeleteNatGatewayResult < Struct.new(
      :nat_gateway_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_acl_id
    #   The ID of the network ACL.
    #   @return [String]
    #
    # @!attribute [rw] rule_number
    #   The rule number of the entry to delete.
    #   @return [Integer]
    #
    # @!attribute [rw] egress
    #   Indicates whether the rule is an egress rule.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclEntryRequest AWS API Documentation
    #
    class DeleteNetworkAclEntryRequest < Struct.new(
      :dry_run,
      :network_acl_id,
      :rule_number,
      :egress)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_acl_id
    #   The ID of the network ACL.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkAclRequest AWS API Documentation
    #
    class DeleteNetworkAclRequest < Struct.new(
      :dry_run,
      :network_acl_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_analysis_id
    #   The ID of the Network Access Scope analysis.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInsightsAccessScopeAnalysisRequest AWS API Documentation
    #
    class DeleteNetworkInsightsAccessScopeAnalysisRequest < Struct.new(
      :network_insights_access_scope_analysis_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_analysis_id
    #   The ID of the Network Access Scope analysis.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInsightsAccessScopeAnalysisResult AWS API Documentation
    #
    class DeleteNetworkInsightsAccessScopeAnalysisResult < Struct.new(
      :network_insights_access_scope_analysis_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_insights_access_scope_id
    #   The ID of the Network Access Scope.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInsightsAccessScopeRequest AWS API Documentation
    #
    class DeleteNetworkInsightsAccessScopeRequest < Struct.new(
      :dry_run,
      :network_insights_access_scope_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_id
    #   The ID of the Network Access Scope.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInsightsAccessScopeResult AWS API Documentation
    #
    class DeleteNetworkInsightsAccessScopeResult < Struct.new(
      :network_insights_access_scope_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_insights_analysis_id
    #   The ID of the network insights analysis.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInsightsAnalysisRequest AWS API Documentation
    #
    class DeleteNetworkInsightsAnalysisRequest < Struct.new(
      :dry_run,
      :network_insights_analysis_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_analysis_id
    #   The ID of the network insights analysis.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInsightsAnalysisResult AWS API Documentation
    #
    class DeleteNetworkInsightsAnalysisResult < Struct.new(
      :network_insights_analysis_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_insights_path_id
    #   The ID of the path.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInsightsPathRequest AWS API Documentation
    #
    class DeleteNetworkInsightsPathRequest < Struct.new(
      :dry_run,
      :network_insights_path_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_path_id
    #   The ID of the path.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInsightsPathResult AWS API Documentation
    #
    class DeleteNetworkInsightsPathResult < Struct.new(
      :network_insights_path_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DeleteNetworkInterfacePermission.
    #
    # @!attribute [rw] network_interface_permission_id
    #   The ID of the network interface permission.
    #   @return [String]
    #
    # @!attribute [rw] force
    #   Specify `true` to remove the permission even if the network
    #   interface is attached to an instance.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterfacePermissionRequest AWS API Documentation
    #
    class DeleteNetworkInterfacePermissionRequest < Struct.new(
      :network_interface_permission_id,
      :force,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output for DeleteNetworkInterfacePermission.
    #
    # @!attribute [rw] return
    #   Returns `true` if the request succeeds, otherwise returns an error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterfacePermissionResult AWS API Documentation
    #
    class DeleteNetworkInterfacePermissionResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DeleteNetworkInterface.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteNetworkInterfaceRequest AWS API Documentation
    #
    class DeleteNetworkInterfaceRequest < Struct.new(
      :dry_run,
      :network_interface_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_name
    #   The name of the placement group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePlacementGroupRequest AWS API Documentation
    #
    class DeletePlacementGroupRequest < Struct.new(
      :dry_run,
      :group_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] pool_id
    #   The ID of the public IPv4 pool you want to delete.
    #   @return [String]
    #
    # @!attribute [rw] network_border_group
    #   The Availability Zone (AZ) or Local Zone (LZ) network border group
    #   that the resource that the IP address is assigned to is in. Defaults
    #   to an AZ network border group. For more information on available
    #   Local Zones, see [Local Zone availability][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#byoip-zone-avail
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePublicIpv4PoolRequest AWS API Documentation
    #
    class DeletePublicIpv4PoolRequest < Struct.new(
      :dry_run,
      :pool_id,
      :network_border_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return_value
    #   Information about the result of deleting the public IPv4 pool.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeletePublicIpv4PoolResult AWS API Documentation
    #
    class DeletePublicIpv4PoolResult < Struct.new(
      :return_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the error for a Reserved Instance whose queued purchase
    # could not be deleted.
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The error message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteQueuedReservedInstancesError AWS API Documentation
    #
    class DeleteQueuedReservedInstancesError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] reserved_instances_ids
    #   The IDs of the Reserved Instances.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteQueuedReservedInstancesRequest AWS API Documentation
    #
    class DeleteQueuedReservedInstancesRequest < Struct.new(
      :dry_run,
      :reserved_instances_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successful_queued_purchase_deletions
    #   Information about the queued purchases that were successfully
    #   deleted.
    #   @return [Array<Types::SuccessfulQueuedPurchaseDeletion>]
    #
    # @!attribute [rw] failed_queued_purchase_deletions
    #   Information about the queued purchases that could not be deleted.
    #   @return [Array<Types::FailedQueuedPurchaseDeletion>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteQueuedReservedInstancesResult AWS API Documentation
    #
    class DeleteQueuedReservedInstancesResult < Struct.new(
      :successful_queued_purchase_deletions,
      :failed_queued_purchase_deletions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] destination_prefix_list_id
    #   The ID of the prefix list for the route.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @!attribute [rw] destination_cidr_block
    #   The IPv4 CIDR range for the route. The value you specify must match
    #   the CIDR for the route exactly.
    #   @return [String]
    #
    # @!attribute [rw] destination_ipv_6_cidr_block
    #   The IPv6 CIDR range for the route. The value you specify must match
    #   the CIDR for the route exactly.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteRequest AWS API Documentation
    #
    class DeleteRouteRequest < Struct.new(
      :destination_prefix_list_id,
      :dry_run,
      :route_table_id,
      :destination_cidr_block,
      :destination_ipv_6_cidr_block)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_endpoint_id
    #   The ID of the route server endpoint to delete.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteServerEndpointRequest AWS API Documentation
    #
    class DeleteRouteServerEndpointRequest < Struct.new(
      :route_server_endpoint_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_endpoint
    #   Information about the deleted route server endpoint.
    #   @return [Types::RouteServerEndpoint]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteServerEndpointResult AWS API Documentation
    #
    class DeleteRouteServerEndpointResult < Struct.new(
      :route_server_endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_peer_id
    #   The ID of the route server peer to delete.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteServerPeerRequest AWS API Documentation
    #
    class DeleteRouteServerPeerRequest < Struct.new(
      :route_server_peer_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_peer
    #   Information about the deleted route server peer.
    #   @return [Types::RouteServerPeer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteServerPeerResult AWS API Documentation
    #
    class DeleteRouteServerPeerResult < Struct.new(
      :route_server_peer)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The ID of the route server to delete.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteServerRequest AWS API Documentation
    #
    class DeleteRouteServerRequest < Struct.new(
      :route_server_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server
    #   Information about the deleted route server.
    #   @return [Types::RouteServer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteServerResult AWS API Documentation
    #
    class DeleteRouteServerResult < Struct.new(
      :route_server)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteRouteTableRequest AWS API Documentation
    #
    class DeleteRouteTableRequest < Struct.new(
      :dry_run,
      :route_table_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   \[Default VPC\] The name of the security group. You can specify
    #   either the security group name or the security group ID. For
    #   security groups in a nondefault VPC, you must specify the security
    #   group ID.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroupRequest AWS API Documentation
    #
    class DeleteSecurityGroupRequest < Struct.new(
      :group_id,
      :group_name,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_id
    #   The ID of the deleted security group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSecurityGroupResult AWS API Documentation
    #
    class DeleteSecurityGroupResult < Struct.new(
      :return,
      :group_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the EBS snapshot.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshotRequest AWS API Documentation
    #
    class DeleteSnapshotRequest < Struct.new(
      :snapshot_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # The snapshot ID and its deletion result code.
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] return_code
    #   The result code from the snapshot deletion attempt. Possible values:
    #
    #   * `success` - The snapshot was successfully deleted.
    #
    #   * `skipped` - The snapshot was not deleted because it's associated
    #     with other AMIs.
    #
    #   * `missing-permissions` - The snapshot was not deleted because the
    #     role lacks `DeleteSnapshot` permissions. For more information, see
    #     [How Amazon EBS works with IAM][1].
    #
    #   * `internal-error` - The snapshot was not deleted due to a server
    #     error.
    #
    #   * `client-error` - The snapshot was not deleted due to a client
    #     configuration error.
    #
    #   For details about an error, check the `DeleteSnapshot` event in the
    #   CloudTrail event history. For more information, see [View event
    #   history][2] in the *Amazon Web Services CloudTrail User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/security_iam_service-with-iam.html
    #   [2]: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/tutorial-event-history.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSnapshotReturnCode AWS API Documentation
    #
    class DeleteSnapshotReturnCode < Struct.new(
      :snapshot_id,
      :return_code)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DeleteSpotDatafeedSubscription.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSpotDatafeedSubscriptionRequest AWS API Documentation
    #
    class DeleteSpotDatafeedSubscriptionRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] subnet_cidr_reservation_id
    #   The ID of the subnet CIDR reservation.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnetCidrReservationRequest AWS API Documentation
    #
    class DeleteSubnetCidrReservationRequest < Struct.new(
      :subnet_cidr_reservation_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] deleted_subnet_cidr_reservation
    #   Information about the deleted subnet CIDR reservation.
    #   @return [Types::SubnetCidrReservation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnetCidrReservationResult AWS API Documentation
    #
    class DeleteSubnetCidrReservationResult < Struct.new(
      :deleted_subnet_cidr_reservation)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteSubnetRequest AWS API Documentation
    #
    class DeleteSubnetRequest < Struct.new(
      :subnet_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] resources
    #   The IDs of the resources, separated by spaces.
    #
    #   Constraints: Up to 1000 resource IDs. We recommend breaking up this
    #   request into smaller batches.
    #   @return [Array<String>]
    #
    # @!attribute [rw] tags
    #   The tags to delete. Specify a tag key and an optional tag value to
    #   delete specific tags. If you specify a tag key without a tag value,
    #   we delete any tag with this key regardless of its value. If you
    #   specify a tag key with an empty string as the tag value, we delete
    #   the tag only if its value is an empty string.
    #
    #   If you omit this parameter, we delete all user-defined tags for the
    #   specified resources. We do not delete Amazon Web Services-generated
    #   tags (tags that have the `aws:` prefix).
    #
    #   Constraints: Up to 1000 tags.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTagsRequest AWS API Documentation
    #
    class DeleteTagsRequest < Struct.new(
      :dry_run,
      :resources,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_id
    #   The ID of the Traffic Mirror filter.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilterRequest AWS API Documentation
    #
    class DeleteTrafficMirrorFilterRequest < Struct.new(
      :traffic_mirror_filter_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_id
    #   The ID of the Traffic Mirror filter.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilterResult AWS API Documentation
    #
    class DeleteTrafficMirrorFilterResult < Struct.new(
      :traffic_mirror_filter_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_rule_id
    #   The ID of the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilterRuleRequest AWS API Documentation
    #
    class DeleteTrafficMirrorFilterRuleRequest < Struct.new(
      :traffic_mirror_filter_rule_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_rule_id
    #   The ID of the deleted Traffic Mirror rule.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorFilterRuleResult AWS API Documentation
    #
    class DeleteTrafficMirrorFilterRuleResult < Struct.new(
      :traffic_mirror_filter_rule_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_session_id
    #   The ID of the Traffic Mirror session.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorSessionRequest AWS API Documentation
    #
    class DeleteTrafficMirrorSessionRequest < Struct.new(
      :traffic_mirror_session_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_session_id
    #   The ID of the deleted Traffic Mirror session.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorSessionResult AWS API Documentation
    #
    class DeleteTrafficMirrorSessionResult < Struct.new(
      :traffic_mirror_session_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_target_id
    #   The ID of the Traffic Mirror target.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorTargetRequest AWS API Documentation
    #
    class DeleteTrafficMirrorTargetRequest < Struct.new(
      :traffic_mirror_target_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_target_id
    #   The ID of the deleted Traffic Mirror target.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTrafficMirrorTargetResult AWS API Documentation
    #
    class DeleteTrafficMirrorTargetResult < Struct.new(
      :traffic_mirror_target_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_connect_peer_id
    #   The ID of the Connect peer.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayConnectPeerRequest AWS API Documentation
    #
    class DeleteTransitGatewayConnectPeerRequest < Struct.new(
      :transit_gateway_connect_peer_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_connect_peer
    #   Information about the deleted Connect peer.
    #   @return [Types::TransitGatewayConnectPeer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayConnectPeerResult AWS API Documentation
    #
    class DeleteTransitGatewayConnectPeerResult < Struct.new(
      :transit_gateway_connect_peer)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the Connect attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayConnectRequest AWS API Documentation
    #
    class DeleteTransitGatewayConnectRequest < Struct.new(
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_connect
    #   Information about the deleted Connect attachment.
    #   @return [Types::TransitGatewayConnect]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayConnectResult AWS API Documentation
    #
    class DeleteTransitGatewayConnectResult < Struct.new(
      :transit_gateway_connect)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayMulticastDomainRequest AWS API Documentation
    #
    class DeleteTransitGatewayMulticastDomainRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain
    #   Information about the deleted transit gateway multicast domain.
    #   @return [Types::TransitGatewayMulticastDomain]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayMulticastDomainResult AWS API Documentation
    #
    class DeleteTransitGatewayMulticastDomainResult < Struct.new(
      :transit_gateway_multicast_domain)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway peering attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayPeeringAttachmentRequest AWS API Documentation
    #
    class DeleteTransitGatewayPeeringAttachmentRequest < Struct.new(
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_peering_attachment
    #   The transit gateway peering attachment.
    #   @return [Types::TransitGatewayPeeringAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayPeeringAttachmentResult AWS API Documentation
    #
    class DeleteTransitGatewayPeeringAttachmentResult < Struct.new(
      :transit_gateway_peering_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_table_id
    #   The transit gateway policy table to delete.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayPolicyTableRequest AWS API Documentation
    #
    class DeleteTransitGatewayPolicyTableRequest < Struct.new(
      :transit_gateway_policy_table_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_table
    #   Provides details about the deleted transit gateway policy table.
    #   @return [Types::TransitGatewayPolicyTable]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayPolicyTableResult AWS API Documentation
    #
    class DeleteTransitGatewayPolicyTableResult < Struct.new(
      :transit_gateway_policy_table)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayPrefixListReferenceRequest AWS API Documentation
    #
    class DeleteTransitGatewayPrefixListReferenceRequest < Struct.new(
      :transit_gateway_route_table_id,
      :prefix_list_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_prefix_list_reference
    #   Information about the deleted prefix list reference.
    #   @return [Types::TransitGatewayPrefixListReference]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayPrefixListReferenceResult AWS API Documentation
    #
    class DeleteTransitGatewayPrefixListReferenceResult < Struct.new(
      :transit_gateway_prefix_list_reference)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRequest AWS API Documentation
    #
    class DeleteTransitGatewayRequest < Struct.new(
      :transit_gateway_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway
    #   Information about the deleted transit gateway.
    #   @return [Types::TransitGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayResult AWS API Documentation
    #
    class DeleteTransitGatewayResult < Struct.new(
      :transit_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] destination_cidr_block
    #   The CIDR range for the route. This must match the CIDR for the route
    #   exactly.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteRequest AWS API Documentation
    #
    class DeleteTransitGatewayRouteRequest < Struct.new(
      :transit_gateway_route_table_id,
      :destination_cidr_block,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route
    #   Information about the route.
    #   @return [Types::TransitGatewayRoute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteResult AWS API Documentation
    #
    class DeleteTransitGatewayRouteResult < Struct.new(
      :route)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_announcement_id
    #   The transit gateway route table ID that's being deleted.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteTableAnnouncementRequest AWS API Documentation
    #
    class DeleteTransitGatewayRouteTableAnnouncementRequest < Struct.new(
      :transit_gateway_route_table_announcement_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_announcement
    #   Provides details about a deleted transit gateway route table.
    #   @return [Types::TransitGatewayRouteTableAnnouncement]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteTableAnnouncementResult AWS API Documentation
    #
    class DeleteTransitGatewayRouteTableAnnouncementResult < Struct.new(
      :transit_gateway_route_table_announcement)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteTableRequest AWS API Documentation
    #
    class DeleteTransitGatewayRouteTableRequest < Struct.new(
      :transit_gateway_route_table_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table
    #   Information about the deleted transit gateway route table.
    #   @return [Types::TransitGatewayRouteTable]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayRouteTableResult AWS API Documentation
    #
    class DeleteTransitGatewayRouteTableResult < Struct.new(
      :transit_gateway_route_table)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayVpcAttachmentRequest AWS API Documentation
    #
    class DeleteTransitGatewayVpcAttachmentRequest < Struct.new(
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_vpc_attachment
    #   Information about the deleted VPC attachment.
    #   @return [Types::TransitGatewayVpcAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteTransitGatewayVpcAttachmentResult AWS API Documentation
    #
    class DeleteTransitGatewayVpcAttachmentResult < Struct.new(
      :transit_gateway_vpc_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint_id
    #   The ID of the Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVerifiedAccessEndpointRequest AWS API Documentation
    #
    class DeleteVerifiedAccessEndpointRequest < Struct.new(
      :verified_access_endpoint_id,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint
    #   Details about the Verified Access endpoint.
    #   @return [Types::VerifiedAccessEndpoint]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVerifiedAccessEndpointResult AWS API Documentation
    #
    class DeleteVerifiedAccessEndpointResult < Struct.new(
      :verified_access_endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_group_id
    #   The ID of the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVerifiedAccessGroupRequest AWS API Documentation
    #
    class DeleteVerifiedAccessGroupRequest < Struct.new(
      :verified_access_group_id,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_group
    #   Details about the Verified Access group.
    #   @return [Types::VerifiedAccessGroup]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVerifiedAccessGroupResult AWS API Documentation
    #
    class DeleteVerifiedAccessGroupResult < Struct.new(
      :verified_access_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVerifiedAccessInstanceRequest AWS API Documentation
    #
    class DeleteVerifiedAccessInstanceRequest < Struct.new(
      :verified_access_instance_id,
      :dry_run,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance
    #   Details about the Verified Access instance.
    #   @return [Types::VerifiedAccessInstance]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVerifiedAccessInstanceResult AWS API Documentation
    #
    class DeleteVerifiedAccessInstanceResult < Struct.new(
      :verified_access_instance)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_trust_provider_id
    #   The ID of the Verified Access trust provider.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVerifiedAccessTrustProviderRequest AWS API Documentation
    #
    class DeleteVerifiedAccessTrustProviderRequest < Struct.new(
      :verified_access_trust_provider_id,
      :dry_run,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_trust_provider
    #   Details about the Verified Access trust provider.
    #   @return [Types::VerifiedAccessTrustProvider]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVerifiedAccessTrustProviderResult AWS API Documentation
    #
    class DeleteVerifiedAccessTrustProviderResult < Struct.new(
      :verified_access_trust_provider)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVolumeRequest AWS API Documentation
    #
    class DeleteVolumeRequest < Struct.new(
      :volume_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] exclusion_id
    #   The ID of the exclusion.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcBlockPublicAccessExclusionRequest AWS API Documentation
    #
    class DeleteVpcBlockPublicAccessExclusionRequest < Struct.new(
      :dry_run,
      :exclusion_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_block_public_access_exclusion
    #   Details about an exclusion.
    #   @return [Types::VpcBlockPublicAccessExclusion]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcBlockPublicAccessExclusionResult AWS API Documentation
    #
    class DeleteVpcBlockPublicAccessExclusionResult < Struct.new(
      :vpc_block_public_access_exclusion)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] connection_notification_ids
    #   The IDs of the notifications.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointConnectionNotificationsRequest AWS API Documentation
    #
    class DeleteVpcEndpointConnectionNotificationsRequest < Struct.new(
      :dry_run,
      :connection_notification_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] unsuccessful
    #   Information about the notifications that could not be deleted
    #   successfully.
    #   @return [Array<Types::UnsuccessfulItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointConnectionNotificationsResult AWS API Documentation
    #
    class DeleteVpcEndpointConnectionNotificationsResult < Struct.new(
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_ids
    #   The IDs of the services.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointServiceConfigurationsRequest AWS API Documentation
    #
    class DeleteVpcEndpointServiceConfigurationsRequest < Struct.new(
      :dry_run,
      :service_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] unsuccessful
    #   Information about the service configurations that were not deleted,
    #   if applicable.
    #   @return [Array<Types::UnsuccessfulItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointServiceConfigurationsResult AWS API Documentation
    #
    class DeleteVpcEndpointServiceConfigurationsResult < Struct.new(
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_endpoint_ids
    #   The IDs of the VPC endpoints.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointsRequest AWS API Documentation
    #
    class DeleteVpcEndpointsRequest < Struct.new(
      :dry_run,
      :vpc_endpoint_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] unsuccessful
    #   Information about the VPC endpoints that were not successfully
    #   deleted.
    #   @return [Array<Types::UnsuccessfulItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcEndpointsResult AWS API Documentation
    #
    class DeleteVpcEndpointsResult < Struct.new(
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of the VPC peering connection.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnectionRequest AWS API Documentation
    #
    class DeleteVpcPeeringConnectionRequest < Struct.new(
      :dry_run,
      :vpc_peering_connection_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcPeeringConnectionResult AWS API Documentation
    #
    class DeleteVpcPeeringConnectionResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpcRequest AWS API Documentation
    #
    class DeleteVpcRequest < Struct.new(
      :vpc_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DeleteVpnConnection.
    #
    # @!attribute [rw] vpn_connection_id
    #   The ID of the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRequest AWS API Documentation
    #
    class DeleteVpnConnectionRequest < Struct.new(
      :vpn_connection_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DeleteVpnConnectionRoute.
    #
    # @!attribute [rw] destination_cidr_block
    #   The CIDR block associated with the local subnet of the customer
    #   network.
    #   @return [String]
    #
    # @!attribute [rw] vpn_connection_id
    #   The ID of the VPN connection.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnConnectionRouteRequest AWS API Documentation
    #
    class DeleteVpnConnectionRouteRequest < Struct.new(
      :destination_cidr_block,
      :vpn_connection_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DeleteVpnGateway.
    #
    # @!attribute [rw] vpn_gateway_id
    #   The ID of the virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeleteVpnGatewayRequest AWS API Documentation
    #
    class DeleteVpnGatewayRequest < Struct.new(
      :vpn_gateway_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # The maximum period since deprecation for allowed images.
    #
    # @!attribute [rw] maximum_days_since_deprecated
    #   The maximum number of days that have elapsed since the image was
    #   deprecated. When set to `0`, no deprecated images are allowed.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprecationTimeCondition AWS API Documentation
    #
    class DeprecationTimeCondition < Struct.new(
      :maximum_days_since_deprecated)
      SENSITIVE = []
      include Aws::Structure
    end

    # The maximum period since deprecation for allowed images.
    #
    # @!attribute [rw] maximum_days_since_deprecated
    #   The maximum number of days that have elapsed since the image was
    #   deprecated. Set to `0` to exclude all deprecated images.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprecationTimeConditionRequest AWS API Documentation
    #
    class DeprecationTimeConditionRequest < Struct.new(
      :maximum_days_since_deprecated)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cidr
    #   The address range, in CIDR notation. The prefix must be the same
    #   prefix that you specified when you provisioned the address range.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionByoipCidrRequest AWS API Documentation
    #
    class DeprovisionByoipCidrRequest < Struct.new(
      :cidr,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] byoip_cidr
    #   Information about the address range.
    #   @return [Types::ByoipCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionByoipCidrResult AWS API Documentation
    #
    class DeprovisionByoipCidrResult < Struct.new(
      :byoip_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_id
    #   The IPAM ID.
    #   @return [String]
    #
    # @!attribute [rw] asn
    #   An ASN.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionIpamByoasnRequest AWS API Documentation
    #
    class DeprovisionIpamByoasnRequest < Struct.new(
      :dry_run,
      :ipam_id,
      :asn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] byoasn
    #   An ASN and BYOIP CIDR association.
    #   @return [Types::Byoasn]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionIpamByoasnResult AWS API Documentation
    #
    class DeprovisionIpamByoasnResult < Struct.new(
      :byoasn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the pool that has the CIDR you want to deprovision.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   The CIDR which you want to deprovision from the pool.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionIpamPoolCidrRequest AWS API Documentation
    #
    class DeprovisionIpamPoolCidrRequest < Struct.new(
      :dry_run,
      :ipam_pool_id,
      :cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_pool_cidr
    #   The deprovisioned pool CIDR.
    #   @return [Types::IpamPoolCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionIpamPoolCidrResult AWS API Documentation
    #
    class DeprovisionIpamPoolCidrResult < Struct.new(
      :ipam_pool_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] pool_id
    #   The ID of the pool that you want to deprovision the CIDR from.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   The CIDR you want to deprovision from the pool.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionPublicIpv4PoolCidrRequest AWS API Documentation
    #
    class DeprovisionPublicIpv4PoolCidrRequest < Struct.new(
      :dry_run,
      :pool_id,
      :cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] pool_id
    #   The ID of the pool that you deprovisioned the CIDR from.
    #   @return [String]
    #
    # @!attribute [rw] deprovisioned_addresses
    #   The deprovisioned CIDRs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeprovisionPublicIpv4PoolCidrResult AWS API Documentation
    #
    class DeprovisionPublicIpv4PoolCidrResult < Struct.new(
      :pool_id,
      :deprovisioned_addresses)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DeregisterImage.
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] delete_associated_snapshots
    #   Specifies whether to delete the snapshots associated with the AMI
    #   during deregistration.
    #
    #   <note markdown="1"> If a snapshot is associated with multiple AMIs, it is not deleted,
    #   regardless of this setting.
    #
    #    </note>
    #
    #   Default: The snapshots are not deleted.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImageRequest AWS API Documentation
    #
    class DeregisterImageRequest < Struct.new(
      :image_id,
      :delete_associated_snapshots,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_snapshot_results
    #   The deletion result for each snapshot associated with the AMI,
    #   including the snapshot ID and its success or error code.
    #   @return [Array<Types::DeleteSnapshotReturnCode>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterImageResult AWS API Documentation
    #
    class DeregisterImageResult < Struct.new(
      :return,
      :delete_snapshot_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_tag_attribute
    #   Information about the tag keys to deregister.
    #   @return [Types::DeregisterInstanceTagAttributeRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterInstanceEventNotificationAttributesRequest AWS API Documentation
    #
    class DeregisterInstanceEventNotificationAttributesRequest < Struct.new(
      :dry_run,
      :instance_tag_attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_tag_attribute
    #   The resulting set of tag keys.
    #   @return [Types::InstanceTagNotificationAttribute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterInstanceEventNotificationAttributesResult AWS API Documentation
    #
    class DeregisterInstanceEventNotificationAttributesResult < Struct.new(
      :instance_tag_attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the tag keys to deregister for the current Region.
    # You can either specify individual tag keys or deregister all tag keys
    # in the current Region. You must specify either
    # `IncludeAllTagsOfInstance` or `InstanceTagKeys` in the request
    #
    # @!attribute [rw] include_all_tags_of_instance
    #   Indicates whether to deregister all tag keys in the current Region.
    #   Specify `false` to deregister all tag keys.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_tag_keys
    #   Information about the tag keys to deregister.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterInstanceTagAttributeRequest AWS API Documentation
    #
    class DeregisterInstanceTagAttributeRequest < Struct.new(
      :include_all_tags_of_instance,
      :instance_tag_keys)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] group_ip_address
    #   The IP address assigned to the transit gateway multicast group.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_ids
    #   The IDs of the group members' network interfaces.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterTransitGatewayMulticastGroupMembersRequest AWS API Documentation
    #
    class DeregisterTransitGatewayMulticastGroupMembersRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :group_ip_address,
      :network_interface_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] deregistered_multicast_group_members
    #   Information about the deregistered members.
    #   @return [Types::TransitGatewayMulticastDeregisteredGroupMembers]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterTransitGatewayMulticastGroupMembersResult AWS API Documentation
    #
    class DeregisterTransitGatewayMulticastGroupMembersResult < Struct.new(
      :deregistered_multicast_group_members)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] group_ip_address
    #   The IP address assigned to the transit gateway multicast group.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_ids
    #   The IDs of the group sources' network interfaces.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterTransitGatewayMulticastGroupSourcesRequest AWS API Documentation
    #
    class DeregisterTransitGatewayMulticastGroupSourcesRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :group_ip_address,
      :network_interface_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] deregistered_multicast_group_sources
    #   Information about the deregistered group sources.
    #   @return [Types::TransitGatewayMulticastDeregisteredGroupSources]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeregisterTransitGatewayMulticastGroupSourcesResult AWS API Documentation
    #
    class DeregisterTransitGatewayMulticastGroupSourcesResult < Struct.new(
      :deregistered_multicast_group_sources)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] attribute_names
    #   The account attribute names.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributesRequest AWS API Documentation
    #
    class DescribeAccountAttributesRequest < Struct.new(
      :dry_run,
      :attribute_names)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_attributes
    #   Information about the account attributes.
    #   @return [Array<Types::AccountAttribute>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAccountAttributesResult AWS API Documentation
    #
    class DescribeAccountAttributesResult < Struct.new(
      :account_attributes)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_ids
    #   The allocation IDs of Elastic IP addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of address transfers to return in one page of
    #   results.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddressTransfersRequest AWS API Documentation
    #
    class DescribeAddressTransfersRequest < Struct.new(
      :allocation_ids,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] address_transfers
    #   The Elastic IP address transfer.
    #   @return [Array<Types::AddressTransfer>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddressTransfersResult AWS API Documentation
    #
    class DescribeAddressTransfersResult < Struct.new(
      :address_transfers,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_ids
    #   \[EC2-VPC\] The allocation IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] attribute
    #   The attribute of the IP address.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddressesAttributeRequest AWS API Documentation
    #
    class DescribeAddressesAttributeRequest < Struct.new(
      :allocation_ids,
      :attribute,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] addresses
    #   Information about the IP addresses.
    #   @return [Array<Types::AddressAttribute>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddressesAttributeResult AWS API Documentation
    #
    class DescribeAddressesAttributeResult < Struct.new(
      :addresses,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] public_ips
    #   One or more Elastic IP addresses.
    #
    #   Default: Describes all your Elastic IP addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #
    #   * `allocation-id` - The allocation ID for the address.
    #
    #   * `association-id` - The association ID for the address.
    #
    #   * `instance-id` - The ID of the instance the address is associated
    #     with, if any.
    #
    #   * `network-border-group` - A unique set of Availability Zones, Local
    #     Zones, or Wavelength Zones from where Amazon Web Services
    #     advertises IP addresses.
    #
    #   * `network-interface-id` - The ID of the network interface that the
    #     address is associated with, if any.
    #
    #   * `network-interface-owner-id` - The Amazon Web Services account ID
    #     of the owner.
    #
    #   * `private-ip-address` - The private IP address associated with the
    #     Elastic IP address.
    #
    #   * `public-ip` - The Elastic IP address, or the carrier IP address.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] allocation_ids
    #   Information about the allocation IDs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddressesRequest AWS API Documentation
    #
    class DescribeAddressesRequest < Struct.new(
      :public_ips,
      :dry_run,
      :filters,
      :allocation_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] addresses
    #   Information about the Elastic IP addresses.
    #   @return [Array<Types::Address>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAddressesResult AWS API Documentation
    #
    class DescribeAddressesResult < Struct.new(
      :addresses)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAggregateIdFormatRequest AWS API Documentation
    #
    class DescribeAggregateIdFormatRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] use_long_ids_aggregated
    #   Indicates whether all resource types in the Region are configured to
    #   use longer IDs. This value is only `true` if all users are
    #   configured to use longer IDs for all resources types in the Region.
    #   @return [Boolean]
    #
    # @!attribute [rw] statuses
    #   Information about each resource's ID format.
    #   @return [Array<Types::IdFormat>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAggregateIdFormatResult AWS API Documentation
    #
    class DescribeAggregateIdFormatResult < Struct.new(
      :use_long_ids_aggregated,
      :statuses)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] zone_names
    #   The names of the Availability Zones, Local Zones, and Wavelength
    #   Zones.
    #   @return [Array<String>]
    #
    # @!attribute [rw] zone_ids
    #   The IDs of the Availability Zones, Local Zones, and Wavelength
    #   Zones.
    #   @return [Array<String>]
    #
    # @!attribute [rw] all_availability_zones
    #   Include all Availability Zones, Local Zones, and Wavelength Zones
    #   regardless of your opt-in status.
    #
    #   If you do not use this parameter, the results include only the zones
    #   for the Regions where you have chosen the option to opt in.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `group-long-name` - The long name of the zone group for the
    #     Availability Zone (for example, `US West (Oregon) 1`), the Local
    #     Zone (for example, for Zone group `us-west-2-lax-1`, it is `US
    #     West (Los Angeles)`, or the Wavelength Zone (for example, for Zone
    #     group `us-east-1-wl1`, it is `US East (Verizon)`.
    #
    #   * `group-name` - The name of the zone group for the Availability
    #     Zone (for example, `us-east-1-zg-1`), the Local Zone (for example,
    #     `us-west-2-lax-1`), or the Wavelength Zone (for example,
    #     `us-east-1-wl1`).
    #
    #   * `message` - The Zone message.
    #
    #   * `opt-in-status` - The opt-in status (`opted-in` \| `not-opted-in`
    #     \| `opt-in-not-required`).
    #
    #   * `parent-zone-id` - The ID of the zone that handles some of the
    #     Local Zone and Wavelength Zone control plane operations, such as
    #     API calls.
    #
    #   * `parent-zone-name` - The ID of the zone that handles some of the
    #     Local Zone and Wavelength Zone control plane operations, such as
    #     API calls.
    #
    #   * `region-name` - The name of the Region for the Zone (for example,
    #     `us-east-1`).
    #
    #   * `state` - The state of the Availability Zone, the Local Zone, or
    #     the Wavelength Zone (`available` \| `unavailable` \|
    #     `constrained`).
    #
    #   * `zone-id` - The ID of the Availability Zone (for example,
    #     `use1-az1`), the Local Zone (for example, `usw2-lax1-az1`), or the
    #     Wavelength Zone (for example, `us-east-1-wl1-bos-wlz-1`).
    #
    #   * `zone-name` - The name of the Availability Zone (for example,
    #     `us-east-1a`), the Local Zone (for example, `us-west-2-lax-1a`),
    #     or the Wavelength Zone (for example, `us-east-1-wl1-bos-wlz-1`).
    #
    #   * `zone-type` - The type of zone (`availability-zone` \|
    #     `local-zone` \| `wavelength-zone`).
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZonesRequest AWS API Documentation
    #
    class DescribeAvailabilityZonesRequest < Struct.new(
      :zone_names,
      :zone_ids,
      :all_availability_zones,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] availability_zones
    #   Information about the Availability Zones, Local Zones, and
    #   Wavelength Zones.
    #   @return [Array<Types::AvailabilityZone>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAvailabilityZonesResult AWS API Documentation
    #
    class DescribeAvailabilityZonesResult < Struct.new(
      :availability_zones)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAwsNetworkPerformanceMetricSubscriptionsRequest AWS API Documentation
    #
    class DescribeAwsNetworkPerformanceMetricSubscriptionsRequest < Struct.new(
      :max_results,
      :next_token,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] subscriptions
    #   Describes the current Infrastructure Performance subscriptions.
    #   @return [Array<Types::Subscription>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeAwsNetworkPerformanceMetricSubscriptionsResult AWS API Documentation
    #
    class DescribeAwsNetworkPerformanceMetricSubscriptionsResult < Struct.new(
      :next_token,
      :subscriptions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] bundle_ids
    #   The bundle task IDs.
    #
    #   Default: Describes all your bundle tasks.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `bundle-id` - The ID of the bundle task.
    #
    #   * `error-code` - If the task failed, the error code returned.
    #
    #   * `error-message` - If the task failed, the error message returned.
    #
    #   * `instance-id` - The ID of the instance.
    #
    #   * `progress` - The level of task completion, as a percentage (for
    #     example, 20%).
    #
    #   * `s3-bucket` - The Amazon S3 bucket to store the AMI.
    #
    #   * `s3-prefix` - The beginning of the AMI name.
    #
    #   * `start-time` - The time the task started (for example,
    #     2013-09-15T17:15:20.000Z).
    #
    #   * `state` - The state of the task (`pending` \|
    #     `waiting-for-shutdown` \| `bundling` \| `storing` \| `cancelling`
    #     \| `complete` \| `failed`).
    #
    #   * `update-time` - The time of the most recent update for the task.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasksRequest AWS API Documentation
    #
    class DescribeBundleTasksRequest < Struct.new(
      :bundle_ids,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] bundle_tasks
    #   Information about the bundle tasks.
    #   @return [Array<Types::BundleTask>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeBundleTasksResult AWS API Documentation
    #
    class DescribeBundleTasksResult < Struct.new(
      :bundle_tasks)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeByoipCidrsRequest AWS API Documentation
    #
    class DescribeByoipCidrsRequest < Struct.new(
      :dry_run,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] byoip_cidrs
    #   Information about your address ranges.
    #   @return [Array<Types::ByoipCidr>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeByoipCidrsResult AWS API Documentation
    #
    class DescribeByoipCidrsResult < Struct.new(
      :byoip_cidrs,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_ids
    #   The IDs of Capacity Block reservations that you want to display the
    #   history for.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters
    #
    #   * `availability-zone` - The Availability Zone of the extension.
    #
    #   * `availability-zone-id` - The Availability Zone ID of the
    #     extension.
    #
    #   * `capacity-block-extension-offering-id` - The ID of the extension
    #     offering.
    #
    #   * `capacity-block-extension-status` - The status of the extension
    #     (`payment-pending` \| `payment-failed` \| `payment-succeeded`).
    #
    #   * `capacity-reservation-id` - The reservation ID of the extension.
    #
    #   * `instance-type` - The instance type of the extension.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlockExtensionHistoryRequest AWS API Documentation
    #
    class DescribeCapacityBlockExtensionHistoryRequest < Struct.new(
      :capacity_reservation_ids,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_block_extensions
    #   Describes one or more of your Capacity Block extensions. The results
    #   describe only the Capacity Block extensions in the Amazon Web
    #   Services Region that you're currently using.
    #   @return [Array<Types::CapacityBlockExtension>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlockExtensionHistoryResult AWS API Documentation
    #
    class DescribeCapacityBlockExtensionHistoryResult < Struct.new(
      :capacity_block_extensions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] capacity_block_extension_duration_hours
    #   The duration of the Capacity Block extension offering in hours.
    #   @return [Integer]
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity reservation to be extended.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlockExtensionOfferingsRequest AWS API Documentation
    #
    class DescribeCapacityBlockExtensionOfferingsRequest < Struct.new(
      :dry_run,
      :capacity_block_extension_duration_hours,
      :capacity_reservation_id,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_block_extension_offerings
    #   The recommended Capacity Block extension offerings for the dates
    #   specified.
    #   @return [Array<Types::CapacityBlockExtensionOffering>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlockExtensionOfferingsResult AWS API Documentation
    #
    class DescribeCapacityBlockExtensionOfferingsResult < Struct.new(
      :capacity_block_extension_offerings,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_type
    #   The type of instance for which the Capacity Block offering reserves
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances for which to reserve capacity. Each Capacity
    #   Block can have up to 64 instances, and you can have up to 256
    #   instances across Capacity Blocks.
    #   @return [Integer]
    #
    # @!attribute [rw] start_date_range
    #   The earliest start date for the Capacity Block offering.
    #   @return [Time]
    #
    # @!attribute [rw] end_date_range
    #   The latest end date for the Capacity Block offering.
    #   @return [Time]
    #
    # @!attribute [rw] capacity_duration_hours
    #   The reservation duration for the Capacity Block, in hours. You must
    #   specify the duration in 1-day increments up 14 days, and in 7-day
    #   increments up to 182 days.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] ultraserver_type
    #   The EC2 UltraServer type of the Capacity Block offerings.
    #   @return [String]
    #
    # @!attribute [rw] ultraserver_count
    #   The number of EC2 UltraServers in the offerings.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlockOfferingsRequest AWS API Documentation
    #
    class DescribeCapacityBlockOfferingsRequest < Struct.new(
      :dry_run,
      :instance_type,
      :instance_count,
      :start_date_range,
      :end_date_range,
      :capacity_duration_hours,
      :next_token,
      :max_results,
      :ultraserver_type,
      :ultraserver_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_block_offerings
    #   The recommended Capacity Block offering for the dates specified.
    #   @return [Array<Types::CapacityBlockOffering>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlockOfferingsResult AWS API Documentation
    #
    class DescribeCapacityBlockOfferingsResult < Struct.new(
      :capacity_block_offerings,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_block_ids
    #   The ID of the Capacity Block.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `interconnect-status` - The status of the interconnect for the
    #     Capacity Block (`ok` \| `impaired` \| `insufficient-data`).
    #
    #   ^
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlockStatusRequest AWS API Documentation
    #
    class DescribeCapacityBlockStatusRequest < Struct.new(
      :capacity_block_ids,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_block_statuses
    #   The availability of capacity for a Capacity Block.
    #   @return [Array<Types::CapacityBlockStatus>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlockStatusResult AWS API Documentation
    #
    class DescribeCapacityBlockStatusResult < Struct.new(
      :capacity_block_statuses,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_block_ids
    #   The IDs of the Capacity Blocks.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `capacity-block-id` - The ID of the Capacity Block.
    #
    #   * `ultraserver-type` - The Capacity Block type. The type can be
    #     `instances` or `ultraservers`.
    #
    #   * `availability-zone` - The Availability Zone of the Capacity Block.
    #
    #   * `start-date` - The date and time at which the Capacity Block was
    #     started.
    #
    #   * `end-date` - The date and time at which the Capacity Block
    #     expires. When a Capacity Block expires, all instances in the
    #     Capacity Block are terminated.
    #
    #   * `create-date` - The date and time at which the Capacity Block was
    #     created.
    #
    #   * `state` - The state of the Capacity Block (`active` \| `expired`
    #     \| `unavailable` \| `cancelled` \| `failed` \| `scheduled` \|
    #     `payment-pending` \| `payment-failed`).
    #
    #   * `tags` - The tags assigned to the Capacity Block.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlocksRequest AWS API Documentation
    #
    class DescribeCapacityBlocksRequest < Struct.new(
      :capacity_block_ids,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_blocks
    #   The Capacity Blocks.
    #   @return [Array<Types::CapacityBlock>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityBlocksResult AWS API Documentation
    #
    class DescribeCapacityBlocksResult < Struct.new(
      :capacity_blocks,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_ids
    #   The ID of the Capacity Reservation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] role
    #   Specify one of the following:
    #
    #   * `odcr-owner` - If you are the Capacity Reservation owner, specify
    #     this value to view requests that you have initiated. Not supported
    #     with the `requested-by` filter.
    #
    #   * `unused-reservation-billing-owner` - If you are the consumer
    #     account, specify this value to view requests that have been sent
    #     to you. Not supported with the `unused-reservation-billing-owner`
    #     filter.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `status` - The state of the request (`pending` \| `accepted` \|
    #     `rejected` \| `cancelled` \| `revoked` \| `expired`).
    #
    #   * `requested-by` - The account ID of the Capacity Reservation owner
    #     that initiated the request. Not supported if you specify
    #     `requested-by` for **Role**.
    #
    #   * `unused-reservation-billing-owner` - The ID of the consumer
    #     account to which the request was sent. Not supported if you
    #     specify `unused-reservation-billing-owner` for **Role**.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservationBillingRequestsRequest AWS API Documentation
    #
    class DescribeCapacityReservationBillingRequestsRequest < Struct.new(
      :capacity_reservation_ids,
      :role,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_billing_requests
    #   Information about the request.
    #   @return [Array<Types::CapacityReservationBillingRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservationBillingRequestsResult AWS API Documentation
    #
    class DescribeCapacityReservationBillingRequestsResult < Struct.new(
      :next_token,
      :capacity_reservation_billing_requests)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_fleet_ids
    #   The IDs of the Capacity Reservation Fleets to describe.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `state` - The state of the Fleet (`submitted` \| `modifying` \|
    #     `active` \| `partially_fulfilled` \| `expiring` \| `expired` \|
    #     `cancelling` \| `cancelled` \| `failed`).
    #
    #   * `instance-match-criteria` - The instance matching criteria for the
    #     Fleet. Only `open` is supported.
    #
    #   * `tenancy` - The tenancy of the Fleet (`default` \| `dedicated`).
    #
    #   * `allocation-strategy` - The allocation strategy used by the Fleet.
    #     Only `prioritized` is supported.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservationFleetsRequest AWS API Documentation
    #
    class DescribeCapacityReservationFleetsRequest < Struct.new(
      :capacity_reservation_fleet_ids,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_fleets
    #   Information about the Capacity Reservation Fleets.
    #   @return [Array<Types::CapacityReservationFleet>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservationFleetsResult AWS API Documentation
    #
    class DescribeCapacityReservationFleetsResult < Struct.new(
      :capacity_reservation_fleets,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_ids
    #   The ID of the Capacity Reservation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `instance-type` - The type of instance for which the Capacity
    #     Reservation reserves capacity.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the Capacity Reservation.
    #
    #   * `instance-platform` - The type of operating system for which the
    #     Capacity Reservation reserves capacity.
    #
    #   * `availability-zone` - The Availability Zone of the Capacity
    #     Reservation.
    #
    #   * `tenancy` - Indicates the tenancy of the Capacity Reservation. A
    #     Capacity Reservation can have one of the following tenancy
    #     settings:
    #
    #     * `default` - The Capacity Reservation is created on hardware that
    #       is shared with other Amazon Web Services accounts.
    #
    #     * `dedicated` - The Capacity Reservation is created on
    #       single-tenant hardware that is dedicated to a single Amazon Web
    #       Services account.
    #   * `outpost-arn` - The Amazon Resource Name (ARN) of the Outpost on
    #     which the Capacity Reservation was created.
    #
    #   * `state` - The current state of the Capacity Reservation. A
    #     Capacity Reservation can be in one of the following states:
    #
    #     * `active`- The Capacity Reservation is active and the capacity is
    #       available for your use.
    #
    #     * `expired` - The Capacity Reservation expired automatically at
    #       the date and time specified in your request. The reserved
    #       capacity is no longer available for your use.
    #
    #     * `cancelled` - The Capacity Reservation was cancelled. The
    #       reserved capacity is no longer available for your use.
    #
    #     * `pending` - The Capacity Reservation request was successful but
    #       the capacity provisioning is still pending.
    #
    #     * `failed` - The Capacity Reservation request has failed. A
    #       request might fail due to invalid request parameters, capacity
    #       constraints, or instance limit constraints. Failed requests are
    #       retained for 60 minutes.
    #   * `start-date` - The date and time at which the Capacity Reservation
    #     was started.
    #
    #   * `end-date` - The date and time at which the Capacity Reservation
    #     expires. When a Capacity Reservation expires, the reserved
    #     capacity is released and you can no longer launch instances into
    #     it. The Capacity Reservation's state changes to expired when it
    #     reaches its end date and time.
    #
    #   * `end-date-type` - Indicates the way in which the Capacity
    #     Reservation ends. A Capacity Reservation can have one of the
    #     following end types:
    #
    #     * `unlimited` - The Capacity Reservation remains active until you
    #       explicitly cancel it.
    #
    #     * `limited` - The Capacity Reservation expires automatically at a
    #       specified date and time.
    #   * `instance-match-criteria` - Indicates the type of instance
    #     launches that the Capacity Reservation accepts. The options
    #     include:
    #
    #     * `open` - The Capacity Reservation accepts all instances that
    #       have matching attributes (instance type, platform, and
    #       Availability Zone). Instances that have matching attributes
    #       launch into the Capacity Reservation automatically without
    #       specifying any additional parameters.
    #
    #     * `targeted` - The Capacity Reservation only accepts instances
    #       that have matching attributes (instance type, platform, and
    #       Availability Zone), and explicitly target the Capacity
    #       Reservation. This ensures that only permitted instances can use
    #       the reserved capacity.
    #   * `placement-group-arn` - The ARN of the cluster placement group in
    #     which the Capacity Reservation was created.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservationsRequest AWS API Documentation
    #
    class DescribeCapacityReservationsRequest < Struct.new(
      :capacity_reservation_ids,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservations
    #   Information about the Capacity Reservations.
    #   @return [Array<Types::CapacityReservation>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCapacityReservationsResult AWS API Documentation
    #
    class DescribeCapacityReservationsResult < Struct.new(
      :next_token,
      :capacity_reservations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] carrier_gateway_ids
    #   One or more carrier gateway IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `carrier-gateway-id` - The ID of the carrier gateway.
    #
    #   * `state` - The state of the carrier gateway (`pending` \| `failed`
    #     \| `available` \| `deleting` \| `deleted`).
    #
    #   * `owner-id` - The Amazon Web Services account ID of the owner of
    #     the carrier gateway.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC associated with the carrier gateway.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCarrierGatewaysRequest AWS API Documentation
    #
    class DescribeCarrierGatewaysRequest < Struct.new(
      :carrier_gateway_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] carrier_gateways
    #   Information about the carrier gateway.
    #   @return [Array<Types::CarrierGateway>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCarrierGatewaysResult AWS API Documentation
    #
    class DescribeCarrierGatewaysResult < Struct.new(
      :carrier_gateways,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_ids
    #   The instance IDs. Must be instances linked to a VPC through
    #   ClassicLink.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `group-id` - The ID of a VPC security group that's associated
    #     with the instance.
    #
    #   * `instance-id` - The ID of the instance.
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC to which the instance is linked.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #   Constraint: If the value is greater than 1000, we return only 1000
    #   items.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstancesRequest AWS API Documentation
    #
    class DescribeClassicLinkInstancesRequest < Struct.new(
      :dry_run,
      :instance_ids,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instances
    #   Information about one or more linked EC2-Classic instances.
    #   @return [Array<Types::ClassicLinkInstance>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClassicLinkInstancesResult AWS API Documentation
    #
    class DescribeClassicLinkInstancesResult < Struct.new(
      :instances,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #
    #   * `description` - The description of the authorization rule.
    #
    #   * `destination-cidr` - The CIDR of the network to which the
    #     authorization rule applies.
    #
    #   * `group-id` - The ID of the Active Directory group to which the
    #     authorization rule grants access.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the nextToken value.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnAuthorizationRulesRequest AWS API Documentation
    #
    class DescribeClientVpnAuthorizationRulesRequest < Struct.new(
      :client_vpn_endpoint_id,
      :dry_run,
      :next_token,
      :filters,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] authorization_rules
    #   Information about the authorization rules.
    #   @return [Array<Types::AuthorizationRule>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnAuthorizationRulesResult AWS API Documentation
    #
    class DescribeClientVpnAuthorizationRulesResult < Struct.new(
      :authorization_rules,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #
    #   * `connection-id` - The ID of the connection.
    #
    #   * `username` - For Active Directory client authentication, the user
    #     name of the client who established the client connection.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the nextToken value.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnConnectionsRequest AWS API Documentation
    #
    class DescribeClientVpnConnectionsRequest < Struct.new(
      :client_vpn_endpoint_id,
      :filters,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] connections
    #   Information about the active and terminated client connections.
    #   @return [Array<Types::ClientVpnConnection>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnConnectionsResult AWS API Documentation
    #
    class DescribeClientVpnConnectionsResult < Struct.new(
      :connections,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_ids
    #   The ID of the Client VPN endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the nextToken value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #
    #   * `endpoint-id` - The ID of the Client VPN endpoint.
    #
    #   * `transport-protocol` - The transport protocol (`tcp` \| `udp`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnEndpointsRequest AWS API Documentation
    #
    class DescribeClientVpnEndpointsRequest < Struct.new(
      :client_vpn_endpoint_ids,
      :max_results,
      :next_token,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoints
    #   Information about the Client VPN endpoints.
    #   @return [Array<Types::ClientVpnEndpoint>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnEndpointsResult AWS API Documentation
    #
    class DescribeClientVpnEndpointsResult < Struct.new(
      :client_vpn_endpoints,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #
    #   * `destination-cidr` - The CIDR of the route destination.
    #
    #   * `origin` - How the route was associated with the Client VPN
    #     endpoint (`associate` \| `add-route`).
    #
    #   * `target-subnet` - The ID of the subnet through which traffic is
    #     routed.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the nextToken value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnRoutesRequest AWS API Documentation
    #
    class DescribeClientVpnRoutesRequest < Struct.new(
      :client_vpn_endpoint_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] routes
    #   Information about the Client VPN endpoint routes.
    #   @return [Array<Types::ClientVpnRoute>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnRoutesResult AWS API Documentation
    #
    class DescribeClientVpnRoutesResult < Struct.new(
      :routes,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] association_ids
    #   The IDs of the target network associations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the nextToken value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #
    #   * `association-id` - The ID of the association.
    #
    #   * `target-network-id` - The ID of the subnet specified as the target
    #     network.
    #
    #   * `vpc-id` - The ID of the VPC in which the target network is
    #     located.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnTargetNetworksRequest AWS API Documentation
    #
    class DescribeClientVpnTargetNetworksRequest < Struct.new(
      :client_vpn_endpoint_id,
      :association_ids,
      :max_results,
      :next_token,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_target_networks
    #   Information about the associated target networks.
    #   @return [Array<Types::TargetNetwork>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeClientVpnTargetNetworksResult AWS API Documentation
    #
    class DescribeClientVpnTargetNetworksResult < Struct.new(
      :client_vpn_target_networks,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] pool_ids
    #   The IDs of the address pools.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `coip-pool.local-gateway-route-table-id` - The ID of the local
    #     gateway route table.
    #
    #   * `coip-pool.pool-id` - The ID of the address pool.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCoipPoolsRequest AWS API Documentation
    #
    class DescribeCoipPoolsRequest < Struct.new(
      :pool_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] coip_pools
    #   Information about the address pools.
    #   @return [Array<Types::CoipPool>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCoipPoolsResult AWS API Documentation
    #
    class DescribeCoipPoolsResult < Struct.new(
      :coip_pools,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] conversion_task_ids
    #   The conversion task IDs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasksRequest AWS API Documentation
    #
    class DescribeConversionTasksRequest < Struct.new(
      :dry_run,
      :conversion_task_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] conversion_tasks
    #   Information about the conversion tasks.
    #   @return [Array<Types::ConversionTask>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeConversionTasksResult AWS API Documentation
    #
    class DescribeConversionTasksResult < Struct.new(
      :conversion_tasks)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeCustomerGateways.
    #
    # @!attribute [rw] customer_gateway_ids
    #   One or more customer gateway IDs.
    #
    #   Default: Describes all your customer gateways.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `bgp-asn` - The customer gateway's Border Gateway Protocol (BGP)
    #     Autonomous System Number (ASN).
    #
    #   * `customer-gateway-id` - The ID of the customer gateway.
    #
    #   * `ip-address` - The IP address of the customer gateway device's
    #     external interface.
    #
    #   * `state` - The state of the customer gateway (`pending` \|
    #     `available` \| `deleting` \| `deleted`).
    #
    #   * `type` - The type of customer gateway. Currently, the only
    #     supported type is `ipsec.1`.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGatewaysRequest AWS API Documentation
    #
    class DescribeCustomerGatewaysRequest < Struct.new(
      :customer_gateway_ids,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeCustomerGateways.
    #
    # @!attribute [rw] customer_gateways
    #   Information about one or more customer gateways.
    #   @return [Array<Types::CustomerGateway>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeCustomerGatewaysResult AWS API Documentation
    #
    class DescribeCustomerGatewaysResult < Struct.new(
      :customer_gateways)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] report_ids
    #   One or more report IDs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDeclarativePoliciesReportsRequest AWS API Documentation
    #
    class DescribeDeclarativePoliciesReportsRequest < Struct.new(
      :dry_run,
      :next_token,
      :max_results,
      :report_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] reports
    #   The report metadata.
    #   @return [Array<Types::DeclarativePoliciesReport>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDeclarativePoliciesReportsResult AWS API Documentation
    #
    class DescribeDeclarativePoliciesReportsResult < Struct.new(
      :next_token,
      :reports)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dhcp_options_ids
    #   The IDs of DHCP option sets.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `dhcp-options-id` - The ID of a DHCP options set.
    #
    #   * `key` - The key for one of the options (for example,
    #     `domain-name`).
    #
    #   * `value` - The value for one of the options.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the DHCP options set.
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptionsRequest AWS API Documentation
    #
    class DescribeDhcpOptionsRequest < Struct.new(
      :dhcp_options_ids,
      :next_token,
      :max_results,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] dhcp_options
    #   Information about the DHCP options sets.
    #   @return [Array<Types::DhcpOptions>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeDhcpOptionsResult AWS API Documentation
    #
    class DescribeDhcpOptionsResult < Struct.new(
      :next_token,
      :dhcp_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] egress_only_internet_gateway_ids
    #   The IDs of the egress-only internet gateways.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGatewaysRequest AWS API Documentation
    #
    class DescribeEgressOnlyInternetGatewaysRequest < Struct.new(
      :dry_run,
      :egress_only_internet_gateway_ids,
      :max_results,
      :next_token,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] egress_only_internet_gateways
    #   Information about the egress-only internet gateways.
    #   @return [Array<Types::EgressOnlyInternetGateway>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeEgressOnlyInternetGatewaysResult AWS API Documentation
    #
    class DescribeEgressOnlyInternetGatewaysResult < Struct.new(
      :egress_only_internet_gateways,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] elastic_gpu_ids
    #   The Elastic Graphics accelerator IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone` - The Availability Zone in which the Elastic
    #     Graphics accelerator resides.
    #
    #   * `elastic-gpu-health` - The status of the Elastic Graphics
    #     accelerator (`OK` \| `IMPAIRED`).
    #
    #   * `elastic-gpu-state` - The state of the Elastic Graphics
    #     accelerator (`ATTACHED`).
    #
    #   * `elastic-gpu-type` - The type of Elastic Graphics accelerator; for
    #     example, `eg1.medium`.
    #
    #   * `instance-id` - The ID of the instance to which the Elastic
    #     Graphics accelerator is associated.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `NextToken` value. This value can be between 5 and 1000.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to request the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeElasticGpusRequest AWS API Documentation
    #
    class DescribeElasticGpusRequest < Struct.new(
      :elastic_gpu_ids,
      :dry_run,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] elastic_gpu_set
    #   Information about the Elastic Graphics accelerators.
    #   @return [Array<Types::ElasticGpus>]
    #
    # @!attribute [rw] max_results
    #   The total number of items to return. If the total number of items
    #   available is more than the value specified in max-items then a
    #   Next-Token will be provided in the output that you can use to resume
    #   pagination.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeElasticGpusResult AWS API Documentation
    #
    class DescribeElasticGpusResult < Struct.new(
      :elastic_gpu_set,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   Filter tasks using the `task-state` filter and one of the following
    #   values: `active`, `completed`, `deleting`, or `deleted`.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] export_image_task_ids
    #   The IDs of the export image tasks.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   A token that indicates the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportImageTasksRequest AWS API Documentation
    #
    class DescribeExportImageTasksRequest < Struct.new(
      :dry_run,
      :filters,
      :export_image_task_ids,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] export_image_tasks
    #   Information about the export image tasks.
    #   @return [Array<Types::ExportImageTask>]
    #
    # @!attribute [rw] next_token
    #   The token to use to get the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportImageTasksResult AWS API Documentation
    #
    class DescribeExportImageTasksResult < Struct.new(
      :export_image_tasks,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   the filters for the export tasks.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] export_task_ids
    #   The export task IDs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasksRequest AWS API Documentation
    #
    class DescribeExportTasksRequest < Struct.new(
      :filters,
      :export_task_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] export_tasks
    #   Information about the export tasks.
    #   @return [Array<Types::ExportTask>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeExportTasksResult AWS API Documentation
    #
    class DescribeExportTasksResult < Struct.new(
      :export_tasks)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_ids
    #   Specify one or more Windows AMI image IDs for the request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   Use the following filters to streamline results.
    #
    #   * `resource-type` - The resource type for pre-provisioning.
    #
    #   * `owner-id` - The owner ID for the pre-provisioning resource.
    #
    #   * `state` - The current state of fast launching for the Windows AMI.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastLaunchImagesRequest AWS API Documentation
    #
    class DescribeFastLaunchImagesRequest < Struct.new(
      :image_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] fast_launch_images
    #   A collection of details about the fast-launch enabled Windows images
    #   that meet the requested criteria.
    #   @return [Array<Types::DescribeFastLaunchImagesSuccessItem>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastLaunchImagesResult AWS API Documentation
    #
    class DescribeFastLaunchImagesResult < Struct.new(
      :fast_launch_images,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describe details about a Windows image with Windows fast launch
    # enabled that meets the requested criteria. Criteria are defined by the
    # `DescribeFastLaunchImages` action filters.
    #
    # @!attribute [rw] image_id
    #   The image ID that identifies the Windows fast launch enabled image.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type that Amazon EC2 uses for pre-provisioning the
    #   Windows AMI. Supported values include: `snapshot`.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_configuration
    #   A group of parameters that are used for pre-provisioning the
    #   associated Windows AMI using snapshots.
    #   @return [Types::FastLaunchSnapshotConfigurationResponse]
    #
    # @!attribute [rw] launch_template
    #   The launch template that the Windows fast launch enabled AMI uses
    #   when it launches Windows instances from pre-provisioned snapshots.
    #   @return [Types::FastLaunchLaunchTemplateSpecificationResponse]
    #
    # @!attribute [rw] max_parallel_launches
    #   The maximum number of instances that Amazon EC2 can launch at the
    #   same time to create pre-provisioned snapshots for Windows fast
    #   launch.
    #   @return [Integer]
    #
    # @!attribute [rw] owner_id
    #   The owner ID for the Windows fast launch enabled AMI.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of Windows fast launch for the specified Windows
    #   AMI.
    #   @return [String]
    #
    # @!attribute [rw] state_transition_reason
    #   The reason that Windows fast launch for the AMI changed to the
    #   current state.
    #   @return [String]
    #
    # @!attribute [rw] state_transition_time
    #   The time that Windows fast launch for the AMI changed to the current
    #   state.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastLaunchImagesSuccessItem AWS API Documentation
    #
    class DescribeFastLaunchImagesSuccessItem < Struct.new(
      :image_id,
      :resource_type,
      :snapshot_configuration,
      :launch_template,
      :max_parallel_launches,
      :owner_id,
      :state,
      :state_transition_reason,
      :state_transition_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes fast snapshot restores for a snapshot.
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of fast snapshot restores.
    #   @return [String]
    #
    # @!attribute [rw] state_transition_reason
    #   The reason for the state transition. The possible values are as
    #   follows:
    #
    #   * `Client.UserInitiated` - The state successfully transitioned to
    #     `enabling` or `disabling`.
    #
    #   * `Client.UserInitiated - Lifecycle state transition` - The state
    #     successfully transitioned to `optimizing`, `enabled`, or
    #     `disabled`.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that enabled fast snapshot
    #   restores on the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] owner_alias
    #   The Amazon Web Services owner alias that enabled fast snapshot
    #   restores on the snapshot. This is intended for future use.
    #   @return [String]
    #
    # @!attribute [rw] enabling_time
    #   The time at which fast snapshot restores entered the `enabling`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] optimizing_time
    #   The time at which fast snapshot restores entered the `optimizing`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] enabled_time
    #   The time at which fast snapshot restores entered the `enabled`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] disabling_time
    #   The time at which fast snapshot restores entered the `disabling`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] disabled_time
    #   The time at which fast snapshot restores entered the `disabled`
    #   state.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastSnapshotRestoreSuccessItem AWS API Documentation
    #
    class DescribeFastSnapshotRestoreSuccessItem < Struct.new(
      :snapshot_id,
      :availability_zone,
      :state,
      :state_transition_reason,
      :owner_id,
      :owner_alias,
      :enabling_time,
      :optimizing_time,
      :enabled_time,
      :disabling_time,
      :disabled_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   The filters. The possible values are:
    #
    #   * `availability-zone`: The Availability Zone of the snapshot.
    #
    #   * `owner-id`: The ID of the Amazon Web Services account that enabled
    #     fast snapshot restore on the snapshot.
    #
    #   * `snapshot-id`: The ID of the snapshot.
    #
    #   * `state`: The state of fast snapshot restores for the snapshot
    #     (`enabling` \| `optimizing` \| `enabled` \| `disabling` \|
    #     `disabled`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastSnapshotRestoresRequest AWS API Documentation
    #
    class DescribeFastSnapshotRestoresRequest < Struct.new(
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] fast_snapshot_restores
    #   Information about the state of fast snapshot restores.
    #   @return [Array<Types::DescribeFastSnapshotRestoreSuccessItem>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFastSnapshotRestoresResult AWS API Documentation
    #
    class DescribeFastSnapshotRestoresResult < Struct.new(
      :fast_snapshot_restores,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the instances that could not be launched by the fleet.
    #
    # @!attribute [rw] launch_template_and_overrides
    #   The launch templates and overrides that were used for launching the
    #   instances. The values that you specify in the Overrides replace the
    #   values in the launch template.
    #   @return [Types::LaunchTemplateAndOverridesResponse]
    #
    # @!attribute [rw] lifecycle
    #   Indicates if the instance that could not be launched was a Spot
    #   Instance or On-Demand Instance.
    #   @return [String]
    #
    # @!attribute [rw] error_code
    #   The error code that indicates why the instance could not be
    #   launched. For more information about error codes, see [Error
    #   codes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html
    #   @return [String]
    #
    # @!attribute [rw] error_message
    #   The error message that describes why the instance could not be
    #   launched. For more information about error messages, see [Error
    #   codes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetError AWS API Documentation
    #
    class DescribeFleetError < Struct.new(
      :launch_template_and_overrides,
      :lifecycle,
      :error_code,
      :error_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] event_type
    #   The type of events to describe. By default, all events are
    #   described.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] fleet_id
    #   The ID of the EC2 Fleet.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The start date and time for the events, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetHistoryRequest AWS API Documentation
    #
    class DescribeFleetHistoryRequest < Struct.new(
      :dry_run,
      :event_type,
      :max_results,
      :next_token,
      :fleet_id,
      :start_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] history_records
    #   Information about the events in the history of the EC2 Fleet.
    #   @return [Array<Types::HistoryRecordEntry>]
    #
    # @!attribute [rw] last_evaluated_time
    #   The last date and time for the events, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). All records up to this time were
    #   retrieved.
    #
    #   If `nextToken` indicates that there are more items, this value is
    #   not present.
    #   @return [Time]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] fleet_id
    #   The ID of the EC Fleet.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The start date and time for the events, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetHistoryResult AWS API Documentation
    #
    class DescribeFleetHistoryResult < Struct.new(
      :history_records,
      :last_evaluated_time,
      :next_token,
      :fleet_id,
      :start_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] fleet_id
    #   The ID of the EC2 Fleet.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `instance-type` - The instance type.
    #
    #   ^
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetInstancesRequest AWS API Documentation
    #
    class DescribeFleetInstancesRequest < Struct.new(
      :dry_run,
      :max_results,
      :next_token,
      :fleet_id,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] active_instances
    #   The running instances. This list is refreshed periodically and might
    #   be out of date.
    #   @return [Array<Types::ActiveInstance>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] fleet_id
    #   The ID of the EC2 Fleet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetInstancesResult AWS API Documentation
    #
    class DescribeFleetInstancesResult < Struct.new(
      :active_instances,
      :next_token,
      :fleet_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the instances that were launched by the fleet.
    #
    # @!attribute [rw] launch_template_and_overrides
    #   The launch templates and overrides that were used for launching the
    #   instances. The values that you specify in the Overrides replace the
    #   values in the launch template.
    #   @return [Types::LaunchTemplateAndOverridesResponse]
    #
    # @!attribute [rw] lifecycle
    #   Indicates if the instance that was launched is a Spot Instance or
    #   On-Demand Instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_ids
    #   The IDs of the instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The value is `windows` for Windows instances in an EC2 Fleet.
    #   Otherwise, the value is blank.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetsInstances AWS API Documentation
    #
    class DescribeFleetsInstances < Struct.new(
      :launch_template_and_overrides,
      :lifecycle,
      :instance_ids,
      :instance_type,
      :platform)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] fleet_ids
    #   The IDs of the EC2 Fleets.
    #
    #   <note markdown="1"> If a fleet is of type `instant`, you must specify the fleet ID,
    #   otherwise it does not appear in the response.
    #
    #    </note>
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `activity-status` - The progress of the EC2 Fleet ( `error` \|
    #     `pending-fulfillment` \| `pending-termination` \| `fulfilled`).
    #
    #   * `excess-capacity-termination-policy` - Indicates whether to
    #     terminate running instances if the target capacity is decreased
    #     below the current EC2 Fleet size (`true` \| `false`).
    #
    #   * `fleet-state` - The state of the EC2 Fleet (`submitted` \|
    #     `active` \| `deleted` \| `failed` \| `deleted-running` \|
    #     `deleted-terminating` \| `modifying`).
    #
    #   * `replace-unhealthy-instances` - Indicates whether EC2 Fleet should
    #     replace unhealthy instances (`true` \| `false`).
    #
    #   * `type` - The type of request (`instant` \| `request` \|
    #     `maintain`).
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetsRequest AWS API Documentation
    #
    class DescribeFleetsRequest < Struct.new(
      :dry_run,
      :max_results,
      :next_token,
      :fleet_ids,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] fleets
    #   Information about the EC2 Fleets.
    #   @return [Array<Types::FleetData>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFleetsResult AWS API Documentation
    #
    class DescribeFleetsResult < Struct.new(
      :next_token,
      :fleets)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filter
    #   One or more filters.
    #
    #   * `deliver-log-status` - The status of the logs delivery (`SUCCESS`
    #     \| `FAILED`).
    #
    #   * `log-destination-type` - The type of destination for the flow log
    #     data (`cloud-watch-logs` \| `s3` \| `kinesis-data-firehose`).
    #
    #   * `flow-log-id` - The ID of the flow log.
    #
    #   * `log-group-name` - The name of the log group.
    #
    #   * `resource-id` - The ID of the VPC, subnet, or network interface.
    #
    #   * `traffic-type` - The type of traffic (`ACCEPT` \| `REJECT` \|
    #     `ALL`).
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] flow_log_ids
    #   One or more flow log IDs.
    #
    #   Constraint: Maximum of 1000 flow log IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to request the next page of items. Pagination continues
    #   from the end of the items returned by the previous request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogsRequest AWS API Documentation
    #
    class DescribeFlowLogsRequest < Struct.new(
      :dry_run,
      :filter,
      :flow_log_ids,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] flow_logs
    #   Information about the flow logs.
    #   @return [Array<Types::FlowLog>]
    #
    # @!attribute [rw] next_token
    #   The token to request the next page of items. This value is `null`
    #   when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFlowLogsResult AWS API Documentation
    #
    class DescribeFlowLogsResult < Struct.new(
      :flow_logs,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] fpga_image_id
    #   The ID of the AFI.
    #   @return [String]
    #
    # @!attribute [rw] attribute
    #   The AFI attribute.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImageAttributeRequest AWS API Documentation
    #
    class DescribeFpgaImageAttributeRequest < Struct.new(
      :dry_run,
      :fpga_image_id,
      :attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] fpga_image_attribute
    #   Information about the attribute.
    #   @return [Types::FpgaImageAttribute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImageAttributeResult AWS API Documentation
    #
    class DescribeFpgaImageAttributeResult < Struct.new(
      :fpga_image_attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] fpga_image_ids
    #   The AFI IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] owners
    #   Filters the AFI by owner. Specify an Amazon Web Services account ID,
    #   `self` (owner is the sender of the request), or an Amazon Web
    #   Services owner alias (valid values are `amazon` \|
    #   `aws-marketplace`).
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `create-time` - The creation time of the AFI.
    #
    #   * `fpga-image-id` - The FPGA image identifier (AFI ID).
    #
    #   * `fpga-image-global-id` - The global FPGA image identifier (AGFI
    #     ID).
    #
    #   * `name` - The name of the AFI.
    #
    #   * `owner-id` - The Amazon Web Services account ID of the AFI owner.
    #
    #   * `product-code` - The product code.
    #
    #   * `shell-version` - The version of the Amazon Web Services Shell
    #     that was used to create the bitstream.
    #
    #   * `state` - The state of the AFI (`pending` \| `failed` \|
    #     `available` \| `unavailable`).
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `update-time` - The time of the most recent update.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImagesRequest AWS API Documentation
    #
    class DescribeFpgaImagesRequest < Struct.new(
      :dry_run,
      :fpga_image_ids,
      :owners,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] fpga_images
    #   Information about the FPGA images.
    #   @return [Array<Types::FpgaImage>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeFpgaImagesResult AWS API Documentation
    #
    class DescribeFpgaImagesResult < Struct.new(
      :fpga_images,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filter
    #   The filters.
    #
    #   * `instance-family` - The instance family of the offering (for
    #     example, `m4`).
    #
    #   * `payment-option` - The payment option (`NoUpfront` \|
    #     `PartialUpfront` \| `AllUpfront`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_duration
    #   This is the maximum duration of the reservation to purchase,
    #   specified in seconds. Reservations are available in one-year and
    #   three-year terms. The number of seconds specified must be the number
    #   of seconds in a year (365x24x60x60) times one of the supported
    #   durations (1 or 3). For example, specify 94608000 for three years.
    #   @return [Integer]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the returned `nextToken` value. This value can be between 5 and
    #   500. If `maxResults` is given a larger value than 500, you receive
    #   an error.
    #   @return [Integer]
    #
    # @!attribute [rw] min_duration
    #   This is the minimum duration of the reservation you'd like to
    #   purchase, specified in seconds. Reservations are available in
    #   one-year and three-year terms. The number of seconds specified must
    #   be the number of seconds in a year (365x24x60x60) times one of the
    #   supported durations (1 or 3). For example, specify 31536000 for one
    #   year.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] offering_id
    #   The ID of the reservation offering.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferingsRequest AWS API Documentation
    #
    class DescribeHostReservationOfferingsRequest < Struct.new(
      :filter,
      :max_duration,
      :max_results,
      :min_duration,
      :next_token,
      :offering_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] offering_set
    #   Information about the offerings.
    #   @return [Array<Types::HostOffering>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationOfferingsResult AWS API Documentation
    #
    class DescribeHostReservationOfferingsResult < Struct.new(
      :next_token,
      :offering_set)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filter
    #   The filters.
    #
    #   * `instance-family` - The instance family (for example, `m4`).
    #
    #   * `payment-option` - The payment option (`NoUpfront` \|
    #     `PartialUpfront` \| `AllUpfront`).
    #
    #   * `state` - The state of the reservation (`payment-pending` \|
    #     `payment-failed` \| `active` \| `retired`).
    #
    #   * `tag:<key>` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] host_reservation_id_set
    #   The host reservation IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the returned `nextToken` value. This value can be between 5 and
    #   500. If `maxResults` is given a larger value than 500, you receive
    #   an error.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationsRequest AWS API Documentation
    #
    class DescribeHostReservationsRequest < Struct.new(
      :filter,
      :host_reservation_id_set,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] host_reservation_set
    #   Details about the reservation's configuration.
    #   @return [Array<Types::HostReservation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostReservationsResult AWS API Documentation
    #
    class DescribeHostReservationsResult < Struct.new(
      :host_reservation_set,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] host_ids
    #   The IDs of the Dedicated Hosts. The IDs are used for targeted
    #   instance launches.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the returned `nextToken` value. This value can be between 5 and
    #   500. If `maxResults` is given a larger value than 500, you receive
    #   an error.
    #
    #   You cannot specify this parameter and the host IDs parameter in the
    #   same request.
    #   @return [Integer]
    #
    # @!attribute [rw] filter
    #   The filters.
    #
    #   * `auto-placement` - Whether auto-placement is enabled or disabled
    #     (`on` \| `off`).
    #
    #   * `availability-zone` - The Availability Zone of the host.
    #
    #   * `client-token` - The idempotency token that you provided when you
    #     allocated the host.
    #
    #   * `host-reservation-id` - The ID of the reservation assigned to this
    #     host.
    #
    #   * `instance-type` - The instance type size that the Dedicated Host
    #     is configured to support.
    #
    #   * `state` - The allocation state of the Dedicated Host (`available`
    #     \| `under-assessment` \| `permanent-failure` \| `released` \|
    #     `released-permanent-failure`).
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostsRequest AWS API Documentation
    #
    class DescribeHostsRequest < Struct.new(
      :host_ids,
      :next_token,
      :max_results,
      :filter)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] hosts
    #   Information about the Dedicated Hosts.
    #   @return [Array<Types::Host>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeHostsResult AWS API Documentation
    #
    class DescribeHostsResult < Struct.new(
      :hosts,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_ids
    #   The IAM instance profile associations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `instance-id` - The ID of the instance.
    #
    #   * `state` - The state of the association (`associating` \|
    #     `associated` \| `disassociating`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociationsRequest AWS API Documentation
    #
    class DescribeIamInstanceProfileAssociationsRequest < Struct.new(
      :association_ids,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] iam_instance_profile_associations
    #   Information about the IAM instance profile associations.
    #   @return [Array<Types::IamInstanceProfileAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIamInstanceProfileAssociationsResult AWS API Documentation
    #
    class DescribeIamInstanceProfileAssociationsResult < Struct.new(
      :iam_instance_profile_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource
    #   The type of resource: `bundle` \| `conversion-task` \|
    #   `customer-gateway` \| `dhcp-options` \| `elastic-ip-allocation` \|
    #   `elastic-ip-association` \| `export-task` \| `flow-log` \| `image`
    #   \| `import-task` \| `instance` \| `internet-gateway` \|
    #   `network-acl` \| `network-acl-association` \| `network-interface` \|
    #   `network-interface-attachment` \| `prefix-list` \| `reservation` \|
    #   `route-table` \| `route-table-association` \| `security-group` \|
    #   `snapshot` \| `subnet` \| `subnet-cidr-block-association` \|
    #   `volume` \| `vpc` \| `vpc-cidr-block-association` \| `vpc-endpoint`
    #   \| `vpc-peering-connection` \| `vpn-connection` \| `vpn-gateway`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormatRequest AWS API Documentation
    #
    class DescribeIdFormatRequest < Struct.new(
      :resource)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] statuses
    #   Information about the ID format for the resource.
    #   @return [Array<Types::IdFormat>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdFormatResult AWS API Documentation
    #
    class DescribeIdFormatResult < Struct.new(
      :statuses)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource
    #   The type of resource: `bundle` \| `conversion-task` \|
    #   `customer-gateway` \| `dhcp-options` \| `elastic-ip-allocation` \|
    #   `elastic-ip-association` \| `export-task` \| `flow-log` \| `image`
    #   \| `import-task` \| `instance` \| `internet-gateway` \|
    #   `network-acl` \| `network-acl-association` \| `network-interface` \|
    #   `network-interface-attachment` \| `prefix-list` \| `reservation` \|
    #   `route-table` \| `route-table-association` \| `security-group` \|
    #   `snapshot` \| `subnet` \| `subnet-cidr-block-association` \|
    #   `volume` \| `vpc` \| `vpc-cidr-block-association` \| `vpc-endpoint`
    #   \| `vpc-peering-connection` \| `vpn-connection` \| `vpn-gateway`
    #   @return [String]
    #
    # @!attribute [rw] principal_arn
    #   The ARN of the principal, which can be an IAM role, IAM user, or the
    #   root user.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormatRequest AWS API Documentation
    #
    class DescribeIdentityIdFormatRequest < Struct.new(
      :resource,
      :principal_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] statuses
    #   Information about the ID format for the resources.
    #   @return [Array<Types::IdFormat>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIdentityIdFormatResult AWS API Documentation
    #
    class DescribeIdentityIdFormatResult < Struct.new(
      :statuses)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeImageAttribute.
    #
    # @!attribute [rw] attribute
    #   The AMI attribute.
    #
    #   **Note**: The `blockDeviceMapping` attribute is deprecated. Using
    #   this attribute returns the `Client.AuthFailure` error. To get
    #   information about the block device mappings for an AMI, describe the
    #   image instead.
    #   @return [String]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageAttributeRequest AWS API Documentation
    #
    class DescribeImageAttributeRequest < Struct.new(
      :attribute,
      :image_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_ids
    #   The IDs of the images to check for resource references.
    #   @return [Array<String>]
    #
    # @!attribute [rw] include_all_resource_types
    #   Specifies whether to check all supported Amazon Web Services
    #   resource types for image references. When specified, default values
    #   are applied for `ResourceTypeOptions`. For the default values, see
    #   [How AMI reference checks work][1] in the *Amazon EC2 User Guide*.
    #   If you also specify `ResourceTypes` with `ResourceTypeOptions`, your
    #   specified values override the default values.
    #
    #   Supported resource types: `ec2:Instance` \| `ec2:LaunchTemplate` \|
    #   `ssm:Parameter` \| `imagebuilder:ImageRecipe` \|
    #   `imagebuilder:ContainerRecipe`
    #
    #   Either `IncludeAllResourceTypes` or `ResourceTypes` must be
    #   specified.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-ami-references.html#how-ami-references-works
    #   @return [Boolean]
    #
    # @!attribute [rw] resource_types
    #   The Amazon Web Services resource types to check for image
    #   references.
    #
    #   Either `IncludeAllResourceTypes` or `ResourceTypes` must be
    #   specified.
    #   @return [Array<Types::ResourceTypeRequest>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageReferencesRequest AWS API Documentation
    #
    class DescribeImageReferencesRequest < Struct.new(
      :image_ids,
      :include_all_resource_types,
      :resource_types,
      :next_token,
      :dry_run,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] image_references
    #   The resources that are referencing the specified images.
    #   @return [Array<Types::ImageReference>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageReferencesResult AWS API Documentation
    #
    class DescribeImageReferencesResult < Struct.new(
      :next_token,
      :image_references)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_ids
    #   The IDs of the images for filtering the report entries. If
    #   specified, only report entries containing these images are returned.
    #   @return [Array<String>]
    #
    # @!attribute [rw] report_ids
    #   The IDs of the usage reports.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `account-id` - A 12-digit Amazon Web Services account ID.
    #
    #   * `creation-time` - The time when the report was created, in the ISO
    #     8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for
    #     example, `2025-11-29T11:04:43.305Z`. You can use a wildcard (`*`),
    #     for example, `2025-11-29T*`, which matches an entire day.
    #
    #   * `resource-type` - The resource type (`ec2:Instance` \|
    #     `ec2:LaunchTemplate`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageUsageReportEntriesRequest AWS API Documentation
    #
    class DescribeImageUsageReportEntriesRequest < Struct.new(
      :image_ids,
      :report_ids,
      :next_token,
      :filters,
      :dry_run,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] image_usage_report_entries
    #   The content of the usage reports.
    #   @return [Array<Types::ImageUsageReportEntry>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageUsageReportEntriesResult AWS API Documentation
    #
    class DescribeImageUsageReportEntriesResult < Struct.new(
      :next_token,
      :image_usage_report_entries)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_ids
    #   The IDs of the images for filtering the reports. If specified, only
    #   reports containing these images are returned.
    #   @return [Array<String>]
    #
    # @!attribute [rw] report_ids
    #   The IDs of the image usage reports.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `creation-time` - The time when the report was created, in the ISO
    #     8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for
    #     example, `2025-11-29T11:04:43.305Z`. You can use a wildcard (`*`),
    #     for example, `2025-11-29T*`, which matches an entire day.
    #
    #   * `state` - The state of the report (`available` \| `pending` \|
    #     `error`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageUsageReportsRequest AWS API Documentation
    #
    class DescribeImageUsageReportsRequest < Struct.new(
      :image_ids,
      :report_ids,
      :next_token,
      :filters,
      :dry_run,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] image_usage_reports
    #   The image usage reports.
    #   @return [Array<Types::ImageUsageReport>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImageUsageReportsResult AWS API Documentation
    #
    class DescribeImageUsageReportsResult < Struct.new(
      :next_token,
      :image_usage_reports)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] executable_users
    #   Scopes the images by users with explicit launch permissions. Specify
    #   an Amazon Web Services account ID, `self` (the sender of the
    #   request), or `all` (public AMIs).
    #
    #   * If you specify an Amazon Web Services account ID that is not your
    #     own, only AMIs shared with that specific Amazon Web Services
    #     account ID are returned. However, AMIs that are shared with the
    #     account’s organization or organizational unit (OU) are not
    #     returned.
    #
    #   * If you specify `self` or your own Amazon Web Services account ID,
    #     AMIs shared with your account are returned. In addition, AMIs that
    #     are shared with the organization or OU of which you are member are
    #     also returned.
    #
    #   * If you specify `all`, all public AMIs are returned.
    #   @return [Array<String>]
    #
    # @!attribute [rw] image_ids
    #   The image IDs.
    #
    #   Default: Describes all images available to you.
    #   @return [Array<String>]
    #
    # @!attribute [rw] owners
    #   Scopes the results to images with the specified owners. You can
    #   specify a combination of Amazon Web Services account IDs, `self`,
    #   `amazon`, `aws-backup-vault`, and `aws-marketplace`. If you omit
    #   this parameter, the results include all images for which you have
    #   launch permissions, regardless of ownership.
    #   @return [Array<String>]
    #
    # @!attribute [rw] include_deprecated
    #   Specifies whether to include deprecated AMIs.
    #
    #   Default: No deprecated AMIs are included in the response.
    #
    #   <note markdown="1"> If you are the AMI owner, all deprecated AMIs appear in the response
    #   regardless of what you specify for this parameter.
    #
    #    </note>
    #   @return [Boolean]
    #
    # @!attribute [rw] include_disabled
    #   Specifies whether to include disabled AMIs.
    #
    #   Default: No disabled AMIs are included in the response.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `architecture` - The image architecture (`i386` \| `x86_64` \|
    #     `arm64` \| `x86_64_mac` \| `arm64_mac`).
    #
    #   * `block-device-mapping.delete-on-termination` - A Boolean value
    #     that indicates whether the Amazon EBS volume is deleted on
    #     instance termination.
    #
    #   * `block-device-mapping.device-name` - The device name specified in
    #     the block device mapping (for example, `/dev/sdh` or `xvdh`).
    #
    #   * `block-device-mapping.snapshot-id` - The ID of the snapshot used
    #     for the Amazon EBS volume.
    #
    #   * `block-device-mapping.volume-size` - The volume size of the Amazon
    #     EBS volume, in GiB.
    #
    #   * `block-device-mapping.volume-type` - The volume type of the Amazon
    #     EBS volume (`io1` \| `io2` \| `gp2` \| `gp3` \| `sc1 `\| `st1` \|
    #     `standard`).
    #
    #   * `block-device-mapping.encrypted` - A Boolean that indicates
    #     whether the Amazon EBS volume is encrypted.
    #
    #   * `creation-date` - The time when the image was created, in the ISO
    #     8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for
    #     example, `2021-09-29T11:04:43.305Z`. You can use a wildcard (`*`),
    #     for example, `2021-09-29T*`, which matches an entire day.
    #
    #   * `description` - The description of the image (provided during
    #     image creation).
    #
    #   * `ena-support` - A Boolean that indicates whether enhanced
    #     networking with ENA is enabled.
    #
    #   * `free-tier-eligible` - A Boolean that indicates whether this image
    #     can be used under the Amazon Web Services Free Tier (`true` \|
    #     `false`).
    #
    #   * `hypervisor` - The hypervisor type (`ovm` \| `xen`).
    #
    #   * `image-allowed` - A Boolean that indicates whether the image meets
    #     the criteria specified for Allowed AMIs.
    #
    #   * `image-id` - The ID of the image.
    #
    #   * `image-type` - The image type (`machine` \| `kernel` \|
    #     `ramdisk`).
    #
    #   * `is-public` - A Boolean that indicates whether the image is
    #     public.
    #
    #   * `kernel-id` - The kernel ID.
    #
    #   * `manifest-location` - The location of the image manifest.
    #
    #   * `name` - The name of the AMI (provided during image creation).
    #
    #   * `owner-alias` - The owner alias (`amazon` \| `aws-backup-vault` \|
    #     `aws-marketplace`). The valid aliases are defined in an
    #     Amazon-maintained list. This is not the Amazon Web Services
    #     account alias that can be set using the IAM console. We recommend
    #     that you use the **Owner** request parameter instead of this
    #     filter.
    #
    #   * `owner-id` - The Amazon Web Services account ID of the owner. We
    #     recommend that you use the **Owner** request parameter instead of
    #     this filter.
    #
    #   * `platform` - The platform. The only supported value is `windows`.
    #
    #   * `product-code` - The product code.
    #
    #   * `product-code.type` - The type of the product code
    #     (`marketplace`).
    #
    #   * `ramdisk-id` - The RAM disk ID.
    #
    #   * `root-device-name` - The device name of the root device volume
    #     (for example, `/dev/sda1`).
    #
    #   * `root-device-type` - The type of the root device volume (`ebs` \|
    #     `instance-store`).
    #
    #   * `source-image-id` - The ID of the source AMI from which the AMI
    #     was created.
    #
    #   * `source-image-region` - The Region of the source AMI.
    #
    #   * `source-instance-id` - The ID of the instance that the AMI was
    #     created from if the AMI was created using CreateImage. This filter
    #     is applicable only if the AMI was created using [CreateImage][1].
    #
    #   * `state` - The state of the image (`available` \| `pending` \|
    #     `failed`).
    #
    #   * `state-reason-code` - The reason code for the state change.
    #
    #   * `state-reason-message` - The message for the state change.
    #
    #   * `sriov-net-support` - A value of `simple` indicates that enhanced
    #     networking with the Intel 82599 VF interface is enabled.
    #
    #   * `tag:<key>` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `virtualization-type` - The virtualization type (`paravirtual` \|
    #     `hvm`).
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImagesRequest AWS API Documentation
    #
    class DescribeImagesRequest < Struct.new(
      :executable_users,
      :image_ids,
      :owners,
      :include_deprecated,
      :include_disabled,
      :max_results,
      :next_token,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] images
    #   Information about the images.
    #   @return [Array<Types::Image>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImagesResult AWS API Documentation
    #
    class DescribeImagesResult < Struct.new(
      :next_token,
      :images)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   Filter tasks using the `task-state` filter and one of the following
    #   values: `active`, `completed`, `deleting`, or `deleted`.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] import_task_ids
    #   The IDs of the import image tasks.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   A token that indicates the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasksRequest AWS API Documentation
    #
    class DescribeImportImageTasksRequest < Struct.new(
      :dry_run,
      :filters,
      :import_task_ids,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] import_image_tasks
    #   A list of zero or more import image tasks that are currently active
    #   or were completed or canceled in the previous 7 days.
    #   @return [Array<Types::ImportImageTask>]
    #
    # @!attribute [rw] next_token
    #   The token to use to get the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportImageTasksResult AWS API Documentation
    #
    class DescribeImportImageTasksResult < Struct.new(
      :import_image_tasks,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] import_task_ids
    #   A list of import snapshot task IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `NextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   A token that indicates the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasksRequest AWS API Documentation
    #
    class DescribeImportSnapshotTasksRequest < Struct.new(
      :dry_run,
      :filters,
      :import_task_ids,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] import_snapshot_tasks
    #   A list of zero or more import snapshot tasks that are currently
    #   active or were completed or canceled in the previous 7 days.
    #   @return [Array<Types::ImportSnapshotTask>]
    #
    # @!attribute [rw] next_token
    #   The token to use to get the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeImportSnapshotTasksResult AWS API Documentation
    #
    class DescribeImportSnapshotTasksResult < Struct.new(
      :import_snapshot_tasks,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] attribute
    #   The instance attribute.
    #
    #   Note that the `enaSupport` attribute is not supported.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceAttributeRequest AWS API Documentation
    #
    class DescribeInstanceAttributeRequest < Struct.new(
      :dry_run,
      :instance_id,
      :attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `instance-connect-endpoint-id` - The ID of the EC2 Instance
    #     Connect Endpoint.
    #
    #   * `state` - The state of the EC2 Instance Connect Endpoint
    #     (`create-in-progress` \| `create-complete` \| `create-failed` \|
    #     `delete-in-progress` \| `delete-complete` \| `delete-failed`).
    #
    #   * `subnet-id` - The ID of the subnet in which the EC2 Instance
    #     Connect Endpoint was created.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `tag-value` - The value of a tag assigned to the resource. Use
    #     this filter to find all resources that have a tag with a specific
    #     value, regardless of tag key.
    #
    #   * `vpc-id` - The ID of the VPC in which the EC2 Instance Connect
    #     Endpoint was created.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] instance_connect_endpoint_ids
    #   One or more EC2 Instance Connect Endpoint IDs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceConnectEndpointsRequest AWS API Documentation
    #
    class DescribeInstanceConnectEndpointsRequest < Struct.new(
      :dry_run,
      :max_results,
      :next_token,
      :filters,
      :instance_connect_endpoint_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_connect_endpoints
    #   Information about the EC2 Instance Connect Endpoints.
    #   @return [Array<Types::Ec2InstanceConnectEndpoint>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceConnectEndpointsResult AWS API Documentation
    #
    class DescribeInstanceConnectEndpointsResult < Struct.new(
      :instance_connect_endpoints,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `instance-id` - The ID of the instance.
    #
    #   ^
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] instance_ids
    #   The instance IDs.
    #
    #   Default: Describes all your instances.
    #
    #   Constraints: Maximum 1000 explicitly specified instance IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #   You cannot specify this parameter and the instance IDs parameter in
    #   the same call.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceCreditSpecificationsRequest AWS API Documentation
    #
    class DescribeInstanceCreditSpecificationsRequest < Struct.new(
      :dry_run,
      :filters,
      :instance_ids,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_credit_specifications
    #   Information about the credit option for CPU usage of an instance.
    #   @return [Array<Types::InstanceCreditSpecification>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceCreditSpecificationsResult AWS API Documentation
    #
    class DescribeInstanceCreditSpecificationsResult < Struct.new(
      :instance_credit_specifications,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceEventNotificationAttributesRequest AWS API Documentation
    #
    class DescribeInstanceEventNotificationAttributesRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_tag_attribute
    #   Information about the registered tag keys.
    #   @return [Types::InstanceTagNotificationAttribute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceEventNotificationAttributesResult AWS API Documentation
    #
    class DescribeInstanceEventNotificationAttributesResult < Struct.new(
      :instance_tag_attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describe instance event windows by InstanceEventWindow.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_event_window_ids
    #   The IDs of the event windows.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `dedicated-host-id` - The event windows associated with the
    #     specified Dedicated Host ID.
    #
    #   * `event-window-name` - The event windows associated with the
    #     specified names.
    #
    #   * `instance-id` - The event windows associated with the specified
    #     instance ID.
    #
    #   * `instance-tag` - The event windows associated with the specified
    #     tag and value.
    #
    #   * `instance-tag-key` - The event windows associated with the
    #     specified tag key, regardless of the value.
    #
    #   * `instance-tag-value` - The event windows associated with the
    #     specified tag value, regardless of the key.
    #
    #   * `tag:<key>` - The key/value combination of a tag assigned to the
    #     event window. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `CMX`, specify
    #     `tag:Owner` for the filter name and `CMX` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the event window. Use
    #     this filter to find all event windows that have a tag with a
    #     specific key, regardless of the tag value.
    #
    #   * `tag-value` - The value of a tag assigned to the event window. Use
    #     this filter to find all event windows that have a tag with a
    #     specific value, regardless of the tag key.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `NextToken` value. This value can be between 20 and 500. You cannot
    #   specify this parameter and the event window IDs parameter in the
    #   same call.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to request the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceEventWindowsRequest AWS API Documentation
    #
    class DescribeInstanceEventWindowsRequest < Struct.new(
      :dry_run,
      :instance_event_window_ids,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_event_windows
    #   Information about the event windows.
    #   @return [Array<Types::InstanceEventWindow>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceEventWindowsResult AWS API Documentation
    #
    class DescribeInstanceEventWindowsResult < Struct.new(
      :instance_event_windows,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone` - The name of the Availability Zone (for
    #     example, `us-west-2a`) or Local Zone (for example,
    #     `us-west-2-lax-1b`) of the instance.
    #
    #   * `instance-id` - The ID of the instance.
    #
    #   * `image-allowed` - A Boolean that indicates whether the image meets
    #     the criteria specified for Allowed AMIs.
    #
    #   * `instance-state-name` - The state of the instance (`pending` \|
    #     `running` \| `shutting-down` \| `terminated` \| `stopping` \|
    #     `stopped`).
    #
    #   * `instance-type` - The type of instance (for example, `t3.micro`).
    #
    #   * `launch-time` - The time when the instance was launched, in the
    #     ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ),
    #     for example, `2023-09-29T11:04:43.305Z`. You can use a wildcard
    #     (`*`), for example, `2023-09-29T*`, which matches an entire day.
    #
    #   * `owner-alias` - The owner alias (`amazon` \| `aws-marketplace` \|
    #     `aws-backup-vault`). The valid aliases are defined in an
    #     Amazon-maintained list. This is not the Amazon Web Services
    #     account alias that can be set using the IAM console. We recommend
    #     that you use the `Owner` request parameter instead of this filter.
    #
    #   * `owner-id` - The Amazon Web Services account ID of the owner. We
    #     recommend that you use the `Owner` request parameter instead of
    #     this filter.
    #
    #   * `tag:<key>` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `zone-id` - The ID of the Availability Zone (for example,
    #     `usw2-az2`) or Local Zone (for example, `usw2-lax1-az1`) of the
    #     instance.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] instance_ids
    #   The instance IDs.
    #
    #   If you don't specify an instance ID or filters, the output includes
    #   information for all instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #   Default: 1000
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceImageMetadataRequest AWS API Documentation
    #
    class DescribeInstanceImageMetadataRequest < Struct.new(
      :filters,
      :instance_ids,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_image_metadata
    #   Information about the instance and the AMI used to launch the
    #   instance.
    #   @return [Array<Types::InstanceImageMetadata>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceImageMetadataResult AWS API Documentation
    #
    class DescribeInstanceImageMetadataResult < Struct.new(
      :instance_image_metadata,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_ids
    #   The instance IDs.
    #
    #   Default: Describes all your instances.
    #
    #   Constraints: Maximum 100 explicitly specified instance IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #   You cannot specify this parameter and the instance IDs parameter in
    #   the same request.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone` - The Availability Zone of the instance.
    #
    #   * `availability-zone-id` - The ID of the Availability Zone of the
    #     instance.
    #
    #   * `event.code` - The code for the scheduled event (`instance-reboot`
    #     \| `system-reboot` \| `system-maintenance` \|
    #     `instance-retirement` \| `instance-stop`).
    #
    #   * `event.description` - A description of the event.
    #
    #   * `event.instance-event-id` - The ID of the event whose date and
    #     time you are modifying.
    #
    #   * `event.not-after` - The latest end time for the scheduled event
    #     (for example, `2014-09-15T17:15:20.000Z`).
    #
    #   * `event.not-before` - The earliest start time for the scheduled
    #     event (for example, `2014-09-15T17:15:20.000Z`).
    #
    #   * `event.not-before-deadline` - The deadline for starting the event
    #     (for example, `2014-09-15T17:15:20.000Z`).
    #
    #   * `instance-state-code` - The code for the instance state, as a
    #     16-bit unsigned integer. The high byte is used for internal
    #     purposes and should be ignored. The low byte is set based on the
    #     state represented. The valid values are 0 (pending), 16 (running),
    #     32 (shutting-down), 48 (terminated), 64 (stopping), and 80
    #     (stopped).
    #
    #   * `instance-state-name` - The state of the instance (`pending` \|
    #     `running` \| `shutting-down` \| `terminated` \| `stopping` \|
    #     `stopped`).
    #
    #   * `instance-status.reachability` - Filters on instance status where
    #     the name is `reachability` (`passed` \| `failed` \| `initializing`
    #     \| `insufficient-data`).
    #
    #   * `instance-status.status` - The status of the instance (`ok` \|
    #     `impaired` \| `initializing` \| `insufficient-data` \|
    #     `not-applicable`).
    #
    #   * `operator.managed` - A Boolean that indicates whether this is a
    #     managed instance.
    #
    #   * `operator.principal` - The principal that manages the instance.
    #     Only valid for managed instances, where `managed` is `true`.
    #
    #   * `system-status.reachability` - Filters on system status where the
    #     name is `reachability` (`passed` \| `failed` \| `initializing` \|
    #     `insufficient-data`).
    #
    #   * `system-status.status` - The system status of the instance (`ok`
    #     \| `impaired` \| `initializing` \| `insufficient-data` \|
    #     `not-applicable`).
    #
    #   * `attached-ebs-status.status` - The status of the attached EBS
    #     volume for the instance (`ok` \| `impaired` \| `initializing` \|
    #     `insufficient-data` \| `not-applicable`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] include_all_instances
    #   When `true`, includes the health status for all instances. When
    #   `false`, includes the health status for running instances only.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatusRequest AWS API Documentation
    #
    class DescribeInstanceStatusRequest < Struct.new(
      :instance_ids,
      :max_results,
      :next_token,
      :dry_run,
      :filters,
      :include_all_instances)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_statuses
    #   Information about the status of the instances.
    #   @return [Array<Types::InstanceStatus>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceStatusResult AWS API Documentation
    #
    class DescribeInstanceStatusResult < Struct.new(
      :instance_statuses,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #   You can't specify this parameter and the instance IDs parameter in
    #   the same request.
    #
    #   Default: `20`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] instance_ids
    #   The instance IDs.
    #
    #   Default: Describes all your instances.
    #
    #   Constraints: Maximum 100 explicitly specified instance IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] group_names
    #   The name of the placement group that each instance is in.
    #
    #   Constraints: Maximum 100 explicitly specified placement group names.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone` - The name of the Availability Zone (for
    #     example, `us-west-2a`) or Local Zone (for example,
    #     `us-west-2-lax-1b`) that the instance is in.
    #
    #   * `instance-type` - The instance type (for example, `p4d.24xlarge`)
    #     or instance family (for example, `p4d*`). You can use the `*`
    #     wildcard to match zero or more characters, or the `?` wildcard to
    #     match zero or one character.
    #
    #   * `zone-id` - The ID of the Availability Zone (for example,
    #     `usw2-az2`) or Local Zone (for example, `usw2-lax1-az1`) that the
    #     instance is in.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTopologyRequest AWS API Documentation
    #
    class DescribeInstanceTopologyRequest < Struct.new(
      :dry_run,
      :next_token,
      :max_results,
      :instance_ids,
      :group_names,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instances
    #   Information about the topology of each instance.
    #   @return [Array<Types::InstanceTopology>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTopologyResult AWS API Documentation
    #
    class DescribeInstanceTopologyResult < Struct.new(
      :instances,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] location_type
    #   The location type.
    #
    #   * `availability-zone` - The Availability Zone. When you specify a
    #     location filter, it must be an Availability Zone for the current
    #     Region.
    #
    #   * `availability-zone-id` - The AZ ID. When you specify a location
    #     filter, it must be an AZ ID for the current Region.
    #
    #   * `outpost` - The Outpost ARN. When you specify a location filter,
    #     it must be an Outpost ARN for the current Region.
    #
    #   * `region` - The current Region. If you specify a location filter,
    #     it must match the current Region.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #
    #   * `instance-type` - The instance type. For a list of possible
    #     values, see [Instance][1].
    #
    #   * `location` - The location. For a list of possible identifiers, see
    #     [Regions and Zones][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Instance.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypeOfferingsRequest AWS API Documentation
    #
    class DescribeInstanceTypeOfferingsRequest < Struct.new(
      :dry_run,
      :location_type,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_type_offerings
    #   The instance types offered in the location.
    #   @return [Array<Types::InstanceTypeOffering>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypeOfferingsResult AWS API Documentation
    #
    class DescribeInstanceTypeOfferingsResult < Struct.new(
      :instance_type_offerings,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_types
    #   The instance types.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #
    #   * `auto-recovery-supported` - Indicates whether Amazon CloudWatch
    #     action based recovery is supported (`true` \| `false`).
    #
    #   * `bare-metal` - Indicates whether it is a bare metal instance type
    #     (`true` \| `false`).
    #
    #   * `burstable-performance-supported` - Indicates whether the instance
    #     type is a burstable performance T instance type (`true` \|
    #     `false`).
    #
    #   * `current-generation` - Indicates whether this instance type is the
    #     latest generation instance type of an instance family (`true` \|
    #     `false`).
    #
    #   * `dedicated-hosts-supported` - Indicates whether the instance type
    #     supports Dedicated Hosts. (`true` \| `false`)
    #
    #   * `ebs-info.attachment-limit-type` - The type of Amazon EBS volume
    #     attachment limit (`shared` \| `dedicated`).
    #
    #   * `ebs-info.maximum-ebs-attachments` - The maximum number of Amazon
    #     EBS volumes that can be attached to the instance type.
    #
    #   * `ebs-info.ebs-optimized-info.baseline-bandwidth-in-mbps` - The
    #     baseline bandwidth performance for an EBS-optimized instance type,
    #     in Mbps.
    #
    #   * `ebs-info.ebs-optimized-info.baseline-iops` - The baseline
    #     input/output storage operations per second for an EBS-optimized
    #     instance type.
    #
    #   * `ebs-info.ebs-optimized-info.baseline-throughput-in-mbps` - The
    #     baseline throughput performance for an EBS-optimized instance
    #     type, in MB/s.
    #
    #   * `ebs-info.ebs-optimized-info.maximum-bandwidth-in-mbps` - The
    #     maximum bandwidth performance for an EBS-optimized instance type,
    #     in Mbps.
    #
    #   * `ebs-info.ebs-optimized-info.maximum-iops` - The maximum
    #     input/output storage operations per second for an EBS-optimized
    #     instance type.
    #
    #   * `ebs-info.ebs-optimized-info.maximum-throughput-in-mbps` - The
    #     maximum throughput performance for an EBS-optimized instance type,
    #     in MB/s.
    #
    #   * `ebs-info.ebs-optimized-support` - Indicates whether the instance
    #     type is EBS-optimized (`supported` \| `unsupported` \| `default`).
    #
    #   * `ebs-info.encryption-support` - Indicates whether EBS encryption
    #     is supported (`supported` \| `unsupported`).
    #
    #   * `ebs-info.nvme-support` - Indicates whether non-volatile memory
    #     express (NVMe) is supported for EBS volumes (`required` \|
    #     `supported` \| `unsupported`).
    #
    #   * `free-tier-eligible` - A Boolean that indicates whether this
    #     instance type can be used under the Amazon Web Services Free Tier
    #     (`true` \| `false`).
    #
    #   * `hibernation-supported` - Indicates whether On-Demand hibernation
    #     is supported (`true` \| `false`).
    #
    #   * `hypervisor` - The hypervisor (`nitro` \| `xen`).
    #
    #   * `instance-storage-info.disk.count` - The number of local disks.
    #
    #   * `instance-storage-info.disk.size-in-gb` - The storage size of each
    #     instance storage disk, in GB.
    #
    #   * `instance-storage-info.disk.type` - The storage technology for the
    #     local instance storage disks (`hdd` \| `ssd`).
    #
    #   * `instance-storage-info.encryption-support` - Indicates whether
    #     data is encrypted at rest (`required` \| `supported` \|
    #     `unsupported`).
    #
    #   * `instance-storage-info.nvme-support` - Indicates whether
    #     non-volatile memory express (NVMe) is supported for instance store
    #     (`required` \| `supported` \| `unsupported`).
    #
    #   * `instance-storage-info.total-size-in-gb` - The total amount of
    #     storage available from all local instance storage, in GB.
    #
    #   * `instance-storage-supported` - Indicates whether the instance type
    #     has local instance storage (`true` \| `false`).
    #
    #   * `instance-type` - The instance type (for example `c5.2xlarge` or
    #     c5*).
    #
    #   * `memory-info.size-in-mib` - The memory size.
    #
    #   * `network-info.bandwidth-weightings` - For instances that support
    #     bandwidth weighting to boost performance (`default`, `vpc-1`,
    #     `ebs-1`).
    #
    #   * `network-info.efa-info.maximum-efa-interfaces` - The maximum
    #     number of Elastic Fabric Adapters (EFAs) per instance.
    #
    #   * `network-info.efa-supported` - Indicates whether the instance type
    #     supports Elastic Fabric Adapter (EFA) (`true` \| `false`).
    #
    #   * `network-info.ena-support` - Indicates whether Elastic Network
    #     Adapter (ENA) is supported or required (`required` \| `supported`
    #     \| `unsupported`).
    #
    #   * `network-info.flexible-ena-queues-support` - Indicates whether an
    #     instance supports flexible ENA queues (`supported` \|
    #     `unsupported`).
    #
    #   * `network-info.encryption-in-transit-supported` - Indicates whether
    #     the instance type automatically encrypts in-transit traffic
    #     between instances (`true` \| `false`).
    #
    #   * `network-info.ipv4-addresses-per-interface` - The maximum number
    #     of private IPv4 addresses per network interface.
    #
    #   * `network-info.ipv6-addresses-per-interface` - The maximum number
    #     of private IPv6 addresses per network interface.
    #
    #   * `network-info.ipv6-supported` - Indicates whether the instance
    #     type supports IPv6 (`true` \| `false`).
    #
    #   * `network-info.maximum-network-cards` - The maximum number of
    #     network cards per instance.
    #
    #   * `network-info.maximum-network-interfaces` - The maximum number of
    #     network interfaces per instance.
    #
    #   * `network-info.network-performance` - The network performance (for
    #     example, "25 Gigabit").
    #
    #   * `nitro-enclaves-support` - Indicates whether Nitro Enclaves is
    #     supported (`supported` \| `unsupported`).
    #
    #   * `nitro-tpm-support` - Indicates whether NitroTPM is supported
    #     (`supported` \| `unsupported`).
    #
    #   * `nitro-tpm-info.supported-versions` - The supported NitroTPM
    #     version (`2.0`).
    #
    #   * `processor-info.supported-architecture` - The CPU architecture
    #     (`arm64` \| `i386` \| `x86_64`).
    #
    #   * `processor-info.sustained-clock-speed-in-ghz` - The CPU clock
    #     speed, in GHz.
    #
    #   * `processor-info.supported-features` - The supported CPU features
    #     (`amd-sev-snp`).
    #
    #   * `reboot-migration-support` - Indicates whether enabling reboot
    #     migration is supported (`supported` \| `unsupported`).
    #
    #   * `supported-boot-mode` - The boot mode (`legacy-bios` \| `uefi`).
    #
    #   * `supported-root-device-type` - The root device type (`ebs` \|
    #     `instance-store`).
    #
    #   * `supported-usage-class` - The usage class (`on-demand` \| `spot`
    #     \| `capacity-block`).
    #
    #   * `supported-virtualization-type` - The virtualization type (`hvm`
    #     \| `paravirtual`).
    #
    #   * `vcpu-info.default-cores` - The default number of cores for the
    #     instance type.
    #
    #   * `vcpu-info.default-threads-per-core` - The default number of
    #     threads per core for the instance type.
    #
    #   * `vcpu-info.default-vcpus` - The default number of vCPUs for the
    #     instance type.
    #
    #   * `vcpu-info.valid-cores` - The number of cores that can be
    #     configured for the instance type.
    #
    #   * `vcpu-info.valid-threads-per-core` - The number of threads per
    #     core that can be configured for the instance type. For example,
    #     "1" or "1,2".
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypesRequest AWS API Documentation
    #
    class DescribeInstanceTypesRequest < Struct.new(
      :dry_run,
      :instance_types,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_types
    #   The instance type.
    #   @return [Array<Types::InstanceTypeInfo>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstanceTypesResult AWS API Documentation
    #
    class DescribeInstanceTypesResult < Struct.new(
      :instance_types,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_ids
    #   The instance IDs.
    #
    #   Default: Describes all your instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `affinity` - The affinity setting for an instance running on a
    #     Dedicated Host (`default` \| `host`).
    #
    #   * `architecture` - The instance architecture (`i386` \| `x86_64` \|
    #     `arm64`).
    #
    #   * `availability-zone` - The Availability Zone of the instance.
    #
    #   * `availability-zone-id` - The ID of the Availability Zone of the
    #     instance.
    #
    #   * `block-device-mapping.attach-time` - The attach time for an EBS
    #     volume mapped to the instance, for example,
    #     `2022-09-15T17:15:20.000Z`.
    #
    #   * `block-device-mapping.delete-on-termination` - A Boolean that
    #     indicates whether the EBS volume is deleted on instance
    #     termination.
    #
    #   * `block-device-mapping.device-name` - The device name specified in
    #     the block device mapping (for example, `/dev/sdh` or `xvdh`).
    #
    #   * `block-device-mapping.status` - The status for the EBS volume
    #     (`attaching` \| `attached` \| `detaching` \| `detached`).
    #
    #   * `block-device-mapping.volume-id` - The volume ID of the EBS
    #     volume.
    #
    #   * `boot-mode` - The boot mode that was specified by the AMI
    #     (`legacy-bios` \| `uefi` \| `uefi-preferred`).
    #
    #   * `capacity-reservation-id` - The ID of the Capacity Reservation
    #     into which the instance was launched.
    #
    #   * `capacity-reservation-specification.capacity-reservation-preference`
    #     - The instance's Capacity Reservation preference (`open` \|
    #     `none`).
    #
    #   * `capacity-reservation-specification.capacity-reservation-target.capacity-reservation-id`
    #     - The ID of the targeted Capacity Reservation.
    #
    #   * `capacity-reservation-specification.capacity-reservation-target.capacity-reservation-resource-group-arn`
    #     - The ARN of the targeted Capacity Reservation group.
    #
    #   * `client-token` - The idempotency token you provided when you
    #     launched the instance.
    #
    #   * `current-instance-boot-mode` - The boot mode that is used to
    #     launch the instance at launch or start (`legacy-bios` \| `uefi`).
    #
    #   * `dns-name` - The public DNS name of the instance.
    #
    #   * `ebs-optimized` - A Boolean that indicates whether the instance is
    #     optimized for Amazon EBS I/O.
    #
    #   * `ena-support` - A Boolean that indicates whether the instance is
    #     enabled for enhanced networking with ENA.
    #
    #   * `enclave-options.enabled` - A Boolean that indicates whether the
    #     instance is enabled for Amazon Web Services Nitro Enclaves.
    #
    #   * `hibernation-options.configured` - A Boolean that indicates
    #     whether the instance is enabled for hibernation. A value of `true`
    #     means that the instance is enabled for hibernation.
    #
    #   * `host-id` - The ID of the Dedicated Host on which the instance is
    #     running, if applicable.
    #
    #   * `hypervisor` - The hypervisor type of the instance (`ovm` \|
    #     `xen`). The value `xen` is used for both Xen and Nitro
    #     hypervisors.
    #
    #   * `iam-instance-profile.arn` - The instance profile associated with
    #     the instance. Specified as an ARN.
    #
    #   * `iam-instance-profile.id` - The instance profile associated with
    #     the instance. Specified as an ID.
    #
    #   * `image-id` - The ID of the image used to launch the instance.
    #
    #   * `instance-id` - The ID of the instance.
    #
    #   * `instance-lifecycle` - Indicates whether this is a Spot Instance,
    #     a Scheduled Instance, or a Capacity Block (`spot` \| `scheduled`
    #     \| `capacity-block`).
    #
    #   * `instance-state-code` - The state of the instance, as a 16-bit
    #     unsigned integer. The high byte is used for internal purposes and
    #     should be ignored. The low byte is set based on the state
    #     represented. The valid values are: 0 (pending), 16 (running), 32
    #     (shutting-down), 48 (terminated), 64 (stopping), and 80 (stopped).
    #
    #   * `instance-state-name` - The state of the instance (`pending` \|
    #     `running` \| `shutting-down` \| `terminated` \| `stopping` \|
    #     `stopped`).
    #
    #   * `instance-type` - The type of instance (for example, `t2.micro`).
    #
    #   * `instance.group-id` - The ID of the security group for the
    #     instance.
    #
    #   * `instance.group-name` - The name of the security group for the
    #     instance.
    #
    #   * `ip-address` - The public IPv4 address of the instance.
    #
    #   * `ipv6-address` - The IPv6 address of the instance.
    #
    #   * `kernel-id` - The kernel ID.
    #
    #   * `key-name` - The name of the key pair used when the instance was
    #     launched.
    #
    #   * `launch-index` - When launching multiple instances, this is the
    #     index for the instance in the launch group (for example, 0, 1, 2,
    #     and so on).
    #
    #   * `launch-time` - The time when the instance was launched, in the
    #     ISO 8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ),
    #     for example, `2021-09-29T11:04:43.305Z`. You can use a wildcard
    #     (`*`), for example, `2021-09-29T*`, which matches an entire day.
    #
    #   * `maintenance-options.auto-recovery` - The current automatic
    #     recovery behavior of the instance (`disabled` \| `default`).
    #
    #   * `metadata-options.http-endpoint` - The status of access to the
    #     HTTP metadata endpoint on your instance (`enabled` \| `disabled`)
    #
    #   * `metadata-options.http-protocol-ipv4` - Indicates whether the IPv4
    #     endpoint is enabled (`disabled` \| `enabled`).
    #
    #   * `metadata-options.http-protocol-ipv6` - Indicates whether the IPv6
    #     endpoint is enabled (`disabled` \| `enabled`).
    #
    #   * `metadata-options.http-put-response-hop-limit` - The HTTP metadata
    #     request put response hop limit (integer, possible values `1` to
    #     `64`)
    #
    #   * `metadata-options.http-tokens` - The metadata request
    #     authorization state (`optional` \| `required`)
    #
    #   * `metadata-options.instance-metadata-tags` - The status of access
    #     to instance tags from the instance metadata (`enabled` \|
    #     `disabled`)
    #
    #   * `metadata-options.state` - The state of the metadata option
    #     changes (`pending` \| `applied`).
    #
    #   * `monitoring-state` - Indicates whether detailed monitoring is
    #     enabled (`disabled` \| `enabled`).
    #
    #   * `network-interface.addresses.association.allocation-id` - The
    #     allocation ID.
    #
    #   * `network-interface.addresses.association.association-id` - The
    #     association ID.
    #
    #   * `network-interface.addresses.association.carrier-ip` - The carrier
    #     IP address.
    #
    #   * `network-interface.addresses.association.customer-owned-ip` - The
    #     customer-owned IP address.
    #
    #   * `network-interface.addresses.association.ip-owner-id` - The owner
    #     ID of the private IPv4 address associated with the network
    #     interface.
    #
    #   * `network-interface.addresses.association.public-dns-name` - The
    #     public DNS name.
    #
    #   * `network-interface.addresses.association.public-ip` - The ID of
    #     the association of an Elastic IP address (IPv4) with a network
    #     interface.
    #
    #   * `network-interface.addresses.primary` - Specifies whether the IPv4
    #     address of the network interface is the primary private IPv4
    #     address.
    #
    #   * `network-interface.addresses.private-dns-name` - The private DNS
    #     name.
    #
    #   * `network-interface.addresses.private-ip-address` - The private
    #     IPv4 address associated with the network interface.
    #
    #   * `network-interface.association.allocation-id` - The allocation ID
    #     returned when you allocated the Elastic IP address (IPv4) for your
    #     network interface.
    #
    #   * `network-interface.association.association-id` - The association
    #     ID returned when the network interface was associated with an IPv4
    #     address.
    #
    #   * `network-interface.association.carrier-ip` - The customer-owned IP
    #     address.
    #
    #   * `network-interface.association.customer-owned-ip` - The
    #     customer-owned IP address.
    #
    #   * `network-interface.association.ip-owner-id` - The owner of the
    #     Elastic IP address (IPv4) associated with the network interface.
    #
    #   * `network-interface.association.public-dns-name` - The public DNS
    #     name.
    #
    #   * `network-interface.association.public-ip` - The address of the
    #     Elastic IP address (IPv4) bound to the network interface.
    #
    #   * `network-interface.attachment.attach-time` - The time that the
    #     network interface was attached to an instance.
    #
    #   * `network-interface.attachment.attachment-id` - The ID of the
    #     interface attachment.
    #
    #   * `network-interface.attachment.delete-on-termination` - Specifies
    #     whether the attachment is deleted when an instance is terminated.
    #
    #   * `network-interface.attachment.device-index` - The device index to
    #     which the network interface is attached.
    #
    #   * `network-interface.attachment.instance-id` - The ID of the
    #     instance to which the network interface is attached.
    #
    #   * `network-interface.attachment.instance-owner-id` - The owner ID of
    #     the instance to which the network interface is attached.
    #
    #   * `network-interface.attachment.network-card-index` - The index of
    #     the network card.
    #
    #   * `network-interface.attachment.status` - The status of the
    #     attachment (`attaching` \| `attached` \| `detaching` \|
    #     `detached`).
    #
    #   * `network-interface.availability-zone` - The Availability Zone for
    #     the network interface.
    #
    #   * `network-interface.deny-all-igw-traffic` - A Boolean that
    #     indicates whether a network interface with an IPv6 address is
    #     unreachable from the public internet.
    #
    #   * `network-interface.description` - The description of the network
    #     interface.
    #
    #   * `network-interface.group-id` - The ID of a security group
    #     associated with the network interface.
    #
    #   * `network-interface.group-name` - The name of a security group
    #     associated with the network interface.
    #
    #   * `network-interface.ipv4-prefixes.ipv4-prefix` - The IPv4 prefixes
    #     that are assigned to the network interface.
    #
    #   * `network-interface.ipv6-address` - The IPv6 address associated
    #     with the network interface.
    #
    #   * `network-interface.ipv6-addresses.ipv6-address` - The IPv6 address
    #     associated with the network interface.
    #
    #   * `network-interface.ipv6-addresses.is-primary-ipv6` - A Boolean
    #     that indicates whether this is the primary IPv6 address.
    #
    #   * `network-interface.ipv6-native` - A Boolean that indicates whether
    #     this is an IPv6 only network interface.
    #
    #   * `network-interface.ipv6-prefixes.ipv6-prefix` - The IPv6 prefix
    #     assigned to the network interface.
    #
    #   * `network-interface.mac-address` - The MAC address of the network
    #     interface.
    #
    #   * `network-interface.network-interface-id` - The ID of the network
    #     interface.
    #
    #   * `network-interface.operator.managed` - A Boolean that indicates
    #     whether the instance has a managed network interface.
    #
    #   * `network-interface.operator.principal` - The principal that
    #     manages the network interface. Only valid for instances with
    #     managed network interfaces, where `managed` is `true`.
    #
    #   * `network-interface.outpost-arn` - The ARN of the Outpost.
    #
    #   * `network-interface.owner-id` - The ID of the owner of the network
    #     interface.
    #
    #   * `network-interface.private-dns-name` - The private DNS name of the
    #     network interface.
    #
    #   * `network-interface.private-ip-address` - The private IPv4 address.
    #
    #   * `network-interface.public-dns-name` - The public DNS name.
    #
    #   * `network-interface.requester-id` - The requester ID for the
    #     network interface.
    #
    #   * `network-interface.requester-managed` - Indicates whether the
    #     network interface is being managed by Amazon Web Services.
    #
    #   * `network-interface.status` - The status of the network interface
    #     (`available`) \| `in-use`).
    #
    #   * `network-interface.source-dest-check` - Whether the network
    #     interface performs source/destination checking. A value of `true`
    #     means that checking is enabled, and `false` means that checking is
    #     disabled. The value must be `false` for the network interface to
    #     perform network address translation (NAT) in your VPC.
    #
    #   * `network-interface.subnet-id` - The ID of the subnet for the
    #     network interface.
    #
    #   * `network-interface.tag-key` - The key of a tag assigned to the
    #     network interface.
    #
    #   * `network-interface.tag-value` - The value of a tag assigned to the
    #     network interface.
    #
    #   * `network-interface.vpc-id` - The ID of the VPC for the network
    #     interface.
    #
    #   * `network-performance-options.bandwidth-weighting` - Where the
    #     performance boost is applied, if applicable. Valid values:
    #     `default`, `vpc-1`, `ebs-1`.
    #
    #   * `operator.managed` - A Boolean that indicates whether this is a
    #     managed instance.
    #
    #   * `operator.principal` - The principal that manages the instance.
    #     Only valid for managed instances, where `managed` is `true`.
    #
    #   * `outpost-arn` - The Amazon Resource Name (ARN) of the Outpost.
    #
    #   * `owner-id` - The Amazon Web Services account ID of the instance
    #     owner.
    #
    #   * `placement-group-name` - The name of the placement group for the
    #     instance.
    #
    #   * `placement-partition-number` - The partition in which the instance
    #     is located.
    #
    #   * `platform` - The platform. To list only Windows instances, use
    #     `windows`.
    #
    #   * `platform-details` - The platform (`Linux/UNIX` \| `Red Hat BYOL
    #     Linux` \| ` Red Hat Enterprise Linux` \| `Red Hat Enterprise Linux
    #     with HA` \| `Red Hat Enterprise Linux with High Availability` \|
    #     `Red Hat Enterprise Linux with SQL Server Standard and HA` \| `Red
    #     Hat Enterprise Linux with SQL Server Enterprise and HA` \| `Red
    #     Hat Enterprise Linux with SQL Server Standard` \| `Red Hat
    #     Enterprise Linux with SQL Server Web` \| `Red Hat Enterprise Linux
    #     with SQL Server Enterprise` \| `SQL Server Enterprise` \| `SQL
    #     Server Standard` \| `SQL Server Web` \| `SUSE Linux` \| `Ubuntu
    #     Pro` \| `Windows` \| `Windows BYOL` \| `Windows with SQL Server
    #     Enterprise` \| `Windows with SQL Server Standard` \| `Windows with
    #     SQL Server Web`).
    #
    #   * `private-dns-name` - The private IPv4 DNS name of the instance.
    #
    #   * `private-dns-name-options.enable-resource-name-dns-a-record` - A
    #     Boolean that indicates whether to respond to DNS queries for
    #     instance hostnames with DNS A records.
    #
    #   * `private-dns-name-options.enable-resource-name-dns-aaaa-record` -
    #     A Boolean that indicates whether to respond to DNS queries for
    #     instance hostnames with DNS AAAA records.
    #
    #   * `private-dns-name-options.hostname-type` - The type of hostname
    #     (`ip-name` \| `resource-name`).
    #
    #   * `private-ip-address` - The private IPv4 address of the instance.
    #     This can only be used to filter by the primary IP address of the
    #     network interface attached to the instance. To filter by
    #     additional IP addresses assigned to the network interface, use the
    #     filter `network-interface.addresses.private-ip-address`.
    #
    #   * `product-code` - The product code associated with the AMI used to
    #     launch the instance.
    #
    #   * `product-code.type` - The type of product code (`devpay` \|
    #     `marketplace`).
    #
    #   * `ramdisk-id` - The RAM disk ID.
    #
    #   * `reason` - The reason for the current state of the instance (for
    #     example, shows "User Initiated \[date\]" when you stop or
    #     terminate the instance). Similar to the state-reason-code filter.
    #
    #   * `requester-id` - The ID of the entity that launched the instance
    #     on your behalf (for example, Amazon Web Services Management
    #     Console, Auto Scaling, and so on).
    #
    #   * `reservation-id` - The ID of the instance's reservation. A
    #     reservation ID is created any time you launch an instance. A
    #     reservation ID has a one-to-one relationship with an instance
    #     launch request, but can be associated with more than one instance
    #     if you launch multiple instances using the same launch request.
    #     For example, if you launch one instance, you get one reservation
    #     ID. If you launch ten instances using the same launch request, you
    #     also get one reservation ID.
    #
    #   * `root-device-name` - The device name of the root device volume
    #     (for example, `/dev/sda1`).
    #
    #   * `root-device-type` - The type of the root device volume (`ebs` \|
    #     `instance-store`).
    #
    #   * `source-dest-check` - Indicates whether the instance performs
    #     source/destination checking. A value of `true` means that checking
    #     is enabled, and `false` means that checking is disabled. The value
    #     must be `false` for the instance to perform network address
    #     translation (NAT) in your VPC.
    #
    #   * `spot-instance-request-id` - The ID of the Spot Instance request.
    #
    #   * `state-reason-code` - The reason code for the state change.
    #
    #   * `state-reason-message` - A message that describes the state
    #     change.
    #
    #   * `subnet-id` - The ID of the subnet for the instance.
    #
    #   * `tag:<key>` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources that have a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `tenancy` - The tenancy of an instance (`dedicated` \| `default`
    #     \| `host`).
    #
    #   * `tpm-support` - Indicates if the instance is configured for
    #     NitroTPM support (`v2.0`).
    #
    #   * `usage-operation` - The usage operation value for the instance
    #     (`RunInstances` \| `RunInstances:00g0` \| `RunInstances:0010` \|
    #     `RunInstances:1010` \| `RunInstances:1014` \| `RunInstances:1110`
    #     \| `RunInstances:0014` \| `RunInstances:0210` \|
    #     `RunInstances:0110` \| `RunInstances:0100` \| `RunInstances:0004`
    #     \| `RunInstances:0200` \| `RunInstances:000g` \|
    #     `RunInstances:0g00` \| `RunInstances:0002` \| `RunInstances:0800`
    #     \| `RunInstances:0102` \| `RunInstances:0006` \|
    #     `RunInstances:0202`).
    #
    #   * `usage-operation-update-time` - The time that the usage operation
    #     was last updated, for example, `2022-09-15T17:15:20.000Z`.
    #
    #   * `virtualization-type` - The virtualization type of the instance
    #     (`paravirtual` \| `hvm`).
    #
    #   * `vpc-id` - The ID of the VPC that the instance is running in.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #   You cannot specify this parameter and the instance IDs parameter in
    #   the same request.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstancesRequest AWS API Documentation
    #
    class DescribeInstancesRequest < Struct.new(
      :instance_ids,
      :dry_run,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] reservations
    #   Information about the reservations.
    #   @return [Array<Types::Reservation>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInstancesResult AWS API Documentation
    #
    class DescribeInstancesResult < Struct.new(
      :next_token,
      :reservations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] internet_gateway_ids
    #   The IDs of the internet gateways.
    #
    #   Default: Describes all your internet gateways.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `attachment.state` - The current state of the attachment between
    #     the gateway and the VPC (`available`). Present only if a VPC is
    #     attached.
    #
    #   * `attachment.vpc-id` - The ID of an attached VPC.
    #
    #   * `internet-gateway-id` - The ID of the Internet gateway.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the internet gateway.
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGatewaysRequest AWS API Documentation
    #
    class DescribeInternetGatewaysRequest < Struct.new(
      :next_token,
      :max_results,
      :dry_run,
      :internet_gateway_ids,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] internet_gateways
    #   Information about the internet gateways.
    #   @return [Array<Types::InternetGateway>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeInternetGatewaysResult AWS API Documentation
    #
    class DescribeInternetGatewaysResult < Struct.new(
      :internet_gateways,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamByoasnRequest AWS API Documentation
    #
    class DescribeIpamByoasnRequest < Struct.new(
      :dry_run,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] byoasns
    #   ASN and BYOIP CIDR associations.
    #   @return [Array<Types::Byoasn>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamByoasnResult AWS API Documentation
    #
    class DescribeIpamByoasnResult < Struct.new(
      :byoasns,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters for the request. For more information about
    #   filtering, see [Filtering CLI output][1].
    #
    #   Available filters:
    #
    #   * `ipam-arn`
    #
    #   * `ipam-external-resource-verification-token-arn`
    #
    #   * `ipam-external-resource-verification-token-id`
    #
    #   * `ipam-id`
    #
    #   * `ipam-region`
    #
    #   * `state`
    #
    #   * `status`
    #
    #   * `token-name`
    #
    #   * `token-value`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of tokens to return in one page of results.
    #   @return [Integer]
    #
    # @!attribute [rw] ipam_external_resource_verification_token_ids
    #   Verification token IDs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamExternalResourceVerificationTokensRequest AWS API Documentation
    #
    class DescribeIpamExternalResourceVerificationTokensRequest < Struct.new(
      :dry_run,
      :filters,
      :next_token,
      :max_results,
      :ipam_external_resource_verification_token_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] ipam_external_resource_verification_tokens
    #   Verification tokens.
    #   @return [Array<Types::IpamExternalResourceVerificationToken>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamExternalResourceVerificationTokensResult AWS API Documentation
    #
    class DescribeIpamExternalResourceVerificationTokensResult < Struct.new(
      :next_token,
      :ipam_external_resource_verification_tokens)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters for the request. For more information about
    #   filtering, see [Filtering CLI output][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in the request.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_ids
    #   The IDs of the IPAM pools you would like information on.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamPoolsRequest AWS API Documentation
    #
    class DescribeIpamPoolsRequest < Struct.new(
      :dry_run,
      :filters,
      :max_results,
      :next_token,
      :ipam_pool_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pools
    #   Information about the IPAM pools.
    #   @return [Array<Types::IpamPool>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamPoolsResult AWS API Documentation
    #
    class DescribeIpamPoolsResult < Struct.new(
      :next_token,
      :ipam_pools)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_resource_discovery_ids
    #   The IPAM resource discovery IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of resource discoveries to return in one page of
    #   results.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   The resource discovery filters.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamResourceDiscoveriesRequest AWS API Documentation
    #
    class DescribeIpamResourceDiscoveriesRequest < Struct.new(
      :dry_run,
      :ipam_resource_discovery_ids,
      :next_token,
      :max_results,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_resource_discoveries
    #   The resource discoveries.
    #   @return [Array<Types::IpamResourceDiscovery>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamResourceDiscoveriesResult AWS API Documentation
    #
    class DescribeIpamResourceDiscoveriesResult < Struct.new(
      :ipam_resource_discoveries,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_resource_discovery_association_ids
    #   The resource discovery association IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of resource discovery associations to return in
    #   one page of results.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   The resource discovery association filters.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamResourceDiscoveryAssociationsRequest AWS API Documentation
    #
    class DescribeIpamResourceDiscoveryAssociationsRequest < Struct.new(
      :dry_run,
      :ipam_resource_discovery_association_ids,
      :next_token,
      :max_results,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_resource_discovery_associations
    #   The resource discovery associations.
    #   @return [Array<Types::IpamResourceDiscoveryAssociation>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamResourceDiscoveryAssociationsResult AWS API Documentation
    #
    class DescribeIpamResourceDiscoveryAssociationsResult < Struct.new(
      :ipam_resource_discovery_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters for the request. For more information about
    #   filtering, see [Filtering CLI output][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in the request.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scope_ids
    #   The IDs of the scopes you want information on.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamScopesRequest AWS API Documentation
    #
    class DescribeIpamScopesRequest < Struct.new(
      :dry_run,
      :filters,
      :max_results,
      :next_token,
      :ipam_scope_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scopes
    #   The scopes you want information on.
    #   @return [Array<Types::IpamScope>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamScopesResult AWS API Documentation
    #
    class DescribeIpamScopesResult < Struct.new(
      :next_token,
      :ipam_scopes)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters for the request. For more information about
    #   filtering, see [Filtering CLI output][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in the request.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] ipam_ids
    #   The IDs of the IPAMs you want information on.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamsRequest AWS API Documentation
    #
    class DescribeIpamsRequest < Struct.new(
      :dry_run,
      :filters,
      :max_results,
      :next_token,
      :ipam_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] ipams
    #   Information about the IPAMs.
    #   @return [Array<Types::Ipam>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpamsResult AWS API Documentation
    #
    class DescribeIpamsResult < Struct.new(
      :next_token,
      :ipams)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] pool_ids
    #   The IDs of the IPv6 address pools.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpv6PoolsRequest AWS API Documentation
    #
    class DescribeIpv6PoolsRequest < Struct.new(
      :pool_ids,
      :next_token,
      :max_results,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipv_6_pools
    #   Information about the IPv6 address pools.
    #   @return [Array<Types::Ipv6Pool>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeIpv6PoolsResult AWS API Documentation
    #
    class DescribeIpv6PoolsResult < Struct.new(
      :ipv_6_pools,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] key_names
    #   The key pair names.
    #
    #   Default: Describes all of your key pairs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] key_pair_ids
    #   The IDs of the key pairs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] include_public_key
    #   If `true`, the public key material is included in the response.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `key-pair-id` - The ID of the key pair.
    #
    #   * `fingerprint` - The fingerprint of the key pair.
    #
    #   * `key-name` - The name of the key pair.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairsRequest AWS API Documentation
    #
    class DescribeKeyPairsRequest < Struct.new(
      :key_names,
      :key_pair_ids,
      :include_public_key,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] key_pairs
    #   Information about the key pairs.
    #   @return [Array<Types::KeyPairInfo>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeKeyPairsResult AWS API Documentation
    #
    class DescribeKeyPairsResult < Struct.new(
      :key_pairs)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #
    #   To describe one or more versions of a specified launch template, you
    #   must specify either the launch template ID or the launch template
    #   name, but not both.
    #
    #   To describe all the latest or default launch template versions in
    #   your account, you must omit this parameter.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #
    #   To describe one or more versions of a specified launch template, you
    #   must specify either the launch template name or the launch template
    #   ID, but not both.
    #
    #   To describe all the latest or default launch template versions in
    #   your account, you must omit this parameter.
    #   @return [String]
    #
    # @!attribute [rw] versions
    #   One or more versions of the launch template. Valid values depend on
    #   whether you are describing a specified launch template (by ID or
    #   name) or all launch templates in your account.
    #
    #   To describe one or more versions of a specified launch template,
    #   valid values are `$Latest`, `$Default`, and numbers.
    #
    #   To describe all launch templates in your account that are defined as
    #   the latest version, the valid value is `$Latest`. To describe all
    #   launch templates in your account that are defined as the default
    #   version, the valid value is `$Default`. You can specify `$Latest`
    #   and `$Default` in the same request. You cannot specify numbers.
    #   @return [Array<String>]
    #
    # @!attribute [rw] min_version
    #   The version number after which to describe launch template versions.
    #   @return [String]
    #
    # @!attribute [rw] max_version
    #   The version number up to which to describe launch template versions.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token to request the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `NextToken` value. This value can be between 1 and 200.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `create-time` - The time the launch template version was created.
    #
    #   * `ebs-optimized` - A boolean that indicates whether the instance is
    #     optimized for Amazon EBS I/O.
    #
    #   * `http-endpoint` - Indicates whether the HTTP metadata endpoint on
    #     your instances is enabled (`enabled` \| `disabled`).
    #
    #   * `http-protocol-ipv4` - Indicates whether the IPv4 endpoint for the
    #     instance metadata service is enabled (`enabled` \| `disabled`).
    #
    #   * `host-resource-group-arn` - The ARN of the host resource group in
    #     which to launch the instances.
    #
    #   * `http-tokens` - The state of token usage for your instance
    #     metadata requests (`optional` \| `required`).
    #
    #   * `iam-instance-profile` - The ARN of the IAM instance profile.
    #
    #   * `image-id` - The ID of the AMI.
    #
    #   * `instance-type` - The instance type.
    #
    #   * `is-default-version` - A boolean that indicates whether the launch
    #     template version is the default version.
    #
    #   * `kernel-id` - The kernel ID.
    #
    #   * `license-configuration-arn` - The ARN of the license
    #     configuration.
    #
    #   * `network-card-index` - The index of the network card.
    #
    #   * `ram-disk-id` - The RAM disk ID.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] resolve_alias
    #   If `true`, and if a Systems Manager parameter is specified for
    #   `ImageId`, the AMI ID is displayed in the response for `imageId`.
    #
    #   If `false`, and if a Systems Manager parameter is specified for
    #   `ImageId`, the parameter is displayed in the response for `imageId`.
    #
    #   For more information, see [Use a Systems Manager parameter instead
    #   of an AMI ID][1] in the *Amazon EC2 User Guide*.
    #
    #   Default: `false`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplateVersionsRequest AWS API Documentation
    #
    class DescribeLaunchTemplateVersionsRequest < Struct.new(
      :dry_run,
      :launch_template_id,
      :launch_template_name,
      :versions,
      :min_version,
      :max_version,
      :next_token,
      :max_results,
      :filters,
      :resolve_alias)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] launch_template_versions
    #   Information about the launch template versions.
    #   @return [Array<Types::LaunchTemplateVersion>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplateVersionsResult AWS API Documentation
    #
    class DescribeLaunchTemplateVersionsResult < Struct.new(
      :launch_template_versions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] launch_template_ids
    #   One or more launch template IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] launch_template_names
    #   One or more launch template names.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `create-time` - The time the launch template was created.
    #
    #   * `launch-template-name` - The name of the launch template.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token to request the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `NextToken` value. This value can be between 1 and 200.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplatesRequest AWS API Documentation
    #
    class DescribeLaunchTemplatesRequest < Struct.new(
      :dry_run,
      :launch_template_ids,
      :launch_template_names,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] launch_templates
    #   Information about the launch templates.
    #   @return [Array<Types::LaunchTemplate>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLaunchTemplatesResult AWS API Documentation
    #
    class DescribeLaunchTemplatesResult < Struct.new(
      :launch_templates,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_virtual_interface_group_association_ids
    #   The IDs of the associations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `local-gateway-id` - The ID of a local gateway.
    #
    #   * `local-gateway-route-table-arn` - The Amazon Resource Name (ARN)
    #     of the local gateway route table for the virtual interface group.
    #
    #   * `local-gateway-route-table-id` - The ID of the local gateway route
    #     table.
    #
    #   * `local-gateway-route-table-virtual-interface-group-association-id`
    #     - The ID of the association.
    #
    #   * `local-gateway-route-table-virtual-interface-group-id` - The ID of
    #     the virtual interface group.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the local gateway virtual interface group association.
    #
    #   * `state` - The state of the association.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsRequest AWS API Documentation
    #
    class DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsRequest < Struct.new(
      :local_gateway_route_table_virtual_interface_group_association_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_virtual_interface_group_associations
    #   Information about the associations.
    #   @return [Array<Types::LocalGatewayRouteTableVirtualInterfaceGroupAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResult AWS API Documentation
    #
    class DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResult < Struct.new(
      :local_gateway_route_table_virtual_interface_group_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_vpc_association_ids
    #   The IDs of the associations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `local-gateway-id` - The ID of a local gateway.
    #
    #   * `local-gateway-route-table-arn` - The Amazon Resource Name (ARN)
    #     of the local gateway route table for the association.
    #
    #   * `local-gateway-route-table-id` - The ID of the local gateway route
    #     table.
    #
    #   * `local-gateway-route-table-vpc-association-id` - The ID of the
    #     association.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the local gateway route table for the association.
    #
    #   * `state` - The state of the association.
    #
    #   * `vpc-id` - The ID of the VPC.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayRouteTableVpcAssociationsRequest AWS API Documentation
    #
    class DescribeLocalGatewayRouteTableVpcAssociationsRequest < Struct.new(
      :local_gateway_route_table_vpc_association_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_vpc_associations
    #   Information about the associations.
    #   @return [Array<Types::LocalGatewayRouteTableVpcAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayRouteTableVpcAssociationsResult AWS API Documentation
    #
    class DescribeLocalGatewayRouteTableVpcAssociationsResult < Struct.new(
      :local_gateway_route_table_vpc_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_ids
    #   The IDs of the local gateway route tables.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `local-gateway-id` - The ID of a local gateway.
    #
    #   * `local-gateway-route-table-arn` - The Amazon Resource Name (ARN)
    #     of the local gateway route table.
    #
    #   * `local-gateway-route-table-id` - The ID of a local gateway route
    #     table.
    #
    #   * `outpost-arn` - The Amazon Resource Name (ARN) of the Outpost.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the local gateway route table.
    #
    #   * `state` - The state of the local gateway route table.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayRouteTablesRequest AWS API Documentation
    #
    class DescribeLocalGatewayRouteTablesRequest < Struct.new(
      :local_gateway_route_table_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_tables
    #   Information about the local gateway route tables.
    #   @return [Array<Types::LocalGatewayRouteTable>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayRouteTablesResult AWS API Documentation
    #
    class DescribeLocalGatewayRouteTablesResult < Struct.new(
      :local_gateway_route_tables,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface_group_ids
    #   The IDs of the virtual interface groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `local-gateway-id` - The ID of a local gateway.
    #
    #   * `local-gateway-virtual-interface-group-id` - The ID of the virtual
    #     interface group.
    #
    #   * `local-gateway-virtual-interface-id` - The ID of the virtual
    #     interface.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the local gateway virtual interface group.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayVirtualInterfaceGroupsRequest AWS API Documentation
    #
    class DescribeLocalGatewayVirtualInterfaceGroupsRequest < Struct.new(
      :local_gateway_virtual_interface_group_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface_groups
    #   The virtual interface groups.
    #   @return [Array<Types::LocalGatewayVirtualInterfaceGroup>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayVirtualInterfaceGroupsResult AWS API Documentation
    #
    class DescribeLocalGatewayVirtualInterfaceGroupsResult < Struct.new(
      :local_gateway_virtual_interface_groups,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interface_ids
    #   The IDs of the virtual interfaces.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `local-address` - The local address.
    #
    #   * `local-bgp-asn` - The Border Gateway Protocol (BGP) Autonomous
    #     System Number (ASN) of the local gateway.
    #
    #   * `local-gateway-id` - The ID of the local gateway.
    #
    #   * `local-gateway-virtual-interface-id` - The ID of the virtual
    #     interface.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the local gateway virtual interface.
    #
    #   * `peer-address` - The peer address.
    #
    #   * `peer-bgp-asn` - The peer BGP ASN.
    #
    #   * `vlan` - The ID of the VLAN.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayVirtualInterfacesRequest AWS API Documentation
    #
    class DescribeLocalGatewayVirtualInterfacesRequest < Struct.new(
      :local_gateway_virtual_interface_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_virtual_interfaces
    #   Information about the virtual interfaces.
    #   @return [Array<Types::LocalGatewayVirtualInterface>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewayVirtualInterfacesResult AWS API Documentation
    #
    class DescribeLocalGatewayVirtualInterfacesResult < Struct.new(
      :local_gateway_virtual_interfaces,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_ids
    #   The IDs of the local gateways.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `local-gateway-id` - The ID of a local gateway.
    #
    #   * `outpost-arn` - The Amazon Resource Name (ARN) of the Outpost.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the local gateway.
    #
    #   * `state` - The state of the association.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewaysRequest AWS API Documentation
    #
    class DescribeLocalGatewaysRequest < Struct.new(
      :local_gateway_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateways
    #   Information about the local gateways.
    #   @return [Array<Types::LocalGateway>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLocalGatewaysResult AWS API Documentation
    #
    class DescribeLocalGatewaysResult < Struct.new(
      :local_gateways,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `lock-state` - The state of the snapshot lock
    #     (`compliance-cooloff` \| `governance` \| `compliance` \|
    #     `expired`).
    #
    #   ^
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_ids
    #   The IDs of the snapshots for which to view the lock status.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLockedSnapshotsRequest AWS API Documentation
    #
    class DescribeLockedSnapshotsRequest < Struct.new(
      :filters,
      :max_results,
      :next_token,
      :snapshot_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshots
    #   Information about the snapshots.
    #   @return [Array<Types::LockedSnapshotsInfo>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeLockedSnapshotsResult AWS API Documentation
    #
    class DescribeLockedSnapshotsResult < Struct.new(
      :snapshots,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone` - The Availability Zone of the EC2 Mac
    #     Dedicated Host.
    #
    #   * `instance-type` - The instance type size that the EC2 Mac
    #     Dedicated Host is configured to support.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] host_ids
    #   The IDs of the EC2 Mac Dedicated Hosts.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the returned `nextToken` value. This value can be between 5 and
    #   500. If `maxResults` is given a larger value than 500, you receive
    #   an error.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMacHostsRequest AWS API Documentation
    #
    class DescribeMacHostsRequest < Struct.new(
      :filters,
      :host_ids,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] mac_hosts
    #   Information about the EC2 Mac Dedicated Hosts.
    #   @return [Array<Types::MacHost>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMacHostsResult AWS API Documentation
    #
    class DescribeMacHostsResult < Struct.new(
      :mac_hosts,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   Specifies one or more filters for the request:
    #
    #   * `instance-id` - The ID of the instance for which the task was
    #     created.
    #
    #   * `task-state` - The state of the task (`successful` \| `failed` \|
    #     `in-progress` \| `pending`).
    #
    #   * `mac-system-integrity-protection-configuration.sip-status` - The
    #     overall SIP state requested in the task (`enabled` \| `disabled`).
    #
    #   * `start-time` - The date and time the task was created.
    #
    #   * `task-type` - The type of task (`sip-modification` \|
    #     `volume-ownership-delegation`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] mac_modification_task_ids
    #   The ID of task.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results can be seen by sending another request
    #   with the returned `nextToken` value. This value can be between 5 and
    #   500. If `maxResults` is given a larger value than 500, you receive
    #   an error.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMacModificationTasksRequest AWS API Documentation
    #
    class DescribeMacModificationTasksRequest < Struct.new(
      :dry_run,
      :filters,
      :mac_modification_task_ids,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] mac_modification_tasks
    #   Information about the tasks.
    #   @return [Array<Types::MacModificationTask>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMacModificationTasksResult AWS API Documentation
    #
    class DescribeMacModificationTasksResult < Struct.new(
      :mac_modification_tasks,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `owner-id` - The ID of the prefix list owner.
    #
    #   * `prefix-list-id` - The ID of the prefix list.
    #
    #   * `prefix-list-name` - The name of the prefix list.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_ids
    #   One or more prefix list IDs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeManagedPrefixListsRequest AWS API Documentation
    #
    class DescribeManagedPrefixListsRequest < Struct.new(
      :dry_run,
      :filters,
      :max_results,
      :next_token,
      :prefix_list_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] prefix_lists
    #   Information about the prefix lists.
    #   @return [Array<Types::ManagedPrefixList>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeManagedPrefixListsResult AWS API Documentation
    #
    class DescribeManagedPrefixListsResult < Struct.new(
      :next_token,
      :prefix_lists)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] public_ips
    #   One or more Elastic IP addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `moving-status` - The status of the Elastic IP address
    #     (`MovingToVpc` \| `RestoringToClassic`).
    #
    #   ^
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results of the initial request can be seen by
    #   sending another request with the returned `NextToken` value. This
    #   value can be between 5 and 1000; if `MaxResults` is given a value
    #   outside of this range, an error is returned.
    #
    #   Default: If no value is provided, the default is 1000.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddressesRequest AWS API Documentation
    #
    class DescribeMovingAddressesRequest < Struct.new(
      :dry_run,
      :public_ips,
      :next_token,
      :filters,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] moving_address_statuses
    #   The status for each Elastic IP address.
    #   @return [Array<Types::MovingAddressStatus>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeMovingAddressesResult AWS API Documentation
    #
    class DescribeMovingAddressesResult < Struct.new(
      :moving_address_statuses,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filter
    #   The filters.
    #
    #   * `nat-gateway-id` - The ID of the NAT gateway.
    #
    #   * `state` - The state of the NAT gateway (`pending` \| `failed` \|
    #     `available` \| `deleting` \| `deleted`).
    #
    #   * `subnet-id` - The ID of the subnet in which the NAT gateway
    #     resides.
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC in which the NAT gateway resides.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] nat_gateway_ids
    #   The IDs of the NAT gateways.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGatewaysRequest AWS API Documentation
    #
    class DescribeNatGatewaysRequest < Struct.new(
      :dry_run,
      :filter,
      :max_results,
      :nat_gateway_ids,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateways
    #   Information about the NAT gateways.
    #   @return [Array<Types::NatGateway>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNatGatewaysResult AWS API Documentation
    #
    class DescribeNatGatewaysResult < Struct.new(
      :nat_gateways,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_acl_ids
    #   The IDs of the network ACLs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `association.association-id` - The ID of an association ID for the
    #     ACL.
    #
    #   * `association.network-acl-id` - The ID of the network ACL involved
    #     in the association.
    #
    #   * `association.subnet-id` - The ID of the subnet involved in the
    #     association.
    #
    #   * `default` - Indicates whether the ACL is the default network ACL
    #     for the VPC.
    #
    #   * `entry.cidr` - The IPv4 CIDR range specified in the entry.
    #
    #   * `entry.icmp.code` - The ICMP code specified in the entry, if any.
    #
    #   * `entry.icmp.type` - The ICMP type specified in the entry, if any.
    #
    #   * `entry.ipv6-cidr` - The IPv6 CIDR range specified in the entry.
    #
    #   * `entry.port-range.from` - The start of the port range specified in
    #     the entry.
    #
    #   * `entry.port-range.to` - The end of the port range specified in the
    #     entry.
    #
    #   * `entry.protocol` - The protocol specified in the entry (`tcp` \|
    #     `udp` \| `icmp` or a protocol number).
    #
    #   * `entry.rule-action` - Allows or denies the matching traffic
    #     (`allow` \| `deny`).
    #
    #   * `entry.egress` - A Boolean that indicates the type of rule.
    #     Specify `true` for egress rules, or `false` for ingress rules.
    #
    #   * `entry.rule-number` - The number of an entry (in other words,
    #     rule) in the set of ACL entries.
    #
    #   * `network-acl-id` - The ID of the network ACL.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the network ACL.
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC for the network ACL.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAclsRequest AWS API Documentation
    #
    class DescribeNetworkAclsRequest < Struct.new(
      :next_token,
      :max_results,
      :dry_run,
      :network_acl_ids,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_acls
    #   Information about the network ACLs.
    #   @return [Array<Types::NetworkAcl>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkAclsResult AWS API Documentation
    #
    class DescribeNetworkAclsResult < Struct.new(
      :network_acls,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_analysis_ids
    #   The IDs of the Network Access Scope analyses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] network_insights_access_scope_id
    #   The ID of the Network Access Scope.
    #   @return [String]
    #
    # @!attribute [rw] analysis_start_time_begin
    #   Filters the results based on the start time. The analysis must have
    #   started on or after this time.
    #   @return [Time]
    #
    # @!attribute [rw] analysis_start_time_end
    #   Filters the results based on the start time. The analysis must have
    #   started on or before this time.
    #   @return [Time]
    #
    # @!attribute [rw] filters
    #   There are no supported filters.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInsightsAccessScopeAnalysesRequest AWS API Documentation
    #
    class DescribeNetworkInsightsAccessScopeAnalysesRequest < Struct.new(
      :network_insights_access_scope_analysis_ids,
      :network_insights_access_scope_id,
      :analysis_start_time_begin,
      :analysis_start_time_end,
      :filters,
      :max_results,
      :dry_run,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_analyses
    #   The Network Access Scope analyses.
    #   @return [Array<Types::NetworkInsightsAccessScopeAnalysis>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInsightsAccessScopeAnalysesResult AWS API Documentation
    #
    class DescribeNetworkInsightsAccessScopeAnalysesResult < Struct.new(
      :network_insights_access_scope_analyses,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_ids
    #   The IDs of the Network Access Scopes.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   There are no supported filters.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInsightsAccessScopesRequest AWS API Documentation
    #
    class DescribeNetworkInsightsAccessScopesRequest < Struct.new(
      :network_insights_access_scope_ids,
      :filters,
      :max_results,
      :dry_run,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scopes
    #   The Network Access Scopes.
    #   @return [Array<Types::NetworkInsightsAccessScope>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInsightsAccessScopesResult AWS API Documentation
    #
    class DescribeNetworkInsightsAccessScopesResult < Struct.new(
      :network_insights_access_scopes,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_analysis_ids
    #   The ID of the network insights analyses. You must specify either
    #   analysis IDs or a path ID.
    #   @return [Array<String>]
    #
    # @!attribute [rw] network_insights_path_id
    #   The ID of the path. You must specify either a path ID or analysis
    #   IDs.
    #   @return [String]
    #
    # @!attribute [rw] analysis_start_time
    #   The time when the network insights analyses started.
    #   @return [Time]
    #
    # @!attribute [rw] analysis_end_time
    #   The time when the network insights analyses ended.
    #   @return [Time]
    #
    # @!attribute [rw] filters
    #   The filters. The following are the possible values:
    #
    #   * path-found - A Boolean value that indicates whether a feasible
    #     path is found.
    #
    #   * status - The status of the analysis (running \| succeeded \|
    #     failed).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInsightsAnalysesRequest AWS API Documentation
    #
    class DescribeNetworkInsightsAnalysesRequest < Struct.new(
      :network_insights_analysis_ids,
      :network_insights_path_id,
      :analysis_start_time,
      :analysis_end_time,
      :filters,
      :max_results,
      :dry_run,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_analyses
    #   Information about the network insights analyses.
    #   @return [Array<Types::NetworkInsightsAnalysis>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInsightsAnalysesResult AWS API Documentation
    #
    class DescribeNetworkInsightsAnalysesResult < Struct.new(
      :network_insights_analyses,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_path_ids
    #   The IDs of the paths.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters. The following are the possible values:
    #
    #   * destination - The ID of the resource.
    #
    #   * filter-at-source.source-address - The source IPv4 address at the
    #     source.
    #
    #   * filter-at-source.source-port-range - The source port range at the
    #     source.
    #
    #   * filter-at-source.destination-address - The destination IPv4
    #     address at the source.
    #
    #   * filter-at-source.destination-port-range - The destination port
    #     range at the source.
    #
    #   * filter-at-destination.source-address - The source IPv4 address at
    #     the destination.
    #
    #   * filter-at-destination.source-port-range - The source port range at
    #     the destination.
    #
    #   * filter-at-destination.destination-address - The destination IPv4
    #     address at the destination.
    #
    #   * filter-at-destination.destination-port-range - The destination
    #     port range at the destination.
    #
    #   * protocol - The protocol.
    #
    #   * source - The ID of the resource.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInsightsPathsRequest AWS API Documentation
    #
    class DescribeNetworkInsightsPathsRequest < Struct.new(
      :network_insights_path_ids,
      :filters,
      :max_results,
      :dry_run,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_paths
    #   Information about the paths.
    #   @return [Array<Types::NetworkInsightsPath>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInsightsPathsResult AWS API Documentation
    #
    class DescribeNetworkInsightsPathsResult < Struct.new(
      :network_insights_paths,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeNetworkInterfaceAttribute.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] attribute
    #   The attribute of the network interface. This parameter is required.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttributeRequest AWS API Documentation
    #
    class DescribeNetworkInterfaceAttributeRequest < Struct.new(
      :dry_run,
      :network_interface_id,
      :attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeNetworkInterfaceAttribute.
    #
    # @!attribute [rw] attachment
    #   The attachment (if any) of the network interface.
    #   @return [Types::NetworkInterfaceAttachment]
    #
    # @!attribute [rw] description
    #   The description of the network interface.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] groups
    #   The security groups associated with the network interface.
    #   @return [Array<Types::GroupIdentifier>]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] source_dest_check
    #   Indicates whether source/destination checking is enabled.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] associate_public_ip_address
    #   Indicates whether to assign a public IPv4 address to a network
    #   interface. This option can be enabled for any network interface but
    #   will only apply to the primary network interface (eth0).
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfaceAttributeResult AWS API Documentation
    #
    class DescribeNetworkInterfaceAttributeResult < Struct.new(
      :attachment,
      :description,
      :groups,
      :network_interface_id,
      :source_dest_check,
      :associate_public_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeNetworkInterfacePermissions.
    #
    # @!attribute [rw] network_interface_permission_ids
    #   The network interface permission IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `network-interface-permission.network-interface-permission-id` -
    #     The ID of the permission.
    #
    #   * `network-interface-permission.network-interface-id` - The ID of
    #     the network interface.
    #
    #   * `network-interface-permission.aws-account-id` - The Amazon Web
    #     Services account ID.
    #
    #   * `network-interface-permission.aws-service` - The Amazon Web
    #     Services service.
    #
    #   * `network-interface-permission.permission` - The type of permission
    #     (`INSTANCE-ATTACH` \| `EIP-ASSOCIATE`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. If this parameter is not specified, up to 50 results are
    #   returned by default. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacePermissionsRequest AWS API Documentation
    #
    class DescribeNetworkInterfacePermissionsRequest < Struct.new(
      :network_interface_permission_ids,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output for DescribeNetworkInterfacePermissions.
    #
    # @!attribute [rw] network_interface_permissions
    #   The network interface permissions.
    #   @return [Array<Types::NetworkInterfacePermission>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacePermissionsResult AWS API Documentation
    #
    class DescribeNetworkInterfacePermissionsResult < Struct.new(
      :network_interface_permissions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeNetworkInterfaces.
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. You cannot specify this parameter and the network
    #   interface IDs parameter in the same request. For more information,
    #   see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_ids
    #   The network interface IDs.
    #
    #   Default: Describes all your network interfaces.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `association.allocation-id` - The allocation ID returned when you
    #     allocated the Elastic IP address (IPv4) for your network
    #     interface.
    #
    #   * `association.association-id` - The association ID returned when
    #     the network interface was associated with an IPv4 address.
    #
    #   * `addresses.association.owner-id` - The owner ID of the addresses
    #     associated with the network interface.
    #
    #   * `addresses.association.public-ip` - The association ID returned
    #     when the network interface was associated with the Elastic IP
    #     address (IPv4).
    #
    #   * `addresses.primary` - Whether the private IPv4 address is the
    #     primary IP address associated with the network interface.
    #
    #   * `addresses.private-ip-address` - The private IPv4 addresses
    #     associated with the network interface.
    #
    #   * `association.ip-owner-id` - The owner of the Elastic IP address
    #     (IPv4) associated with the network interface.
    #
    #   * `association.public-ip` - The address of the Elastic IP address
    #     (IPv4) bound to the network interface.
    #
    #   * `association.public-dns-name` - The public DNS name for the
    #     network interface (IPv4).
    #
    #   * `attachment.attach-time` - The time that the network interface was
    #     attached to an instance.
    #
    #   * `attachment.attachment-id` - The ID of the interface attachment.
    #
    #   * `attachment.delete-on-termination` - Indicates whether the
    #     attachment is deleted when an instance is terminated.
    #
    #   * `attachment.device-index` - The device index to which the network
    #     interface is attached.
    #
    #   * `attachment.instance-id` - The ID of the instance to which the
    #     network interface is attached.
    #
    #   * `attachment.instance-owner-id` - The owner ID of the instance to
    #     which the network interface is attached.
    #
    #   * `attachment.status` - The status of the attachment (`attaching` \|
    #     `attached` \| `detaching` \| `detached`).
    #
    #   * `availability-zone` - The Availability Zone of the network
    #     interface.
    #
    #   * `description` - The description of the network interface.
    #
    #   * `group-id` - The ID of a security group associated with the
    #     network interface.
    #
    #   * `ipv6-addresses.ipv6-address` - An IPv6 address associated with
    #     the network interface.
    #
    #   * `interface-type` - The type of network interface
    #     (`api_gateway_managed` \| `aws_codestar_connections_managed` \|
    #     `branch` \| `ec2_instance_connect_endpoint` \| `efa` \| `efa-only`
    #     \| `efs` \| `evs` \| `gateway_load_balancer` \|
    #     `gateway_load_balancer_endpoint` \| `global_accelerator_managed`
    #     \| `interface` \| `iot_rules_managed` \| `lambda` \|
    #     `load_balancer` \| `nat_gateway` \| `network_load_balancer` \|
    #     `quicksight` \| `transit_gateway` \| `trunk` \| `vpc_endpoint`).
    #
    #   * `mac-address` - The MAC address of the network interface.
    #
    #   * `network-interface-id` - The ID of the network interface.
    #
    #   * `operator.managed` - A Boolean that indicates whether this is a
    #     managed network interface.
    #
    #   * `operator.principal` - The principal that manages the network
    #     interface. Only valid for managed network interfaces, where
    #     `managed` is `true`.
    #
    #   * `owner-id` - The Amazon Web Services account ID of the network
    #     interface owner.
    #
    #   * `private-dns-name` - The private DNS name of the network interface
    #     (IPv4).
    #
    #   * `private-ip-address` - The private IPv4 address or addresses of
    #     the network interface.
    #
    #   * `requester-id` - The alias or Amazon Web Services account ID of
    #     the principal or service that created the network interface.
    #
    #   * `requester-managed` - Indicates whether the network interface is
    #     being managed by an Amazon Web Services service (for example,
    #     Amazon Web Services Management Console, Auto Scaling, and so on).
    #
    #   * `source-dest-check` - Indicates whether the network interface
    #     performs source/destination checking. A value of `true` means
    #     checking is enabled, and `false` means checking is disabled. The
    #     value must be `false` for the network interface to perform network
    #     address translation (NAT) in your VPC.
    #
    #   * `status` - The status of the network interface. If the network
    #     interface is not attached to an instance, the status is
    #     `available`; if a network interface is attached to an instance the
    #     status is `in-use`.
    #
    #   * `subnet-id` - The ID of the subnet for the network interface.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC for the network interface.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacesRequest AWS API Documentation
    #
    class DescribeNetworkInterfacesRequest < Struct.new(
      :next_token,
      :max_results,
      :dry_run,
      :network_interface_ids,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_interfaces
    #   Information about the network interfaces.
    #   @return [Array<Types::NetworkInterface>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeNetworkInterfacesResult AWS API Documentation
    #
    class DescribeNetworkInterfacesResult < Struct.new(
      :network_interfaces,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] outpost_lag_ids
    #   The IDs of the Outpost LAGs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters to use for narrowing down the request. The following
    #   filters are supported:
    #
    #   * `service-link-virtual-interface-id` - The ID of the service link
    #     virtual interface.
    #
    #   * `service-link-virtual-interface-arn` - The ARN of the service link
    #     virtual interface.
    #
    #   * `outpost-id` - The Outpost ID.
    #
    #   * `outpost-arn` - The Outpost ARN.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the service link virtual interface.
    #
    #   * `vlan` - The ID of the address pool.
    #
    #   * `local-address` - The local address.
    #
    #   * `peer-address` - The peer address.
    #
    #   * `peer-bgp-asn` - The peer BGP ASN.
    #
    #   * `outpost-lag-id` - The Outpost LAG ID.
    #
    #   * `configuration-state` - The configuration state of the service
    #     link virtual interface.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeOutpostLagsRequest AWS API Documentation
    #
    class DescribeOutpostLagsRequest < Struct.new(
      :outpost_lag_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] outpost_lags
    #   The Outpost LAGs.
    #   @return [Array<Types::OutpostLag>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeOutpostLagsResult AWS API Documentation
    #
    class DescribeOutpostLagsResult < Struct.new(
      :outpost_lags,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] group_ids
    #   The IDs of the placement groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_names
    #   The names of the placement groups.
    #
    #   Constraints:
    #
    #   * You can specify a name only if the placement group is owned by
    #     your account.
    #
    #   * If a placement group is *shared* with your account, specifying the
    #     name results in an error. You must use the `GroupId` parameter
    #     instead.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `group-name` - The name of the placement group.
    #
    #   * `group-arn` - The Amazon Resource Name (ARN) of the placement
    #     group.
    #
    #   * `spread-level` - The spread level for the placement group (`host`
    #     \| `rack`).
    #
    #   * `state` - The state of the placement group (`pending` \|
    #     `available` \| `deleting` \| `deleted`).
    #
    #   * `strategy` - The strategy of the placement group (`cluster` \|
    #     `spread` \| `partition`).
    #
    #   * `tag:<key>` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources that have a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroupsRequest AWS API Documentation
    #
    class DescribePlacementGroupsRequest < Struct.new(
      :group_ids,
      :dry_run,
      :group_names,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] placement_groups
    #   Information about the placement groups.
    #   @return [Array<Types::PlacementGroup>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePlacementGroupsResult AWS API Documentation
    #
    class DescribePlacementGroupsResult < Struct.new(
      :placement_groups)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `prefix-list-id`: The ID of a prefix list.
    #
    #   * `prefix-list-name`: The name of a prefix list.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_ids
    #   One or more prefix list IDs.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixListsRequest AWS API Documentation
    #
    class DescribePrefixListsRequest < Struct.new(
      :dry_run,
      :filters,
      :max_results,
      :next_token,
      :prefix_list_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] prefix_lists
    #   All available prefix lists.
    #   @return [Array<Types::PrefixList>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrefixListsResult AWS API Documentation
    #
    class DescribePrefixListsResult < Struct.new(
      :next_token,
      :prefix_lists)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] resources
    #   The type of resource: `bundle` \| `conversion-task` \|
    #   `customer-gateway` \| `dhcp-options` \| `elastic-ip-allocation` \|
    #   `elastic-ip-association` \| `export-task` \| `flow-log` \| `image`
    #   \| `import-task` \| `instance` \| `internet-gateway` \|
    #   `network-acl` \| `network-acl-association` \| `network-interface` \|
    #   `network-interface-attachment` \| `prefix-list` \| `reservation` \|
    #   `route-table` \| `route-table-association` \| `security-group` \|
    #   `snapshot` \| `subnet` \| `subnet-cidr-block-association` \|
    #   `volume` \| `vpc` \| `vpc-cidr-block-association` \| `vpc-endpoint`
    #   \| `vpc-peering-connection` \| `vpn-connection` \| `vpn-gateway`
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   NextToken value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to request the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrincipalIdFormatRequest AWS API Documentation
    #
    class DescribePrincipalIdFormatRequest < Struct.new(
      :dry_run,
      :resources,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] principals
    #   Information about the ID format settings for the ARN.
    #   @return [Array<Types::PrincipalIdFormat>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   null when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePrincipalIdFormatResult AWS API Documentation
    #
    class DescribePrincipalIdFormatResult < Struct.new(
      :principals,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] pool_ids
    #   The IDs of the address pools.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePublicIpv4PoolsRequest AWS API Documentation
    #
    class DescribePublicIpv4PoolsRequest < Struct.new(
      :pool_ids,
      :next_token,
      :max_results,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] public_ipv_4_pools
    #   Information about the address pools.
    #   @return [Array<Types::PublicIpv4Pool>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribePublicIpv4PoolsResult AWS API Documentation
    #
    class DescribePublicIpv4PoolsResult < Struct.new(
      :public_ipv_4_pools,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] region_names
    #   The names of the Regions. You can specify any Regions, whether they
    #   are enabled and disabled for your account.
    #   @return [Array<String>]
    #
    # @!attribute [rw] all_regions
    #   Indicates whether to display all Regions, including Regions that are
    #   disabled for your account.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `endpoint` - The endpoint of the Region (for example,
    #     `ec2.us-east-1.amazonaws.com`).
    #
    #   * `opt-in-status` - The opt-in status of the Region
    #     (`opt-in-not-required` \| `opted-in` \| `not-opted-in`).
    #
    #   * `region-name` - The name of the Region (for example, `us-east-1`).
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegionsRequest AWS API Documentation
    #
    class DescribeRegionsRequest < Struct.new(
      :region_names,
      :all_regions,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] regions
    #   Information about the Regions.
    #   @return [Array<Types::Region>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRegionsResult AWS API Documentation
    #
    class DescribeRegionsResult < Struct.new(
      :regions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] replace_root_volume_task_ids
    #   The ID of the root volume replacement task to view.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   Filter to use:
    #
    #   * `instance-id` - The ID of the instance for which the root volume
    #     replacement task was created.
    #
    #   ^
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReplaceRootVolumeTasksRequest AWS API Documentation
    #
    class DescribeReplaceRootVolumeTasksRequest < Struct.new(
      :replace_root_volume_task_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] replace_root_volume_tasks
    #   Information about the root volume replacement task.
    #   @return [Array<Types::ReplaceRootVolumeTask>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReplaceRootVolumeTasksResult AWS API Documentation
    #
    class DescribeReplaceRootVolumeTasksResult < Struct.new(
      :replace_root_volume_tasks,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeReservedInstancesListings.
    #
    # @!attribute [rw] reserved_instances_id
    #   One or more Reserved Instance IDs.
    #   @return [String]
    #
    # @!attribute [rw] reserved_instances_listing_id
    #   One or more Reserved Instance listing IDs.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `reserved-instances-id` - The ID of the Reserved Instances.
    #
    #   * `reserved-instances-listing-id` - The ID of the Reserved Instances
    #     listing.
    #
    #   * `status` - The status of the Reserved Instance listing (`pending`
    #     \| `active` \| `cancelled` \| `closed`).
    #
    #   * `status-message` - The reason for the status.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListingsRequest AWS API Documentation
    #
    class DescribeReservedInstancesListingsRequest < Struct.new(
      :reserved_instances_id,
      :reserved_instances_listing_id,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeReservedInstancesListings.
    #
    # @!attribute [rw] reserved_instances_listings
    #   Information about the Reserved Instance listing.
    #   @return [Array<Types::ReservedInstancesListing>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesListingsResult AWS API Documentation
    #
    class DescribeReservedInstancesListingsResult < Struct.new(
      :reserved_instances_listings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeReservedInstancesModifications.
    #
    # @!attribute [rw] reserved_instances_modification_ids
    #   IDs for the submitted modification request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `client-token` - The idempotency token for the modification
    #     request.
    #
    #   * `create-date` - The time when the modification request was
    #     created.
    #
    #   * `effective-date` - The time when the modification becomes
    #     effective.
    #
    #   * `modification-result.reserved-instances-id` - The ID for the
    #     Reserved Instances created as part of the modification request.
    #     This ID is only available when the status of the modification is
    #     `fulfilled`.
    #
    #   * `modification-result.target-configuration.availability-zone` - The
    #     Availability Zone for the new Reserved Instances.
    #
    #   * `modification-result.target-configuration.availability-zone-id` -
    #     The ID of the Availability Zone for the new Reserved Instances.
    #
    #   * `modification-result.target-configuration.instance-count ` - The
    #     number of new Reserved Instances.
    #
    #   * `modification-result.target-configuration.instance-type` - The
    #     instance type of the new Reserved Instances.
    #
    #   * `reserved-instances-id` - The ID of the Reserved Instances
    #     modified.
    #
    #   * `reserved-instances-modification-id` - The ID of the modification
    #     request.
    #
    #   * `status` - The status of the Reserved Instances modification
    #     request (`processing` \| `fulfilled` \| `failed`).
    #
    #   * `status-message` - The reason for the status.
    #
    #   * `update-date` - The time when the modification request was last
    #     updated.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModificationsRequest AWS API Documentation
    #
    class DescribeReservedInstancesModificationsRequest < Struct.new(
      :reserved_instances_modification_ids,
      :next_token,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeReservedInstancesModifications.
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] reserved_instances_modifications
    #   The Reserved Instance modification information.
    #   @return [Array<Types::ReservedInstancesModification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesModificationsResult AWS API Documentation
    #
    class DescribeReservedInstancesModificationsResult < Struct.new(
      :next_token,
      :reserved_instances_modifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeReservedInstancesOfferings.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which the Reserved Instance can be used.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] include_marketplace
    #   Include Reserved Instance Marketplace offerings in the response.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_type
    #   The instance type that the reservation will cover (for example,
    #   `m1.small`). For more information, see [Amazon EC2 instance
    #   types][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
    #   @return [String]
    #
    # @!attribute [rw] max_duration
    #   The maximum duration (in seconds) to filter when searching for
    #   offerings.
    #
    #   Default: 94608000 (3 years)
    #   @return [Integer]
    #
    # @!attribute [rw] max_instance_count
    #   The maximum number of instances to filter when searching for
    #   offerings.
    #
    #   Default: 20
    #   @return [Integer]
    #
    # @!attribute [rw] min_duration
    #   The minimum duration (in seconds) to filter when searching for
    #   offerings.
    #
    #   Default: 2592000 (1 month)
    #   @return [Integer]
    #
    # @!attribute [rw] offering_class
    #   The offering class of the Reserved Instance. Can be `standard` or
    #   `convertible`.
    #   @return [String]
    #
    # @!attribute [rw] product_description
    #   The Reserved Instance product platform description. Instances that
    #   include `(Amazon VPC)` in the description are for use with Amazon
    #   VPC.
    #   @return [String]
    #
    # @!attribute [rw] reserved_instances_offering_ids
    #   One or more Reserved Instances offering IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `availability-zone` - The Availability Zone where the Reserved
    #     Instance can be used.
    #
    #   * `availability-zone-id` - The ID of the Availability Zone where the
    #     Reserved Instance can be used.
    #
    #   * `duration` - The duration of the Reserved Instance (for example,
    #     one year or three years), in seconds (`31536000` \| `94608000`).
    #
    #   * `fixed-price` - The purchase price of the Reserved Instance (for
    #     example, 9800.0).
    #
    #   * `instance-type` - The instance type that is covered by the
    #     reservation.
    #
    #   * `marketplace` - Set to `true` to show only Reserved Instance
    #     Marketplace offerings. When this filter is not used, which is the
    #     default behavior, all offerings from both Amazon Web Services and
    #     the Reserved Instance Marketplace are listed.
    #
    #   * `product-description` - The Reserved Instance product platform
    #     description (`Linux/UNIX` \| `Linux with SQL Server Standard` \|
    #     `Linux with SQL Server Web` \| `Linux with SQL Server Enterprise`
    #     \| `SUSE Linux` \| `Red Hat Enterprise Linux` \| `Red Hat
    #     Enterprise Linux with HA` \| `Windows` \| `Windows with SQL Server
    #     Standard` \| `Windows with SQL Server Web` \| `Windows with SQL
    #     Server Enterprise`).
    #
    #   * `reserved-instances-offering-id` - The Reserved Instances offering
    #     ID.
    #
    #   * `scope` - The scope of the Reserved Instance (`Availability Zone`
    #     or `Region`).
    #
    #   * `usage-price` - The usage price of the Reserved Instance, per hour
    #     (for example, 0.84).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] instance_tenancy
    #   The tenancy of the instances covered by the reservation. A Reserved
    #   Instance with a tenancy of `dedicated` is applied to instances that
    #   run in a VPC on single-tenant hardware (i.e., Dedicated Instances).
    #
    #   **Important:** The `host` value cannot be used with this parameter.
    #   Use the `default` or `dedicated` values only.
    #
    #   Default: `default`
    #   @return [String]
    #
    # @!attribute [rw] offering_type
    #   The Reserved Instance offering type. If you are using tools that
    #   predate the 2011-11-01 API version, you only have access to the
    #   `Medium Utilization` Reserved Instance offering type.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results of the initial request can be seen by
    #   sending another request with the returned `NextToken` value. The
    #   maximum is 100.
    #
    #   Default: 100
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferingsRequest AWS API Documentation
    #
    class DescribeReservedInstancesOfferingsRequest < Struct.new(
      :availability_zone,
      :include_marketplace,
      :instance_type,
      :max_duration,
      :max_instance_count,
      :min_duration,
      :offering_class,
      :product_description,
      :reserved_instances_offering_ids,
      :availability_zone_id,
      :dry_run,
      :filters,
      :instance_tenancy,
      :offering_type,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeReservedInstancesOfferings.
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] reserved_instances_offerings
    #   A list of Reserved Instances offerings.
    #   @return [Array<Types::ReservedInstancesOffering>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesOfferingsResult AWS API Documentation
    #
    class DescribeReservedInstancesOfferingsResult < Struct.new(
      :next_token,
      :reserved_instances_offerings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeReservedInstances.
    #
    # @!attribute [rw] offering_class
    #   Describes whether the Reserved Instance is Standard or Convertible.
    #   @return [String]
    #
    # @!attribute [rw] reserved_instances_ids
    #   One or more Reserved Instance IDs.
    #
    #   Default: Describes all your Reserved Instances, or only those
    #   otherwise specified.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `availability-zone` - The Availability Zone where the Reserved
    #     Instance can be used.
    #
    #   * `availability-zone-id` - The ID of the Availability Zone where the
    #     Reserved Instance can be used.
    #
    #   * `duration` - The duration of the Reserved Instance (one year or
    #     three years), in seconds (`31536000` \| `94608000`).
    #
    #   * `end` - The time when the Reserved Instance expires (for example,
    #     2015-08-07T11:54:42.000Z).
    #
    #   * `fixed-price` - The purchase price of the Reserved Instance (for
    #     example, 9800.0).
    #
    #   * `instance-type` - The instance type that is covered by the
    #     reservation.
    #
    #   * `scope` - The scope of the Reserved Instance (`Region` or
    #     `Availability Zone`).
    #
    #   * `product-description` - The Reserved Instance product platform
    #     description (`Linux/UNIX` \| `Linux with SQL Server Standard` \|
    #     `Linux with SQL Server Web` \| `Linux with SQL Server Enterprise`
    #     \| `SUSE Linux` \| `Red Hat Enterprise Linux` \| `Red Hat
    #     Enterprise Linux with HA` \| `Windows` \| `Windows with SQL Server
    #     Standard` \| `Windows with SQL Server Web` \| `Windows with SQL
    #     Server Enterprise`).
    #
    #   * `reserved-instances-id` - The ID of the Reserved Instance.
    #
    #   * `start` - The time at which the Reserved Instance purchase request
    #     was placed (for example, 2014-08-07T11:54:42.000Z).
    #
    #   * `state` - The state of the Reserved Instance (`payment-pending` \|
    #     `active` \| `payment-failed` \| `retired`).
    #
    #   * `tag:<key>` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `usage-price` - The usage price of the Reserved Instance, per hour
    #     (for example, 0.84).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] offering_type
    #   The Reserved Instance offering type. If you are using tools that
    #   predate the 2011-11-01 API version, you only have access to the
    #   `Medium Utilization` Reserved Instance offering type.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesRequest AWS API Documentation
    #
    class DescribeReservedInstancesRequest < Struct.new(
      :offering_class,
      :reserved_instances_ids,
      :dry_run,
      :filters,
      :offering_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output for DescribeReservedInstances.
    #
    # @!attribute [rw] reserved_instances
    #   A list of Reserved Instances.
    #   @return [Array<Types::ReservedInstances>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeReservedInstancesResult AWS API Documentation
    #
    class DescribeReservedInstancesResult < Struct.new(
      :reserved_instances)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_endpoint_ids
    #   The IDs of the route server endpoints to describe.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters to apply to the describe request.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteServerEndpointsRequest AWS API Documentation
    #
    class DescribeRouteServerEndpointsRequest < Struct.new(
      :route_server_endpoint_ids,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_endpoints
    #   Information about the described route server endpoints.
    #   @return [Array<Types::RouteServerEndpoint>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteServerEndpointsResult AWS API Documentation
    #
    class DescribeRouteServerEndpointsResult < Struct.new(
      :route_server_endpoints,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_peer_ids
    #   The IDs of the route server peers to describe.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters to apply to the describe request.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteServerPeersRequest AWS API Documentation
    #
    class DescribeRouteServerPeersRequest < Struct.new(
      :route_server_peer_ids,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_peers
    #   Information about the described route server peers.
    #   @return [Array<Types::RouteServerPeer>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteServerPeersResult AWS API Documentation
    #
    class DescribeRouteServerPeersResult < Struct.new(
      :route_server_peers,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_ids
    #   The IDs of the route servers to describe.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call.
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   One or more filters to apply to the describe request.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteServersRequest AWS API Documentation
    #
    class DescribeRouteServersRequest < Struct.new(
      :route_server_ids,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_servers
    #   Information about the described route servers.
    #   @return [Array<Types::RouteServer>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteServersResult AWS API Documentation
    #
    class DescribeRouteServersResult < Struct.new(
      :route_servers,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] route_table_ids
    #   The IDs of the route tables.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `association.gateway-id` - The ID of the gateway involved in the
    #     association.
    #
    #   * `association.route-table-association-id` - The ID of an
    #     association ID for the route table.
    #
    #   * `association.route-table-id` - The ID of the route table involved
    #     in the association.
    #
    #   * `association.subnet-id` - The ID of the subnet involved in the
    #     association.
    #
    #   * `association.main` - Indicates whether the route table is the main
    #     route table for the VPC (`true` \| `false`). Route tables that do
    #     not have an association ID are not returned in the response.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the route table.
    #
    #   * `route-table-id` - The ID of the route table.
    #
    #   * `route.destination-cidr-block` - The IPv4 CIDR range specified in
    #     a route in the table.
    #
    #   * `route.destination-ipv6-cidr-block` - The IPv6 CIDR range
    #     specified in a route in the route table.
    #
    #   * `route.destination-prefix-list-id` - The ID (prefix) of the Amazon
    #     Web Services service specified in a route in the table.
    #
    #   * `route.egress-only-internet-gateway-id` - The ID of an egress-only
    #     Internet gateway specified in a route in the route table.
    #
    #   * `route.gateway-id` - The ID of a gateway specified in a route in
    #     the table.
    #
    #   * `route.instance-id` - The ID of an instance specified in a route
    #     in the table.
    #
    #   * `route.nat-gateway-id` - The ID of a NAT gateway.
    #
    #   * `route.transit-gateway-id` - The ID of a transit gateway.
    #
    #   * `route.origin` - Describes how the route was created.
    #     `CreateRouteTable` indicates that the route was automatically
    #     created when the route table was created; `CreateRoute` indicates
    #     that the route was manually added to the route table;
    #     `EnableVgwRoutePropagation` indicates that the route was
    #     propagated by route propagation.
    #
    #   * `route.state` - The state of a route in the route table (`active`
    #     \| `blackhole`). The blackhole state indicates that the route's
    #     target isn't available (for example, the specified gateway isn't
    #     attached to the VPC, the specified NAT instance has been
    #     terminated, and so on).
    #
    #   * `route.vpc-peering-connection-id` - The ID of a VPC peering
    #     connection specified in a route in the table.
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC for the route table.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTablesRequest AWS API Documentation
    #
    class DescribeRouteTablesRequest < Struct.new(
      :next_token,
      :max_results,
      :dry_run,
      :route_table_ids,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeRouteTables.
    #
    # @!attribute [rw] route_tables
    #   Information about the route tables.
    #   @return [Array<Types::RouteTable>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeRouteTablesResult AWS API Documentation
    #
    class DescribeRouteTablesResult < Struct.new(
      :route_tables,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeScheduledInstanceAvailability.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone` - The Availability Zone (for example,
    #     `us-west-2a`).
    #
    #   * `instance-type` - The instance type (for example, `c4.large`).
    #
    #   * `platform` - The platform (`Linux/UNIX` or `Windows`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] first_slot_start_time_range
    #   The time period for the first schedule to start.
    #   @return [Types::SlotDateTimeRangeRequest]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call. This value
    #   can be between 5 and 300. The default value is 300. To retrieve the
    #   remaining results, make another call with the returned `NextToken`
    #   value.
    #   @return [Integer]
    #
    # @!attribute [rw] max_slot_duration_in_hours
    #   The maximum available duration, in hours. This value must be greater
    #   than `MinSlotDurationInHours` and less than 1,720.
    #   @return [Integer]
    #
    # @!attribute [rw] min_slot_duration_in_hours
    #   The minimum available duration, in hours. The minimum required
    #   duration is 1,200 hours per year. For example, the minimum daily
    #   schedule is 4 hours, the minimum weekly schedule is 24 hours, and
    #   the minimum monthly schedule is 100 hours.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next set of results.
    #   @return [String]
    #
    # @!attribute [rw] recurrence
    #   The schedule recurrence.
    #   @return [Types::ScheduledInstanceRecurrenceRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailabilityRequest AWS API Documentation
    #
    class DescribeScheduledInstanceAvailabilityRequest < Struct.new(
      :dry_run,
      :filters,
      :first_slot_start_time_range,
      :max_results,
      :max_slot_duration_in_hours,
      :min_slot_duration_in_hours,
      :next_token,
      :recurrence)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeScheduledInstanceAvailability.
    #
    # @!attribute [rw] next_token
    #   The token required to retrieve the next set of results. This value
    #   is `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] scheduled_instance_availability_set
    #   Information about the available Scheduled Instances.
    #   @return [Array<Types::ScheduledInstanceAvailability>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstanceAvailabilityResult AWS API Documentation
    #
    class DescribeScheduledInstanceAvailabilityResult < Struct.new(
      :next_token,
      :scheduled_instance_availability_set)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeScheduledInstances.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone` - The Availability Zone (for example,
    #     `us-west-2a`).
    #
    #   * `instance-type` - The instance type (for example, `c4.large`).
    #
    #   * `platform` - The platform (`Linux/UNIX` or `Windows`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call. This value
    #   can be between 5 and 300. The default value is 100. To retrieve the
    #   remaining results, make another call with the returned `NextToken`
    #   value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next set of results.
    #   @return [String]
    #
    # @!attribute [rw] scheduled_instance_ids
    #   The Scheduled Instance IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] slot_start_time_range
    #   The time period for the first schedule to start.
    #   @return [Types::SlotStartTimeRangeRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstancesRequest AWS API Documentation
    #
    class DescribeScheduledInstancesRequest < Struct.new(
      :dry_run,
      :filters,
      :max_results,
      :next_token,
      :scheduled_instance_ids,
      :slot_start_time_range)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeScheduledInstances.
    #
    # @!attribute [rw] next_token
    #   The token required to retrieve the next set of results. This value
    #   is `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] scheduled_instance_set
    #   Information about the Scheduled Instances.
    #   @return [Array<Types::ScheduledInstance>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeScheduledInstancesResult AWS API Documentation
    #
    class DescribeScheduledInstancesResult < Struct.new(
      :next_token,
      :scheduled_instance_set)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_id
    #   The IDs of the security groups in your account.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferencesRequest AWS API Documentation
    #
    class DescribeSecurityGroupReferencesRequest < Struct.new(
      :dry_run,
      :group_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] security_group_reference_set
    #   Information about the VPCs with the referencing security groups.
    #   @return [Array<Types::SecurityGroupReference>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupReferencesResult AWS API Documentation
    #
    class DescribeSecurityGroupReferencesResult < Struct.new(
      :security_group_reference_set)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `group-id` - The ID of the security group.
    #
    #   * `security-group-rule-id` - The ID of the security group rule.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] security_group_rule_ids
    #   The IDs of the security group rules.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. This value can be between 5 and 1000. If this parameter
    #   is not specified, then all items are returned. For more information,
    #   see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupRulesRequest AWS API Documentation
    #
    class DescribeSecurityGroupRulesRequest < Struct.new(
      :filters,
      :security_group_rule_ids,
      :dry_run,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] security_group_rules
    #   Information about security group rules.
    #   @return [Array<Types::SecurityGroupRule>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupRulesResult AWS API Documentation
    #
    class DescribeSecurityGroupRulesResult < Struct.new(
      :security_group_rules,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   Security group VPC association filters.
    #
    #   * `group-id`: The security group ID.
    #
    #   * `group-owner-id`: The group owner ID.
    #
    #   * `vpc-id`: The ID of the associated VPC.
    #
    #   * `vpc-owner-id`: The account ID of the VPC owner.
    #
    #   * `state`: The state of the association.
    #
    #   * `tag:<key>`: The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key`: The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupVpcAssociationsRequest AWS API Documentation
    #
    class DescribeSecurityGroupVpcAssociationsRequest < Struct.new(
      :filters,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] security_group_vpc_associations
    #   The security group VPC associations.
    #   @return [Array<Types::SecurityGroupVpcAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupVpcAssociationsResult AWS API Documentation
    #
    class DescribeSecurityGroupVpcAssociationsResult < Struct.new(
      :security_group_vpc_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] group_ids
    #   The IDs of the security groups. Required for security groups in a
    #   nondefault VPC.
    #
    #   Default: Describes all of your security groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] group_names
    #   \[Default VPC\] The names of the security groups. You can specify
    #   either the security group name or the security group ID.
    #
    #   Default: Describes all of your security groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. This value can be between 5 and 1000. If this parameter
    #   is not specified, then all items are returned. For more information,
    #   see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters. If using multiple filters for rules, the results
    #   include security groups for which any combination of rules - not
    #   necessarily a single rule - match all filters.
    #
    #   * `description` - The description of the security group.
    #
    #   * `egress.ip-permission.cidr` - An IPv4 CIDR block for an outbound
    #     security group rule.
    #
    #   * `egress.ip-permission.from-port` - For an outbound rule, the start
    #     of port range for the TCP and UDP protocols, or an ICMP type
    #     number.
    #
    #   * `egress.ip-permission.group-id` - The ID of a security group that
    #     has been referenced in an outbound security group rule.
    #
    #   * `egress.ip-permission.group-name` - The name of a security group
    #     that is referenced in an outbound security group rule.
    #
    #   * `egress.ip-permission.ipv6-cidr` - An IPv6 CIDR block for an
    #     outbound security group rule.
    #
    #   * `egress.ip-permission.prefix-list-id` - The ID of a prefix list to
    #     which a security group rule allows outbound access.
    #
    #   * `egress.ip-permission.protocol` - The IP protocol for an outbound
    #     security group rule (`tcp` \| `udp` \| `icmp`, a protocol number,
    #     or -1 for all protocols).
    #
    #   * `egress.ip-permission.to-port` - For an outbound rule, the end of
    #     port range for the TCP and UDP protocols, or an ICMP code.
    #
    #   * `egress.ip-permission.user-id` - The ID of an Amazon Web Services
    #     account that has been referenced in an outbound security group
    #     rule.
    #
    #   * `group-id` - The ID of the security group.
    #
    #   * `group-name` - The name of the security group.
    #
    #   * `ip-permission.cidr` - An IPv4 CIDR block for an inbound security
    #     group rule.
    #
    #   * `ip-permission.from-port` - For an inbound rule, the start of port
    #     range for the TCP and UDP protocols, or an ICMP type number.
    #
    #   * `ip-permission.group-id` - The ID of a security group that has
    #     been referenced in an inbound security group rule.
    #
    #   * `ip-permission.group-name` - The name of a security group that is
    #     referenced in an inbound security group rule.
    #
    #   * `ip-permission.ipv6-cidr` - An IPv6 CIDR block for an inbound
    #     security group rule.
    #
    #   * `ip-permission.prefix-list-id` - The ID of a prefix list from
    #     which a security group rule allows inbound access.
    #
    #   * `ip-permission.protocol` - The IP protocol for an inbound security
    #     group rule (`tcp` \| `udp` \| `icmp`, a protocol number, or -1 for
    #     all protocols).
    #
    #   * `ip-permission.to-port` - For an inbound rule, the end of port
    #     range for the TCP and UDP protocols, or an ICMP code.
    #
    #   * `ip-permission.user-id` - The ID of an Amazon Web Services account
    #     that has been referenced in an inbound security group rule.
    #
    #   * `owner-id` - The Amazon Web Services account ID of the owner of
    #     the security group.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC specified when the security group was
    #     created.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupsRequest AWS API Documentation
    #
    class DescribeSecurityGroupsRequest < Struct.new(
      :group_ids,
      :group_names,
      :next_token,
      :max_results,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] security_groups
    #   Information about the security groups.
    #   @return [Array<Types::SecurityGroup>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSecurityGroupsResult AWS API Documentation
    #
    class DescribeSecurityGroupsResult < Struct.new(
      :next_token,
      :security_groups)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] service_link_virtual_interface_ids
    #   The IDs of the service link virtual interfaces.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters to use for narrowing down the request. The following
    #   filters are supported:
    #
    #   * `outpost-lag-id` - The ID of the Outpost LAG.
    #
    #   * `outpost-arn` - The Outpost ARN.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the service link virtual interface.
    #
    #   * `state` - The state of the Outpost LAG.
    #
    #   * `vlan` - The ID of the address pool.
    #
    #   * `service-link-virtual-interface-id` - The ID of the service link
    #     virtual interface.
    #
    #   * `local-gateway-virtual-interface-id` - The ID of the local gateway
    #     virtual interface.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeServiceLinkVirtualInterfacesRequest AWS API Documentation
    #
    class DescribeServiceLinkVirtualInterfacesRequest < Struct.new(
      :service_link_virtual_interface_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] service_link_virtual_interfaces
    #   Describes the service link virtual interfaces.
    #   @return [Array<Types::ServiceLinkVirtualInterface>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeServiceLinkVirtualInterfacesResult AWS API Documentation
    #
    class DescribeServiceLinkVirtualInterfacesResult < Struct.new(
      :service_link_virtual_interfaces,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] attribute
    #   The snapshot attribute you would like to view.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the EBS snapshot.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttributeRequest AWS API Documentation
    #
    class DescribeSnapshotAttributeRequest < Struct.new(
      :attribute,
      :snapshot_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] product_codes
    #   The product codes.
    #   @return [Array<Types::ProductCode>]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the EBS snapshot.
    #   @return [String]
    #
    # @!attribute [rw] create_volume_permissions
    #   The users and groups that have the permissions for creating volumes
    #   from the snapshot.
    #   @return [Array<Types::CreateVolumePermission>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotAttributeResult AWS API Documentation
    #
    class DescribeSnapshotAttributeResult < Struct.new(
      :product_codes,
      :snapshot_id,
      :create_volume_permissions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `snapshot-id` - The snapshot ID.
    #
    #   * `volume-id` - The ID of the volume the snapshot is for.
    #
    #   * `last-tiering-operation` - The state of the last archive or
    #     restore action. (`archival-in-progress` \| `archival-completed` \|
    #     `archival-failed` \| `permanent-restore-in-progress` \|
    #     `permanent-restore-completed` \| `permanent-restore-failed` \|
    #     `temporary-restore-in-progress` \| `temporary-restore-completed`
    #     \| `temporary-restore-failed`)
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotTierStatusRequest AWS API Documentation
    #
    class DescribeSnapshotTierStatusRequest < Struct.new(
      :filters,
      :dry_run,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_tier_statuses
    #   Information about the snapshot's storage tier.
    #   @return [Array<Types::SnapshotTierStatus>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotTierStatusResult AWS API Documentation
    #
    class DescribeSnapshotTierStatusResult < Struct.new(
      :snapshot_tier_statuses,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] owner_ids
    #   Scopes the results to snapshots with the specified owners. You can
    #   specify a combination of Amazon Web Services account IDs, `self`,
    #   and `amazon`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] restorable_by_user_ids
    #   The IDs of the Amazon Web Services accounts that can create volumes
    #   from the snapshot.
    #   @return [Array<String>]
    #
    # @!attribute [rw] snapshot_ids
    #   The snapshot IDs.
    #
    #   Default: Describes the snapshots for which you have create volume
    #   permissions.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `description` - A description of the snapshot.
    #
    #   * `encrypted` - Indicates whether the snapshot is encrypted (`true`
    #     \| `false`)
    #
    #   * `owner-alias` - The owner alias, from an Amazon-maintained list
    #     (`amazon`). This is not the user-configured Amazon Web Services
    #     account alias set using the IAM console. We recommend that you use
    #     the related parameter instead of this filter.
    #
    #   * `owner-id` - The Amazon Web Services account ID of the owner. We
    #     recommend that you use the related parameter instead of this
    #     filter.
    #
    #   * `progress` - The progress of the snapshot, as a percentage (for
    #     example, 80%).
    #
    #   * `snapshot-id` - The snapshot ID.
    #
    #   * `start-time` - The time stamp when the snapshot was initiated.
    #
    #   * `status` - The status of the snapshot (`pending` \| `completed` \|
    #     `error`).
    #
    #   * `storage-tier` - The storage tier of the snapshot (`archive` \|
    #     `standard`).
    #
    #   * `transfer-type` - The type of operation used to create the
    #     snapshot (`time-based` \| `standard`).
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `volume-id` - The ID of the volume the snapshot is for.
    #
    #   * `volume-size` - The size of the volume, in GiB.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotsRequest AWS API Documentation
    #
    class DescribeSnapshotsRequest < Struct.new(
      :max_results,
      :next_token,
      :owner_ids,
      :restorable_by_user_ids,
      :snapshot_ids,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] snapshots
    #   Information about the snapshots.
    #   @return [Array<Types::Snapshot>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSnapshotsResult AWS API Documentation
    #
    class DescribeSnapshotsResult < Struct.new(
      :next_token,
      :snapshots)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeSpotDatafeedSubscription.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscriptionRequest AWS API Documentation
    #
    class DescribeSpotDatafeedSubscriptionRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeSpotDatafeedSubscription.
    #
    # @!attribute [rw] spot_datafeed_subscription
    #   The Spot Instance data feed subscription.
    #   @return [Types::SpotDatafeedSubscription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotDatafeedSubscriptionResult AWS API Documentation
    #
    class DescribeSpotDatafeedSubscriptionResult < Struct.new(
      :spot_datafeed_subscription)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeSpotFleetInstances.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_fleet_request_id
    #   The ID of the Spot Fleet request.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstancesRequest AWS API Documentation
    #
    class DescribeSpotFleetInstancesRequest < Struct.new(
      :dry_run,
      :spot_fleet_request_id,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeSpotFleetInstances.
    #
    # @!attribute [rw] active_instances
    #   The running instances. This list is refreshed periodically and might
    #   be out of date.
    #   @return [Array<Types::ActiveInstance>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] spot_fleet_request_id
    #   The ID of the Spot Fleet request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetInstancesResponse AWS API Documentation
    #
    class DescribeSpotFleetInstancesResponse < Struct.new(
      :active_instances,
      :next_token,
      :spot_fleet_request_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeSpotFleetRequestHistory.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_fleet_request_id
    #   The ID of the Spot Fleet request.
    #   @return [String]
    #
    # @!attribute [rw] event_type
    #   The type of events to describe. By default, all events are
    #   described.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The starting date and time for the events, in UTC format (for
    #   example, *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistoryRequest AWS API Documentation
    #
    class DescribeSpotFleetRequestHistoryRequest < Struct.new(
      :dry_run,
      :spot_fleet_request_id,
      :event_type,
      :start_time,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeSpotFleetRequestHistory.
    #
    # @!attribute [rw] history_records
    #   Information about the events in the history of the Spot Fleet
    #   request.
    #   @return [Array<Types::HistoryRecord>]
    #
    # @!attribute [rw] last_evaluated_time
    #   The last date and time for the events, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). All records up to this time were
    #   retrieved.
    #
    #   If `nextToken` indicates that there are more items, this value is
    #   not present.
    #   @return [Time]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] spot_fleet_request_id
    #   The ID of the Spot Fleet request.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The starting date and time for the events, in UTC format (for
    #   example, *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestHistoryResponse AWS API Documentation
    #
    class DescribeSpotFleetRequestHistoryResponse < Struct.new(
      :history_records,
      :last_evaluated_time,
      :next_token,
      :spot_fleet_request_id,
      :start_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeSpotFleetRequests.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_fleet_request_ids
    #   The IDs of the Spot Fleet requests.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestsRequest AWS API Documentation
    #
    class DescribeSpotFleetRequestsRequest < Struct.new(
      :dry_run,
      :spot_fleet_request_ids,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeSpotFleetRequests.
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] spot_fleet_request_configs
    #   Information about the configuration of your Spot Fleet.
    #   @return [Array<Types::SpotFleetRequestConfig>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotFleetRequestsResponse AWS API Documentation
    #
    class DescribeSpotFleetRequestsResponse < Struct.new(
      :next_token,
      :spot_fleet_request_configs)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeSpotInstanceRequests.
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_instance_request_ids
    #   The IDs of the Spot Instance requests.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone-group` - The Availability Zone group.
    #
    #   * `create-time` - The time stamp when the Spot Instance request was
    #     created.
    #
    #   * `fault-code` - The fault code related to the request.
    #
    #   * `fault-message` - The fault message related to the request.
    #
    #   * `instance-id` - The ID of the instance that fulfilled the request.
    #
    #   * `launch-group` - The Spot Instance launch group.
    #
    #   * `launch.block-device-mapping.delete-on-termination` - Indicates
    #     whether the EBS volume is deleted on instance termination.
    #
    #   * `launch.block-device-mapping.device-name` - The device name for
    #     the volume in the block device mapping (for example, `/dev/sdh` or
    #     `xvdh`).
    #
    #   * `launch.block-device-mapping.snapshot-id` - The ID of the snapshot
    #     for the EBS volume.
    #
    #   * `launch.block-device-mapping.volume-size` - The size of the EBS
    #     volume, in GiB.
    #
    #   * `launch.block-device-mapping.volume-type` - The type of EBS
    #     volume: `gp2` or `gp3` for General Purpose SSD, `io1` or `io2` for
    #     Provisioned IOPS SSD, `st1` for Throughput Optimized HDD, `sc1`
    #     for Cold HDD, or `standard` for Magnetic.
    #
    #   * `launch.group-id` - The ID of the security group for the instance.
    #
    #   * `launch.group-name` - The name of the security group for the
    #     instance.
    #
    #   * `launch.image-id` - The ID of the AMI.
    #
    #   * `launch.instance-type` - The type of instance (for example,
    #     `m3.medium`).
    #
    #   * `launch.kernel-id` - The kernel ID.
    #
    #   * `launch.key-name` - The name of the key pair the instance launched
    #     with.
    #
    #   * `launch.monitoring-enabled` - Whether detailed monitoring is
    #     enabled for the Spot Instance.
    #
    #   * `launch.ramdisk-id` - The RAM disk ID.
    #
    #   * `launched-availability-zone` - The Availability Zone in which the
    #     request is launched.
    #
    #   * `launched-availability-zone-id` - The ID of the Availability Zone
    #     in which the request is launched.
    #
    #   * `network-interface.addresses.primary` - Indicates whether the IP
    #     address is the primary private IP address.
    #
    #   * `network-interface.delete-on-termination` - Indicates whether the
    #     network interface is deleted when the instance is terminated.
    #
    #   * `network-interface.description` - A description of the network
    #     interface.
    #
    #   * `network-interface.device-index` - The index of the device for the
    #     network interface attachment on the instance.
    #
    #   * `network-interface.group-id` - The ID of the security group
    #     associated with the network interface.
    #
    #   * `network-interface.network-interface-id` - The ID of the network
    #     interface.
    #
    #   * `network-interface.private-ip-address` - The primary private IP
    #     address of the network interface.
    #
    #   * `network-interface.subnet-id` - The ID of the subnet for the
    #     instance.
    #
    #   * `product-description` - The product description associated with
    #     the instance (`Linux/UNIX` \| `Windows`).
    #
    #   * `spot-instance-request-id` - The Spot Instance request ID.
    #
    #   * `spot-price` - The maximum hourly price for any Spot Instance
    #     launched to fulfill the request.
    #
    #   * `state` - The state of the Spot Instance request (`open` \|
    #     `active` \| `closed` \| `cancelled` \| `failed`). Spot request
    #     status information can help you track your Amazon EC2 Spot
    #     Instance requests. For more information, see [Spot request
    #     status][1] in the *Amazon EC2 User Guide*.
    #
    #   * `status-code` - The short code describing the most recent
    #     evaluation of your Spot Instance request.
    #
    #   * `status-message` - The message explaining the status of the Spot
    #     Instance request.
    #
    #   * `tag:<key>` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `type` - The type of Spot Instance request (`one-time` \|
    #     `persistent`).
    #
    #   * `valid-from` - The start date of the request.
    #
    #   * `valid-until` - The end date of the request.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequestsRequest AWS API Documentation
    #
    class DescribeSpotInstanceRequestsRequest < Struct.new(
      :next_token,
      :max_results,
      :dry_run,
      :spot_instance_request_ids,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeSpotInstanceRequests.
    #
    # @!attribute [rw] spot_instance_requests
    #   The Spot Instance requests.
    #   @return [Array<Types::SpotInstanceRequest>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotInstanceRequestsResult AWS API Documentation
    #
    class DescribeSpotInstanceRequestsResult < Struct.new(
      :spot_instance_requests,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeSpotPriceHistory.
    #
    # @!attribute [rw] availability_zone_id
    #   Filters the results by the specified ID of the Availability Zone.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] start_time
    #   The date and time, up to the past 90 days, from which to start
    #   retrieving the price history data, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The date and time, up to the current date, from which to stop
    #   retrieving the price history data, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @!attribute [rw] instance_types
    #   Filters the results by the specified instance types.
    #   @return [Array<String>]
    #
    # @!attribute [rw] product_descriptions
    #   Filters the results by the specified basic product descriptions.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone` - The Availability Zone for which prices
    #     should be returned.
    #
    #   * `availability-zone-id` - The ID of the Availability Zone for which
    #     prices should be returned.
    #
    #   * `instance-type` - The type of instance (for example, `m3.medium`).
    #
    #   * `product-description` - The product description for the Spot price
    #     (`Linux/UNIX` \| `Red Hat Enterprise Linux` \| `SUSE Linux` \|
    #     `Windows` \| `Linux/UNIX (Amazon VPC)` \| `Red Hat Enterprise
    #     Linux (Amazon VPC)` \| `SUSE Linux (Amazon VPC)` \| `Windows
    #     (Amazon VPC)`).
    #
    #   * `spot-price` - The Spot price. The value must match exactly (or
    #     use wildcards; greater than or less than comparison is not
    #     supported).
    #
    #   * `timestamp` - The time stamp of the Spot price history, in UTC
    #     format (for example, *ddd MMM dd HH*:*mm*:*ss* UTC *YYYY*). You
    #     can use wildcards (`*` and `?`). Greater than or less than
    #     comparison is not supported.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] availability_zone
    #   Filters the results by the specified Availability Zone.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistoryRequest AWS API Documentation
    #
    class DescribeSpotPriceHistoryRequest < Struct.new(
      :availability_zone_id,
      :dry_run,
      :start_time,
      :end_time,
      :instance_types,
      :product_descriptions,
      :filters,
      :availability_zone,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeSpotPriceHistory.
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is an empty string (`""`) or `null` when there are
    #   no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] spot_price_history
    #   The historical Spot prices.
    #   @return [Array<Types::SpotPrice>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSpotPriceHistoryResult AWS API Documentation
    #
    class DescribeSpotPriceHistoryResult < Struct.new(
      :next_token,
      :spot_price_history)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroupsRequest AWS API Documentation
    #
    class DescribeStaleSecurityGroupsRequest < Struct.new(
      :dry_run,
      :max_results,
      :next_token,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] stale_security_group_set
    #   Information about the stale security groups.
    #   @return [Array<Types::StaleSecurityGroup>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStaleSecurityGroupsResult AWS API Documentation
    #
    class DescribeStaleSecurityGroupsResult < Struct.new(
      :next_token,
      :stale_security_group_set)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_ids
    #   The AMI IDs for which to show progress. Up to 20 AMI IDs can be
    #   included in a request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `task-state` - Returns tasks in a certain state (`InProgress` \|
    #     `Completed` \| `Failed`)
    #
    #   * `bucket` - Returns task information for tasks that targeted a
    #     specific bucket. For the filter value, specify the bucket name.
    #
    #   <note markdown="1"> When you specify the `ImageIds` parameter, any filters that you
    #   specify are ignored. To use the filters, you must remove the
    #   `ImageIds` parameter.
    #
    #    </note>
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #   You cannot specify this parameter and the `ImageIds` parameter in
    #   the same call.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStoreImageTasksRequest AWS API Documentation
    #
    class DescribeStoreImageTasksRequest < Struct.new(
      :image_ids,
      :dry_run,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] store_image_task_results
    #   The information about the AMI store tasks.
    #   @return [Array<Types::StoreImageTaskResult>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeStoreImageTasksResult AWS API Documentation
    #
    class DescribeStoreImageTasksResult < Struct.new(
      :store_image_task_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `availability-zone` - The Availability Zone for the subnet. You
    #     can also use `availabilityZone` as the filter name.
    #
    #   * `availability-zone-id` - The ID of the Availability Zone for the
    #     subnet. You can also use `availabilityZoneId` as the filter name.
    #
    #   * `available-ip-address-count` - The number of IPv4 addresses in the
    #     subnet that are available.
    #
    #   * `cidr-block` - The IPv4 CIDR block of the subnet. The CIDR block
    #     you specify must exactly match the subnet's CIDR block for
    #     information to be returned for the subnet. You can also use `cidr`
    #     or `cidrBlock` as the filter names.
    #
    #   * `customer-owned-ipv4-pool` - The customer-owned IPv4 address pool
    #     associated with the subnet.
    #
    #   * `default-for-az` - Indicates whether this is the default subnet
    #     for the Availability Zone (`true` \| `false`). You can also use
    #     `defaultForAz` as the filter name.
    #
    #   * `enable-dns64` - Indicates whether DNS queries made to the
    #     Amazon-provided DNS Resolver in this subnet should return
    #     synthetic IPv6 addresses for IPv4-only destinations.
    #
    #   * `enable-lni-at-device-index` - Indicates the device position for
    #     local network interfaces in this subnet. For example, `1`
    #     indicates local network interfaces in this subnet are the
    #     secondary network interface (eth1).
    #
    #   * `ipv6-cidr-block-association.ipv6-cidr-block` - An IPv6 CIDR block
    #     associated with the subnet.
    #
    #   * `ipv6-cidr-block-association.association-id` - An association ID
    #     for an IPv6 CIDR block associated with the subnet.
    #
    #   * `ipv6-cidr-block-association.state` - The state of an IPv6 CIDR
    #     block associated with the subnet.
    #
    #   * `ipv6-native` - Indicates whether this is an IPv6 only subnet
    #     (`true` \| `false`).
    #
    #   * `map-customer-owned-ip-on-launch` - Indicates whether a network
    #     interface created in this subnet (including a network interface
    #     created by RunInstances) receives a customer-owned IPv4 address.
    #
    #   * `map-public-ip-on-launch` - Indicates whether instances launched
    #     in this subnet receive a public IPv4 address.
    #
    #   * `outpost-arn` - The Amazon Resource Name (ARN) of the Outpost.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the subnet.
    #
    #   * `private-dns-name-options-on-launch.hostname-type` - The type of
    #     hostname to assign to instances in the subnet at launch. For
    #     IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS
    #     name can be based on the instance IPv4 address (ip-name) or the
    #     instance ID (resource-name). For IPv6 only subnets, an instance
    #     DNS name must be based on the instance ID (resource-name).
    #
    #   * `private-dns-name-options-on-launch.enable-resource-name-dns-a-record`
    #     - Indicates whether to respond to DNS queries for instance
    #     hostnames with DNS A records.
    #
    #   * `private-dns-name-options-on-launch.enable-resource-name-dns-aaaa-record`
    #     - Indicates whether to respond to DNS queries for instance
    #     hostnames with DNS AAAA records.
    #
    #   * `state` - The state of the subnet (`pending` \| `available`).
    #
    #   * `subnet-arn` - The Amazon Resource Name (ARN) of the subnet.
    #
    #   * `subnet-id` - The ID of the subnet.
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC for the subnet.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets.
    #
    #   Default: Describes all your subnets.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnetsRequest AWS API Documentation
    #
    class DescribeSubnetsRequest < Struct.new(
      :filters,
      :subnet_ids,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] subnets
    #   Information about the subnets.
    #   @return [Array<Types::Subnet>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeSubnetsResult AWS API Documentation
    #
    class DescribeSubnetsResult < Struct.new(
      :next_token,
      :subnets)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `key` - The tag key.
    #
    #   * `resource-id` - The ID of the resource.
    #
    #   * `resource-type` - The resource type. For a list of possible
    #     values, see [TagSpecification][1].
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of the tag. For
    #     example, specify "tag:Owner" for the filter name and "TeamA"
    #     for the filter value to find resources with the tag
    #     "Owner=TeamA".
    #
    #   * `value` - The tag value.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_TagSpecification.html
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. This value
    #   can be between 5 and 1000. To get the next page of items, make
    #   another request with the token returned in the output. For more
    #   information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTagsRequest AWS API Documentation
    #
    class DescribeTagsRequest < Struct.new(
      :dry_run,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::TagDescription>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTagsResult AWS API Documentation
    #
    class DescribeTagsResult < Struct.new(
      :next_token,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_rule_ids
    #   Traffic filter rule IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] traffic_mirror_filter_id
    #   Traffic filter ID.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   Traffic mirror filters.
    #
    #   * `traffic-mirror-filter-rule-id`: The ID of the Traffic Mirror
    #     rule.
    #
    #   * `traffic-mirror-filter-id`: The ID of the filter that this rule is
    #     associated with.
    #
    #   * `rule-number`: The number of the Traffic Mirror rule.
    #
    #   * `rule-action`: The action taken on the filtered traffic. Possible
    #     actions are `accept` and `reject`.
    #
    #   * `traffic-direction`: The traffic direction. Possible directions
    #     are `ingress` and `egress`.
    #
    #   * `protocol`: The protocol, for example UDP, assigned to the Traffic
    #     Mirror rule.
    #
    #   * `source-cidr-block`: The source CIDR block assigned to the Traffic
    #     Mirror rule.
    #
    #   * `destination-cidr-block`: The destination CIDR block assigned to
    #     the Traffic Mirror rule.
    #
    #   * `description`: The description of the Traffic Mirror rule.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorFilterRulesRequest AWS API Documentation
    #
    class DescribeTrafficMirrorFilterRulesRequest < Struct.new(
      :traffic_mirror_filter_rule_ids,
      :traffic_mirror_filter_id,
      :dry_run,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_rules
    #   Traffic mirror rules.
    #   @return [Array<Types::TrafficMirrorFilterRule>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. The value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorFilterRulesResult AWS API Documentation
    #
    class DescribeTrafficMirrorFilterRulesResult < Struct.new(
      :traffic_mirror_filter_rules,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_ids
    #   The ID of the Traffic Mirror filter.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `description`: The Traffic Mirror filter description.
    #
    #   * `traffic-mirror-filter-id`: The ID of the Traffic Mirror filter.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorFiltersRequest AWS API Documentation
    #
    class DescribeTrafficMirrorFiltersRequest < Struct.new(
      :traffic_mirror_filter_ids,
      :dry_run,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filters
    #   Information about one or more Traffic Mirror filters.
    #   @return [Array<Types::TrafficMirrorFilter>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. The value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorFiltersResult AWS API Documentation
    #
    class DescribeTrafficMirrorFiltersResult < Struct.new(
      :traffic_mirror_filters,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_session_ids
    #   The ID of the Traffic Mirror session.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `description`: The Traffic Mirror session description.
    #
    #   * `network-interface-id`: The ID of the Traffic Mirror session
    #     network interface.
    #
    #   * `owner-id`: The ID of the account that owns the Traffic Mirror
    #     session.
    #
    #   * `packet-length`: The assigned number of packets to mirror.
    #
    #   * `session-number`: The assigned session number.
    #
    #   * `traffic-mirror-filter-id`: The ID of the Traffic Mirror filter.
    #
    #   * `traffic-mirror-session-id`: The ID of the Traffic Mirror session.
    #
    #   * `traffic-mirror-target-id`: The ID of the Traffic Mirror target.
    #
    #   * `virtual-network-id`: The virtual network ID of the Traffic Mirror
    #     session.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorSessionsRequest AWS API Documentation
    #
    class DescribeTrafficMirrorSessionsRequest < Struct.new(
      :traffic_mirror_session_ids,
      :dry_run,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_sessions
    #   Describes one or more Traffic Mirror sessions. By default, all
    #   Traffic Mirror sessions are described. Alternatively, you can filter
    #   the results.
    #   @return [Array<Types::TrafficMirrorSession>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. The value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorSessionsResult AWS API Documentation
    #
    class DescribeTrafficMirrorSessionsResult < Struct.new(
      :traffic_mirror_sessions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_target_ids
    #   The ID of the Traffic Mirror targets.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `description`: The Traffic Mirror target description.
    #
    #   * `network-interface-id`: The ID of the Traffic Mirror session
    #     network interface.
    #
    #   * `network-load-balancer-arn`: The Amazon Resource Name (ARN) of the
    #     Network Load Balancer that is associated with the session.
    #
    #   * `owner-id`: The ID of the account that owns the Traffic Mirror
    #     session.
    #
    #   * `traffic-mirror-target-id`: The ID of the Traffic Mirror target.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorTargetsRequest AWS API Documentation
    #
    class DescribeTrafficMirrorTargetsRequest < Struct.new(
      :traffic_mirror_target_ids,
      :dry_run,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_targets
    #   Information about one or more Traffic Mirror targets.
    #   @return [Array<Types::TrafficMirrorTarget>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. The value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrafficMirrorTargetsResult AWS API Documentation
    #
    class DescribeTrafficMirrorTargetsResult < Struct.new(
      :traffic_mirror_targets,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_ids
    #   The IDs of the attachments.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `association.state` - The state of the association (`associating`
    #     \| `associated` \| `disassociating`).
    #
    #   * `association.transit-gateway-route-table-id` - The ID of the route
    #     table for the transit gateway.
    #
    #   * `resource-id` - The ID of the resource.
    #
    #   * `resource-owner-id` - The ID of the Amazon Web Services account
    #     that owns the resource.
    #
    #   * `resource-type` - The resource type. Valid values are `vpc` \|
    #     `vpn` \| `direct-connect-gateway` \| `peering` \| `connect`.
    #
    #   * `state` - The state of the attachment. Valid values are
    #     `available` \| `deleted` \| `deleting` \| `failed` \| `failing` \|
    #     `initiatingRequest` \| `modifying` \| `pendingAcceptance` \|
    #     `pending` \| `rollingBack` \| `rejected` \| `rejecting`.
    #
    #   * `transit-gateway-attachment-id` - The ID of the attachment.
    #
    #   * `transit-gateway-id` - The ID of the transit gateway.
    #
    #   * `transit-gateway-owner-id` - The ID of the Amazon Web Services
    #     account that owns the transit gateway.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayAttachmentsRequest AWS API Documentation
    #
    class DescribeTransitGatewayAttachmentsRequest < Struct.new(
      :transit_gateway_attachment_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachments
    #   Information about the attachments.
    #   @return [Array<Types::TransitGatewayAttachment>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayAttachmentsResult AWS API Documentation
    #
    class DescribeTransitGatewayAttachmentsResult < Struct.new(
      :transit_gateway_attachments,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_connect_peer_ids
    #   The IDs of the Connect peers.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `state` - The state of the Connect peer (`pending` \| `available`
    #     \| `deleting` \| `deleted`).
    #
    #   * `transit-gateway-attachment-id` - The ID of the attachment.
    #
    #   * `transit-gateway-connect-peer-id` - The ID of the Connect peer.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayConnectPeersRequest AWS API Documentation
    #
    class DescribeTransitGatewayConnectPeersRequest < Struct.new(
      :transit_gateway_connect_peer_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_connect_peers
    #   Information about the Connect peers.
    #   @return [Array<Types::TransitGatewayConnectPeer>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayConnectPeersResult AWS API Documentation
    #
    class DescribeTransitGatewayConnectPeersResult < Struct.new(
      :transit_gateway_connect_peers,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_ids
    #   The IDs of the attachments.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `options.protocol` - The tunnel protocol (`gre`).
    #
    #   * `state` - The state of the attachment (`initiating` \|
    #     `initiatingRequest` \| `pendingAcceptance` \| `rollingBack` \|
    #     `pending` \| `available` \| `modifying` \| `deleting` \| `deleted`
    #     \| `failed` \| `rejected` \| `rejecting` \| `failing`).
    #
    #   * `transit-gateway-attachment-id` - The ID of the Connect
    #     attachment.
    #
    #   * `transit-gateway-id` - The ID of the transit gateway.
    #
    #   * `transport-transit-gateway-attachment-id` - The ID of the transit
    #     gateway attachment from which the Connect attachment was created.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayConnectsRequest AWS API Documentation
    #
    class DescribeTransitGatewayConnectsRequest < Struct.new(
      :transit_gateway_attachment_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_connects
    #   Information about the Connect attachments.
    #   @return [Array<Types::TransitGatewayConnect>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayConnectsResult AWS API Documentation
    #
    class DescribeTransitGatewayConnectsResult < Struct.new(
      :transit_gateway_connects,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_ids
    #   The ID of the transit gateway multicast domain.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `state` - The state of the transit gateway multicast domain. Valid
    #     values are `pending` \| `available` \| `deleting` \| `deleted`.
    #
    #   * `transit-gateway-id` - The ID of the transit gateway.
    #
    #   * `transit-gateway-multicast-domain-id` - The ID of the transit
    #     gateway multicast domain.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayMulticastDomainsRequest AWS API Documentation
    #
    class DescribeTransitGatewayMulticastDomainsRequest < Struct.new(
      :transit_gateway_multicast_domain_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domains
    #   Information about the transit gateway multicast domains.
    #   @return [Array<Types::TransitGatewayMulticastDomain>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayMulticastDomainsResult AWS API Documentation
    #
    class DescribeTransitGatewayMulticastDomainsResult < Struct.new(
      :transit_gateway_multicast_domains,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_ids
    #   One or more IDs of the transit gateway peering attachments.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `transit-gateway-attachment-id` - The ID of the transit gateway
    #     attachment.
    #
    #   * `local-owner-id` - The ID of your Amazon Web Services account.
    #
    #   * `remote-owner-id` - The ID of the Amazon Web Services account in
    #     the remote Region that owns the transit gateway.
    #
    #   * `state` - The state of the peering attachment. Valid values are
    #     `available` \| `deleted` \| `deleting` \| `failed` \| `failing` \|
    #     `initiatingRequest` \| `modifying` \| `pendingAcceptance` \|
    #     `pending` \| `rollingBack` \| `rejected` \| `rejecting`).
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources that have a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `transit-gateway-id` - The ID of the transit gateway.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayPeeringAttachmentsRequest AWS API Documentation
    #
    class DescribeTransitGatewayPeeringAttachmentsRequest < Struct.new(
      :transit_gateway_attachment_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_peering_attachments
    #   The transit gateway peering attachments.
    #   @return [Array<Types::TransitGatewayPeeringAttachment>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayPeeringAttachmentsResult AWS API Documentation
    #
    class DescribeTransitGatewayPeeringAttachmentsResult < Struct.new(
      :transit_gateway_peering_attachments,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_table_ids
    #   The IDs of the transit gateway policy tables.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters associated with the transit gateway policy table.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayPolicyTablesRequest AWS API Documentation
    #
    class DescribeTransitGatewayPolicyTablesRequest < Struct.new(
      :transit_gateway_policy_table_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_tables
    #   Describes the transit gateway policy tables.
    #   @return [Array<Types::TransitGatewayPolicyTable>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayPolicyTablesResult AWS API Documentation
    #
    class DescribeTransitGatewayPolicyTablesResult < Struct.new(
      :transit_gateway_policy_tables,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_announcement_ids
    #   The IDs of the transit gateway route tables that are being
    #   advertised.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters associated with the transit gateway policy table.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayRouteTableAnnouncementsRequest AWS API Documentation
    #
    class DescribeTransitGatewayRouteTableAnnouncementsRequest < Struct.new(
      :transit_gateway_route_table_announcement_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_announcements
    #   Describes the transit gateway route table announcement.
    #   @return [Array<Types::TransitGatewayRouteTableAnnouncement>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayRouteTableAnnouncementsResult AWS API Documentation
    #
    class DescribeTransitGatewayRouteTableAnnouncementsResult < Struct.new(
      :transit_gateway_route_table_announcements,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_ids
    #   The IDs of the transit gateway route tables.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `default-association-route-table` - Indicates whether this is the
    #     default association route table for the transit gateway (`true` \|
    #     `false`).
    #
    #   * `default-propagation-route-table` - Indicates whether this is the
    #     default propagation route table for the transit gateway (`true` \|
    #     `false`).
    #
    #   * `state` - The state of the route table (`available` \| `deleting`
    #     \| `deleted` \| `pending`).
    #
    #   * `transit-gateway-id` - The ID of the transit gateway.
    #
    #   * `transit-gateway-route-table-id` - The ID of the transit gateway
    #     route table.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayRouteTablesRequest AWS API Documentation
    #
    class DescribeTransitGatewayRouteTablesRequest < Struct.new(
      :transit_gateway_route_table_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_tables
    #   Information about the transit gateway route tables.
    #   @return [Array<Types::TransitGatewayRouteTable>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayRouteTablesResult AWS API Documentation
    #
    class DescribeTransitGatewayRouteTablesResult < Struct.new(
      :transit_gateway_route_tables,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_ids
    #   The IDs of the attachments.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `state` - The state of the attachment. Valid values are
    #     `available` \| `deleted` \| `deleting` \| `failed` \| `failing` \|
    #     `initiatingRequest` \| `modifying` \| `pendingAcceptance` \|
    #     `pending` \| `rollingBack` \| `rejected` \| `rejecting`.
    #
    #   * `transit-gateway-attachment-id` - The ID of the attachment.
    #
    #   * `transit-gateway-id` - The ID of the transit gateway.
    #
    #   * `vpc-id` - The ID of the VPC.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayVpcAttachmentsRequest AWS API Documentation
    #
    class DescribeTransitGatewayVpcAttachmentsRequest < Struct.new(
      :transit_gateway_attachment_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_vpc_attachments
    #   Information about the VPC attachments.
    #   @return [Array<Types::TransitGatewayVpcAttachment>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewayVpcAttachmentsResult AWS API Documentation
    #
    class DescribeTransitGatewayVpcAttachmentsResult < Struct.new(
      :transit_gateway_vpc_attachments,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_ids
    #   The IDs of the transit gateways.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `options.propagation-default-route-table-id` - The ID of the
    #     default propagation route table.
    #
    #   * `options.amazon-side-asn` - The private ASN for the Amazon side of
    #     a BGP session.
    #
    #   * `options.association-default-route-table-id` - The ID of the
    #     default association route table.
    #
    #   * `options.auto-accept-shared-attachments` - Indicates whether there
    #     is automatic acceptance of attachment requests (`enable` \|
    #     `disable`).
    #
    #   * `options.default-route-table-association` - Indicates whether
    #     resource attachments are automatically associated with the default
    #     association route table (`enable` \| `disable`).
    #
    #   * `options.default-route-table-propagation` - Indicates whether
    #     resource attachments automatically propagate routes to the default
    #     propagation route table (`enable` \| `disable`).
    #
    #   * `options.dns-support` - Indicates whether DNS support is enabled
    #     (`enable` \| `disable`).
    #
    #   * `options.vpn-ecmp-support` - Indicates whether Equal Cost
    #     Multipath Protocol support is enabled (`enable` \| `disable`).
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the transit gateway.
    #
    #   * `state` - The state of the transit gateway (`available` \|
    #     `deleted` \| `deleting` \| `modifying` \| `pending`).
    #
    #   * `transit-gateway-id` - The ID of the transit gateway.
    #
    #   * `tag-key `- The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewaysRequest AWS API Documentation
    #
    class DescribeTransitGatewaysRequest < Struct.new(
      :transit_gateway_ids,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateways
    #   Information about the transit gateways.
    #   @return [Array<Types::TransitGateway>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTransitGatewaysResult AWS API Documentation
    #
    class DescribeTransitGatewaysResult < Struct.new(
      :transit_gateways,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_ids
    #   The IDs of the associations.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `gre-key` - The ID of a trunk interface association.
    #
    #   * `interface-protocol` - The interface protocol. Valid values are
    #     `VLAN` and `GRE`.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrunkInterfaceAssociationsRequest AWS API Documentation
    #
    class DescribeTrunkInterfaceAssociationsRequest < Struct.new(
      :association_ids,
      :dry_run,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] interface_associations
    #   Information about the trunk associations.
    #   @return [Array<Types::TrunkInterfaceAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeTrunkInterfaceAssociationsResult AWS API Documentation
    #
    class DescribeTrunkInterfaceAssociationsResult < Struct.new(
      :interface_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint_ids
    #   The ID of the Verified Access endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_group_id
    #   The ID of the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessEndpointsRequest AWS API Documentation
    #
    class DescribeVerifiedAccessEndpointsRequest < Struct.new(
      :verified_access_endpoint_ids,
      :verified_access_instance_id,
      :verified_access_group_id,
      :max_results,
      :next_token,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoints
    #   Details about the Verified Access endpoints.
    #   @return [Array<Types::VerifiedAccessEndpoint>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessEndpointsResult AWS API Documentation
    #
    class DescribeVerifiedAccessEndpointsResult < Struct.new(
      :verified_access_endpoints,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_group_ids
    #   The ID of the Verified Access groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessGroupsRequest AWS API Documentation
    #
    class DescribeVerifiedAccessGroupsRequest < Struct.new(
      :verified_access_group_ids,
      :verified_access_instance_id,
      :max_results,
      :next_token,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_groups
    #   Details about the Verified Access groups.
    #   @return [Array<Types::VerifiedAccessGroup>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessGroupsResult AWS API Documentation
    #
    class DescribeVerifiedAccessGroupsResult < Struct.new(
      :verified_access_groups,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance_ids
    #   The IDs of the Verified Access instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessInstanceLoggingConfigurationsRequest AWS API Documentation
    #
    class DescribeVerifiedAccessInstanceLoggingConfigurationsRequest < Struct.new(
      :verified_access_instance_ids,
      :max_results,
      :next_token,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] logging_configurations
    #   The logging configuration for the Verified Access instances.
    #   @return [Array<Types::VerifiedAccessInstanceLoggingConfiguration>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessInstanceLoggingConfigurationsResult AWS API Documentation
    #
    class DescribeVerifiedAccessInstanceLoggingConfigurationsResult < Struct.new(
      :logging_configurations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance_ids
    #   The IDs of the Verified Access instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessInstancesRequest AWS API Documentation
    #
    class DescribeVerifiedAccessInstancesRequest < Struct.new(
      :verified_access_instance_ids,
      :max_results,
      :next_token,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instances
    #   Details about the Verified Access instances.
    #   @return [Array<Types::VerifiedAccessInstance>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessInstancesResult AWS API Documentation
    #
    class DescribeVerifiedAccessInstancesResult < Struct.new(
      :verified_access_instances,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_trust_provider_ids
    #   The IDs of the Verified Access trust providers.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. Filter names and values are case-sensitive.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessTrustProvidersRequest AWS API Documentation
    #
    class DescribeVerifiedAccessTrustProvidersRequest < Struct.new(
      :verified_access_trust_provider_ids,
      :max_results,
      :next_token,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_trust_providers
    #   Details about the Verified Access trust providers.
    #   @return [Array<Types::VerifiedAccessTrustProvider>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVerifiedAccessTrustProvidersResult AWS API Documentation
    #
    class DescribeVerifiedAccessTrustProvidersResult < Struct.new(
      :verified_access_trust_providers,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] attribute
    #   The attribute of the volume. This parameter is required.
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttributeRequest AWS API Documentation
    #
    class DescribeVolumeAttributeRequest < Struct.new(
      :attribute,
      :volume_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] auto_enable_io
    #   The state of `autoEnableIO` attribute.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] product_codes
    #   A list of product codes.
    #   @return [Array<Types::ProductCode>]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeAttributeResult AWS API Documentation
    #
    class DescribeVolumeAttributeResult < Struct.new(
      :auto_enable_io,
      :product_codes,
      :volume_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] volume_ids
    #   The IDs of the volumes.
    #
    #   Default: Describes all your volumes.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `action.code` - The action code for the event (for example,
    #     `enable-volume-io`).
    #
    #   * `action.description` - A description of the action.
    #
    #   * `action.event-id` - The event ID associated with the action.
    #
    #   * `availability-zone` - The Availability Zone of the instance.
    #
    #   * `event.description` - A description of the event.
    #
    #   * `event.event-id` - The event ID.
    #
    #   * `event.event-type` - The event type (for `io-enabled`: `passed` \|
    #     `failed`; for `io-performance`: `io-performance:degraded` \|
    #     `io-performance:severely-degraded` \| `io-performance:stalled`).
    #
    #   * `event.not-after` - The latest end time for the event.
    #
    #   * `event.not-before` - The earliest start time for the event.
    #
    #   * `volume-status.details-name` - The cause for
    #     `volume-status.status` (`io-enabled` \| `io-performance`).
    #
    #   * `volume-status.details-status` - The status of
    #     `volume-status.details-name` (for `io-enabled`: `passed` \|
    #     `failed`; for `io-performance`: `normal` \| `degraded` \|
    #     `severely-degraded` \| `stalled`).
    #
    #   * `volume-status.status` - The status of the volume (`ok` \|
    #     `impaired` \| `warning` \| `insufficient-data`).
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatusRequest AWS API Documentation
    #
    class DescribeVolumeStatusRequest < Struct.new(
      :max_results,
      :next_token,
      :volume_ids,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] volume_statuses
    #   Information about the status of the volumes.
    #   @return [Array<Types::VolumeStatusItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumeStatusResult AWS API Documentation
    #
    class DescribeVolumeStatusResult < Struct.new(
      :next_token,
      :volume_statuses)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] volume_ids
    #   The IDs of the volumes.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `modification-state` - The current modification state (modifying
    #     \| optimizing \| completed \| failed).
    #
    #   * `original-iops` - The original IOPS rate of the volume.
    #
    #   * `original-size` - The original size of the volume, in GiB.
    #
    #   * `original-volume-type` - The original volume type of the volume
    #     (standard \| io1 \| io2 \| gp2 \| sc1 \| st1).
    #
    #   * `originalMultiAttachEnabled` - Indicates whether Multi-Attach
    #     support was enabled (true \| false).
    #
    #   * `start-time` - The modification start time.
    #
    #   * `target-iops` - The target IOPS rate of the volume.
    #
    #   * `target-size` - The target size of the volume, in GiB.
    #
    #   * `target-volume-type` - The target volume type of the volume
    #     (standard \| io1 \| io2 \| gp2 \| sc1 \| st1).
    #
    #   * `targetMultiAttachEnabled` - Indicates whether Multi-Attach
    #     support is to be enabled (true \| false).
    #
    #   * `volume-id` - The ID of the volume.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results (up to a limit of 500) to be returned
    #   in a paginated request. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModificationsRequest AWS API Documentation
    #
    class DescribeVolumesModificationsRequest < Struct.new(
      :dry_run,
      :volume_ids,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] volumes_modifications
    #   Information about the volume modifications.
    #   @return [Array<Types::VolumeModification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesModificationsResult AWS API Documentation
    #
    class DescribeVolumesModificationsResult < Struct.new(
      :next_token,
      :volumes_modifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] volume_ids
    #   The volume IDs. If not specified, then all volumes are included in
    #   the response.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `attachment.attach-time` - The time stamp when the attachment
    #     initiated.
    #
    #   * `attachment.delete-on-termination` - Whether the volume is deleted
    #     on instance termination.
    #
    #   * `attachment.device` - The device name specified in the block
    #     device mapping (for example, `/dev/sda1`).
    #
    #   * `attachment.instance-id` - The ID of the instance the volume is
    #     attached to.
    #
    #   * `attachment.status` - The attachment state (`attaching` \|
    #     `attached` \| `detaching`).
    #
    #   * `availability-zone` - The Availability Zone in which the volume
    #     was created.
    #
    #   * `availability-zone-id` - The ID of the Availability Zone in which
    #     the volume was created.
    #
    #   * `create-time` - The time stamp when the volume was created.
    #
    #   * `encrypted` - Indicates whether the volume is encrypted (`true` \|
    #     `false`)
    #
    #   * `fast-restored` - Indicates whether the volume was created from a
    #     snapshot that is enabled for fast snapshot restore (`true` \|
    #     `false`).
    #
    #   * `multi-attach-enabled` - Indicates whether the volume is enabled
    #     for Multi-Attach (`true` \| `false`)
    #
    #   * `operator.managed` - A Boolean that indicates whether this is a
    #     managed volume.
    #
    #   * `operator.principal` - The principal that manages the volume. Only
    #     valid for managed volumes, where `managed` is `true`.
    #
    #   * `size` - The size of the volume, in GiB.
    #
    #   * `snapshot-id` - The snapshot from which the volume was created.
    #
    #   * `status` - The state of the volume (`creating` \| `available` \|
    #     `in-use` \| `deleting` \| `deleted` \| `error`).
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `volume-id` - The volume ID.
    #
    #   * `volume-type` - The Amazon EBS volume type (`gp2` \| `gp3` \|
    #     `io1` \| `io2` \| `st1` \| `sc1`\| `standard`)
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesRequest AWS API Documentation
    #
    class DescribeVolumesRequest < Struct.new(
      :volume_ids,
      :dry_run,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] volumes
    #   Information about the volumes.
    #   @return [Array<Types::Volume>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVolumesResult AWS API Documentation
    #
    class DescribeVolumesResult < Struct.new(
      :next_token,
      :volumes)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] attribute
    #   The VPC attribute.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttributeRequest AWS API Documentation
    #
    class DescribeVpcAttributeRequest < Struct.new(
      :attribute,
      :vpc_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] enable_dns_hostnames
    #   Indicates whether the instances launched in the VPC get DNS
    #   hostnames. If this attribute is `true`, instances in the VPC get DNS
    #   hostnames; otherwise, they do not.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] enable_dns_support
    #   Indicates whether DNS resolution is enabled for the VPC. If this
    #   attribute is `true`, the Amazon DNS server resolves DNS hostnames
    #   for your instances to their corresponding IP addresses; otherwise,
    #   it does not.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] enable_network_address_usage_metrics
    #   Indicates whether Network Address Usage metrics are enabled for your
    #   VPC.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcAttributeResult AWS API Documentation
    #
    class DescribeVpcAttributeResult < Struct.new(
      :enable_dns_hostnames,
      :enable_dns_support,
      :enable_network_address_usage_metrics,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   Filters for the request:
    #
    #   * `resource-arn` - The Amazon Resource Name (ARN) of a exclusion.
    #
    #   * `internet-gateway-exclusion-mode` - The mode of a VPC BPA
    #     exclusion. Possible values: `allow-bidirectional | allow-egress`.
    #
    #   * `state` - The state of VPC BPA. Possible values:
    #     `create-in-progress | create-complete | update-in-progress |
    #     update-complete | delete-in-progress | deleted-complete |
    #     disable-in-progress | disable-complete`
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `tag-value`: The value of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific value,
    #     regardless of the tag key.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] exclusion_ids
    #   IDs of exclusions.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcBlockPublicAccessExclusionsRequest AWS API Documentation
    #
    class DescribeVpcBlockPublicAccessExclusionsRequest < Struct.new(
      :dry_run,
      :filters,
      :exclusion_ids,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_block_public_access_exclusions
    #   Details related to the exclusions.
    #   @return [Array<Types::VpcBlockPublicAccessExclusion>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcBlockPublicAccessExclusionsResult AWS API Documentation
    #
    class DescribeVpcBlockPublicAccessExclusionsResult < Struct.new(
      :vpc_block_public_access_exclusions,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcBlockPublicAccessOptionsRequest AWS API Documentation
    #
    class DescribeVpcBlockPublicAccessOptionsRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_block_public_access_options
    #   Details related to the options.
    #   @return [Types::VpcBlockPublicAccessOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcBlockPublicAccessOptionsResult AWS API Documentation
    #
    class DescribeVpcBlockPublicAccessOptionsResult < Struct.new(
      :vpc_block_public_access_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_ids
    #   The IDs of the VPCs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupportRequest AWS API Documentation
    #
    class DescribeVpcClassicLinkDnsSupportRequest < Struct.new(
      :vpc_ids,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] vpcs
    #   Information about the ClassicLink DNS support status of the VPCs.
    #   @return [Array<Types::ClassicLinkDnsSupport>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkDnsSupportResult AWS API Documentation
    #
    class DescribeVpcClassicLinkDnsSupportResult < Struct.new(
      :next_token,
      :vpcs)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_ids
    #   The VPCs for which you want to describe the ClassicLink status.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `is-classic-link-enabled` - Whether the VPC is enabled for
    #     ClassicLink (`true` \| `false`).
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkRequest AWS API Documentation
    #
    class DescribeVpcClassicLinkRequest < Struct.new(
      :dry_run,
      :vpc_ids,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpcs
    #   The ClassicLink status of the VPCs.
    #   @return [Array<Types::VpcClassicLink>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcClassicLinkResult AWS API Documentation
    #
    class DescribeVpcClassicLinkResult < Struct.new(
      :vpcs)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_endpoint_ids
    #   The IDs of the VPC endpoints.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `vpc-endpoint-id` - The ID of the VPC endpoint.
    #
    #   * `associated-resource-accessibility` - The association state. When
    #     the state is `accessible`, it returns `AVAILABLE`. When the state
    #     is `inaccessible`, it returns `PENDING` or `FAILED`.
    #
    #   * `association-id` - The ID of the VPC endpoint association.
    #
    #   * `associated-resource-id` - The ID of the associated resource
    #     configuration.
    #
    #   * `service-network-arn` - The Amazon Resource Name (ARN) of the
    #     associated service network. Only VPC endpoints of type service
    #     network will be returned.
    #
    #   * `resource-configuration-group-arn` - The Amazon Resource Name
    #     (ARN) of the resource configuration of type GROUP.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum page size.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The pagination token.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointAssociationsRequest AWS API Documentation
    #
    class DescribeVpcEndpointAssociationsRequest < Struct.new(
      :dry_run,
      :vpc_endpoint_ids,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_endpoint_associations
    #   Details of the endpoint associations.
    #   @return [Array<Types::VpcEndpointAssociation>]
    #
    # @!attribute [rw] next_token
    #   The pagination token.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointAssociationsResult AWS API Documentation
    #
    class DescribeVpcEndpointAssociationsResult < Struct.new(
      :vpc_endpoint_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] connection_notification_id
    #   The ID of the notification.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `connection-notification-arn` - The ARN of the SNS topic for the
    #     notification.
    #
    #   * `connection-notification-id` - The ID of the notification.
    #
    #   * `connection-notification-state` - The state of the notification
    #     (`Enabled` \| `Disabled`).
    #
    #   * `connection-notification-type` - The type of notification
    #     (`Topic`).
    #
    #   * `service-id` - The ID of the endpoint service.
    #
    #   * `vpc-endpoint-id` - The ID of the VPC endpoint.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in a single call. To
    #   retrieve the remaining results, make another request with the
    #   returned `NextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to request the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnectionNotificationsRequest AWS API Documentation
    #
    class DescribeVpcEndpointConnectionNotificationsRequest < Struct.new(
      :dry_run,
      :connection_notification_id,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] connection_notification_set
    #   The notifications.
    #   @return [Array<Types::ConnectionNotification>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnectionNotificationsResult AWS API Documentation
    #
    class DescribeVpcEndpointConnectionNotificationsResult < Struct.new(
      :connection_notification_set,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `ip-address-type` - The IP address type (`ipv4` \| `ipv6`).
    #
    #   * `service-id` - The ID of the service.
    #
    #   * `vpc-endpoint-owner` - The ID of the Amazon Web Services account
    #     ID that owns the endpoint.
    #
    #   * `vpc-endpoint-region` - The Region of the endpoint or
    #     `cross-region` to find endpoints for other Regions.
    #
    #   * `vpc-endpoint-state` - The state of the endpoint
    #     (`pendingAcceptance` \| `pending` \| `available` \| `deleting` \|
    #     `deleted` \| `rejected` \| `failed`).
    #
    #   * `vpc-endpoint-id` - The ID of the endpoint.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results of the initial request can be seen by
    #   sending another request with the returned `NextToken` value. This
    #   value can be between 5 and 1,000; if `MaxResults` is given a value
    #   larger than 1,000, only 1,000 results are returned.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnectionsRequest AWS API Documentation
    #
    class DescribeVpcEndpointConnectionsRequest < Struct.new(
      :dry_run,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_endpoint_connections
    #   Information about the VPC endpoint connections.
    #   @return [Array<Types::VpcEndpointConnection>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointConnectionsResult AWS API Documentation
    #
    class DescribeVpcEndpointConnectionsResult < Struct.new(
      :vpc_endpoint_connections,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_ids
    #   The IDs of the endpoint services.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `service-name` - The name of the service.
    #
    #   * `service-id` - The ID of the service.
    #
    #   * `service-state` - The state of the service (`Pending` \|
    #     `Available` \| `Deleting` \| `Deleted` \| `Failed`).
    #
    #   * `supported-ip-address-types` - The IP address type (`ipv4` \|
    #     `ipv6`).
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results of the initial request can be seen by
    #   sending another request with the returned `NextToken` value. This
    #   value can be between 5 and 1,000; if `MaxResults` is given a value
    #   larger than 1,000, only 1,000 results are returned.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServiceConfigurationsRequest AWS API Documentation
    #
    class DescribeVpcEndpointServiceConfigurationsRequest < Struct.new(
      :dry_run,
      :service_ids,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] service_configurations
    #   Information about the services.
    #   @return [Array<Types::ServiceConfiguration>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServiceConfigurationsResult AWS API Documentation
    #
    class DescribeVpcEndpointServiceConfigurationsResult < Struct.new(
      :service_configurations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_id
    #   The ID of the service.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `principal` - The ARN of the principal.
    #
    #   * `principal-type` - The principal type (`All` \| `Service` \|
    #     `OrganizationUnit` \| `Account` \| `User` \| `Role`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return for the request in a single
    #   page. The remaining results of the initial request can be seen by
    #   sending another request with the returned `NextToken` value. This
    #   value can be between 5 and 1,000; if `MaxResults` is given a value
    #   larger than 1,000, only 1,000 results are returned.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token to retrieve the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicePermissionsRequest AWS API Documentation
    #
    class DescribeVpcEndpointServicePermissionsRequest < Struct.new(
      :dry_run,
      :service_id,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allowed_principals
    #   Information about the allowed principals.
    #   @return [Array<Types::AllowedPrincipal>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicePermissionsResult AWS API Documentation
    #
    class DescribeVpcEndpointServicePermissionsResult < Struct.new(
      :allowed_principals,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_names
    #   The service names.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `owner` - The ID or alias of the Amazon Web Services account that
    #     owns the service.
    #
    #   * `service-name` - The name of the service.
    #
    #   * `service-region` - The Region of the service.
    #
    #   * `service-type` - The type of service (`Interface` \| `Gateway` \|
    #     `GatewayLoadBalancer`).
    #
    #   * `supported-ip-address-types` - The IP address type (`ipv4` \|
    #     `ipv6`).
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. The request
    #   returns a token that you can specify in a subsequent call to get the
    #   next set of results.
    #
    #   Constraint: If the value is greater than 1,000, we return only 1,000
    #   items.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next set of items to return. (You received this
    #   token from a prior call.)
    #   @return [String]
    #
    # @!attribute [rw] service_regions
    #   The service Regions.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicesRequest AWS API Documentation
    #
    class DescribeVpcEndpointServicesRequest < Struct.new(
      :dry_run,
      :service_names,
      :filters,
      :max_results,
      :next_token,
      :service_regions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] service_names
    #   The supported services.
    #   @return [Array<String>]
    #
    # @!attribute [rw] service_details
    #   Information about the service.
    #   @return [Array<Types::ServiceDetail>]
    #
    # @!attribute [rw] next_token
    #   The token to use when requesting the next set of items. If there are
    #   no additional items to return, the string is empty.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointServicesResult AWS API Documentation
    #
    class DescribeVpcEndpointServicesResult < Struct.new(
      :service_names,
      :service_details,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_endpoint_ids
    #   The IDs of the VPC endpoints.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `ip-address-type` - The IP address type (`ipv4` \| `ipv6`).
    #
    #   * `service-name` - The name of the service.
    #
    #   * `service-region` - The Region of the service.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC in which the endpoint resides.
    #
    #   * `vpc-endpoint-id` - The ID of the endpoint.
    #
    #   * `vpc-endpoint-state` - The state of the endpoint
    #     (`pendingAcceptance` \| `pending` \| `available` \| `deleting` \|
    #     `deleted` \| `rejected` \| `failed`).
    #
    #   * `vpc-endpoint-type` - The type of VPC endpoint (`Interface` \|
    #     `Gateway` \| `GatewayLoadBalancer` \| `Resource` \|
    #     `ServiceNetwork`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. The request
    #   returns a token that you can specify in a subsequent call to get the
    #   next set of results.
    #
    #   Constraint: If the value is greater than 1,000, we return only 1,000
    #   items.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next set of items to return. (You received this
    #   token from a prior call.)
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointsRequest AWS API Documentation
    #
    class DescribeVpcEndpointsRequest < Struct.new(
      :dry_run,
      :vpc_endpoint_ids,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_endpoints
    #   Information about the VPC endpoints.
    #   @return [Array<Types::VpcEndpoint>]
    #
    # @!attribute [rw] next_token
    #   The token to use when requesting the next set of items. If there are
    #   no additional items to return, the string is empty.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcEndpointsResult AWS API Documentation
    #
    class DescribeVpcEndpointsResult < Struct.new(
      :vpc_endpoints,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_peering_connection_ids
    #   The IDs of the VPC peering connections.
    #
    #   Default: Describes all your VPC peering connections.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `accepter-vpc-info.cidr-block` - The IPv4 CIDR block of the
    #     accepter VPC.
    #
    #   * `accepter-vpc-info.owner-id` - The ID of the Amazon Web Services
    #     account that owns the accepter VPC.
    #
    #   * `accepter-vpc-info.vpc-id` - The ID of the accepter VPC.
    #
    #   * `expiration-time` - The expiration date and time for the VPC
    #     peering connection.
    #
    #   * `requester-vpc-info.cidr-block` - The IPv4 CIDR block of the
    #     requester's VPC.
    #
    #   * `requester-vpc-info.owner-id` - The ID of the Amazon Web Services
    #     account that owns the requester VPC.
    #
    #   * `requester-vpc-info.vpc-id` - The ID of the requester VPC.
    #
    #   * `status-code` - The status of the VPC peering connection
    #     (`pending-acceptance` \| `failed` \| `expired` \| `provisioning`
    #     \| `active` \| `deleting` \| `deleted` \| `rejected`).
    #
    #   * `status-message` - A message that provides more information about
    #     the status of the VPC peering connection, if applicable.
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-peering-connection-id` - The ID of the VPC peering
    #     connection.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnectionsRequest AWS API Documentation
    #
    class DescribeVpcPeeringConnectionsRequest < Struct.new(
      :next_token,
      :max_results,
      :dry_run,
      :vpc_peering_connection_ids,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_peering_connections
    #   Information about the VPC peering connections.
    #   @return [Array<Types::VpcPeeringConnection>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcPeeringConnectionsResult AWS API Documentation
    #
    class DescribeVpcPeeringConnectionsResult < Struct.new(
      :vpc_peering_connections,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   The filters.
    #
    #   * `cidr` - The primary IPv4 CIDR block of the VPC. The CIDR block
    #     you specify must exactly match the VPC's CIDR block for
    #     information to be returned for the VPC. Must contain the slash
    #     followed by one or two digits (for example, `/28`).
    #
    #   * `cidr-block-association.cidr-block` - An IPv4 CIDR block
    #     associated with the VPC.
    #
    #   * `cidr-block-association.association-id` - The association ID for
    #     an IPv4 CIDR block associated with the VPC.
    #
    #   * `cidr-block-association.state` - The state of an IPv4 CIDR block
    #     associated with the VPC.
    #
    #   * `dhcp-options-id` - The ID of a set of DHCP options.
    #
    #   * `ipv6-cidr-block-association.ipv6-cidr-block` - An IPv6 CIDR block
    #     associated with the VPC.
    #
    #   * `ipv6-cidr-block-association.ipv6-pool` - The ID of the IPv6
    #     address pool from which the IPv6 CIDR block is allocated.
    #
    #   * `ipv6-cidr-block-association.association-id` - The association ID
    #     for an IPv6 CIDR block associated with the VPC.
    #
    #   * `ipv6-cidr-block-association.state` - The state of an IPv6 CIDR
    #     block associated with the VPC.
    #
    #   * `is-default` - Indicates whether the VPC is the default VPC.
    #
    #   * `owner-id` - The ID of the Amazon Web Services account that owns
    #     the VPC.
    #
    #   * `state` - The state of the VPC (`pending` \| `available`).
    #
    #   * `tag` - The key/value combination of a tag assigned to the
    #     resource. Use the tag key in the filter name and the tag value as
    #     the filter value. For example, to find all resources that have a
    #     tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `vpc-id` - The ID of the VPC.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] vpc_ids
    #   The IDs of the VPCs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcsRequest AWS API Documentation
    #
    class DescribeVpcsRequest < Struct.new(
      :filters,
      :vpc_ids,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] vpcs
    #   Information about the VPCs.
    #   @return [Array<Types::Vpc>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpcsResult AWS API Documentation
    #
    class DescribeVpcsResult < Struct.new(
      :next_token,
      :vpcs)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeVpnConnections.
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `customer-gateway-configuration` - The configuration information
    #     for the customer gateway.
    #
    #   * `customer-gateway-id` - The ID of a customer gateway associated
    #     with the VPN connection.
    #
    #   * `state` - The state of the VPN connection (`pending` \|
    #     `available` \| `deleting` \| `deleted`).
    #
    #   * `option.static-routes-only` - Indicates whether the connection has
    #     static routes only. Used for devices that do not support Border
    #     Gateway Protocol (BGP).
    #
    #   * `route.destination-cidr-block` - The destination CIDR block. This
    #     corresponds to the subnet used in a customer data center.
    #
    #   * `bgp-asn` - The BGP Autonomous System Number (ASN) associated with
    #     a BGP device.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `type` - The type of VPN connection. Currently the only supported
    #     type is `ipsec.1`.
    #
    #   * `vpn-connection-id` - The ID of the VPN connection.
    #
    #   * `vpn-gateway-id` - The ID of a virtual private gateway associated
    #     with the VPN connection.
    #
    #   * `transit-gateway-id` - The ID of a transit gateway associated with
    #     the VPN connection.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] vpn_connection_ids
    #   One or more VPN connection IDs.
    #
    #   Default: Describes your VPN connections.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnectionsRequest AWS API Documentation
    #
    class DescribeVpnConnectionsRequest < Struct.new(
      :filters,
      :vpn_connection_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeVpnConnections.
    #
    # @!attribute [rw] vpn_connections
    #   Information about one or more VPN connections.
    #   @return [Array<Types::VpnConnection>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnConnectionsResult AWS API Documentation
    #
    class DescribeVpnConnectionsResult < Struct.new(
      :vpn_connections)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DescribeVpnGateways.
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `amazon-side-asn` - The Autonomous System Number (ASN) for the
    #     Amazon side of the gateway.
    #
    #   * `attachment.state` - The current state of the attachment between
    #     the gateway and the VPC (`attaching` \| `attached` \| `detaching`
    #     \| `detached`).
    #
    #   * `attachment.vpc-id` - The ID of an attached VPC.
    #
    #   * `availability-zone` - The Availability Zone for the virtual
    #     private gateway (if applicable).
    #
    #   * `state` - The state of the virtual private gateway (`pending` \|
    #     `available` \| `deleting` \| `deleted`).
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #
    #   * `type` - The type of virtual private gateway. Currently the only
    #     supported type is `ipsec.1`.
    #
    #   * `vpn-gateway-id` - The ID of the virtual private gateway.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] vpn_gateway_ids
    #   One or more virtual private gateway IDs.
    #
    #   Default: Describes all your virtual private gateways.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGatewaysRequest AWS API Documentation
    #
    class DescribeVpnGatewaysRequest < Struct.new(
      :filters,
      :vpn_gateway_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of DescribeVpnGateways.
    #
    # @!attribute [rw] vpn_gateways
    #   Information about one or more virtual private gateways.
    #   @return [Array<Types::VpnGateway>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DescribeVpnGatewaysResult AWS API Documentation
    #
    class DescribeVpnGatewaysResult < Struct.new(
      :vpn_gateways)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the destination options for a flow log.
    #
    # @!attribute [rw] file_format
    #   The format for the flow log. The default is `plain-text`.
    #   @return [String]
    #
    # @!attribute [rw] hive_compatible_partitions
    #   Indicates whether to use Hive-compatible prefixes for flow logs
    #   stored in Amazon S3. The default is `false`.
    #   @return [Boolean]
    #
    # @!attribute [rw] per_hour_partition
    #   Indicates whether to partition the flow log per hour. This reduces
    #   the cost and response time for queries. The default is `false`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DestinationOptionsRequest AWS API Documentation
    #
    class DestinationOptionsRequest < Struct.new(
      :file_format,
      :hive_compatible_partitions,
      :per_hour_partition)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the destination options for a flow log.
    #
    # @!attribute [rw] file_format
    #   The format for the flow log.
    #   @return [String]
    #
    # @!attribute [rw] hive_compatible_partitions
    #   Indicates whether to use Hive-compatible prefixes for flow logs
    #   stored in Amazon S3.
    #   @return [Boolean]
    #
    # @!attribute [rw] per_hour_partition
    #   Indicates whether to partition the flow log per hour.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DestinationOptionsResponse AWS API Documentation
    #
    class DestinationOptionsResponse < Struct.new(
      :file_format,
      :hive_compatible_partitions,
      :per_hour_partition)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance to unlink from the VPC.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC to which the instance is linked.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpcRequest AWS API Documentation
    #
    class DetachClassicLinkVpcRequest < Struct.new(
      :dry_run,
      :instance_id,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachClassicLinkVpcResult AWS API Documentation
    #
    class DetachClassicLinkVpcResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] internet_gateway_id
    #   The ID of the internet gateway.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachInternetGatewayRequest AWS API Documentation
    #
    class DetachInternetGatewayRequest < Struct.new(
      :dry_run,
      :internet_gateway_id,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DetachNetworkInterface.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] force
    #   Specifies whether to force a detachment.
    #
    #   <note markdown="1"> * Use the `Force` parameter only as a last resort to detach a
    #     network interface from a failed instance.
    #
    #   * If you use the `Force` parameter to detach a network interface,
    #     you might not be able to attach a different network interface to
    #     the same index on the instance without first stopping and starting
    #     the instance.
    #
    #   * If you force the detachment of a network interface, the [instance
    #     metadata][1] might not get updated. This means that the attributes
    #     associated with the detached network interface might still be
    #     visible. The instance metadata will get updated when you stop and
    #     start the instance.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachNetworkInterfaceRequest AWS API Documentation
    #
    class DetachNetworkInterfaceRequest < Struct.new(
      :dry_run,
      :attachment_id,
      :force)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_trust_provider_id
    #   The ID of the Verified Access trust provider.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVerifiedAccessTrustProviderRequest AWS API Documentation
    #
    class DetachVerifiedAccessTrustProviderRequest < Struct.new(
      :verified_access_instance_id,
      :verified_access_trust_provider_id,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_trust_provider
    #   Details about the Verified Access trust provider.
    #   @return [Types::VerifiedAccessTrustProvider]
    #
    # @!attribute [rw] verified_access_instance
    #   Details about the Verified Access instance.
    #   @return [Types::VerifiedAccessInstance]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVerifiedAccessTrustProviderResult AWS API Documentation
    #
    class DetachVerifiedAccessTrustProviderResult < Struct.new(
      :verified_access_trust_provider,
      :verified_access_instance)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] device
    #   The device name.
    #   @return [String]
    #
    # @!attribute [rw] force
    #   Forces detachment if the previous detachment attempt did not occur
    #   cleanly (for example, logging into an instance, unmounting the
    #   volume, and detaching normally). This option can lead to data loss
    #   or a corrupted file system. Use this option only as a last resort to
    #   detach a volume from a failed instance. The instance won't 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.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance. If you are detaching a Multi-Attach enabled
    #   volume, you must specify an instance ID.
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVolumeRequest AWS API Documentation
    #
    class DetachVolumeRequest < Struct.new(
      :device,
      :force,
      :instance_id,
      :volume_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DetachVpnGateway.
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] vpn_gateway_id
    #   The ID of the virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DetachVpnGatewayRequest AWS API Documentation
    #
    class DetachVpnGatewayRequest < Struct.new(
      :vpc_id,
      :vpn_gateway_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for an Amazon Web Services Verified Access
    # device-identity based trust provider.
    #
    # @!attribute [rw] tenant_id
    #   The ID of the tenant application with the device-identity provider.
    #   @return [String]
    #
    # @!attribute [rw] public_signing_key_url
    #   The URL Amazon Web Services Verified Access will use to verify the
    #   authenticity of the device tokens.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DeviceOptions AWS API Documentation
    #
    class DeviceOptions < Struct.new(
      :tenant_id,
      :public_signing_key_url)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a DHCP configuration option.
    #
    # @!attribute [rw] key
    #   The name of a DHCP option.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The values for the DHCP option.
    #   @return [Array<Types::AttributeValue>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DhcpConfiguration AWS API Documentation
    #
    class DhcpConfiguration < Struct.new(
      :key,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # The set of DHCP options.
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the DHCP options
    #   set.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the DHCP options set.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] dhcp_options_id
    #   The ID of the set of DHCP options.
    #   @return [String]
    #
    # @!attribute [rw] dhcp_configurations
    #   The DHCP options in the set.
    #   @return [Array<Types::DhcpConfiguration>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DhcpOptions AWS API Documentation
    #
    class DhcpOptions < Struct.new(
      :owner_id,
      :tags,
      :dhcp_options_id,
      :dhcp_configurations)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Active Directory.
    #
    # @!attribute [rw] directory_id
    #   The ID of the Active Directory used for authentication.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DirectoryServiceAuthentication AWS API Documentation
    #
    class DirectoryServiceAuthentication < Struct.new(
      :directory_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Active Directory to be used for client authentication.
    #
    # @!attribute [rw] directory_id
    #   The ID of the Active Directory to be used for authentication.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DirectoryServiceAuthenticationRequest AWS API Documentation
    #
    class DirectoryServiceAuthenticationRequest < Struct.new(
      :directory_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_id
    #   The allocation ID of an Elastic IP address.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableAddressTransferRequest AWS API Documentation
    #
    class DisableAddressTransferRequest < Struct.new(
      :allocation_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] address_transfer
    #   An Elastic IP address transfer.
    #   @return [Types::AddressTransfer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableAddressTransferResult AWS API Documentation
    #
    class DisableAddressTransferResult < Struct.new(
      :address_transfer)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableAllowedImagesSettingsRequest AWS API Documentation
    #
    class DisableAllowedImagesSettingsRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allowed_images_settings_state
    #   Returns `disabled` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableAllowedImagesSettingsResult AWS API Documentation
    #
    class DisableAllowedImagesSettingsResult < Struct.new(
      :allowed_images_settings_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] source
    #   The source Region or Availability Zone that the metric subscription
    #   is disabled for. For example, `us-east-1`.
    #   @return [String]
    #
    # @!attribute [rw] destination
    #   The target Region or Availability Zone that the metric subscription
    #   is disabled for. For example, `eu-north-1`.
    #   @return [String]
    #
    # @!attribute [rw] metric
    #   The metric used for the disabled subscription.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic used for the disabled subscription.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableAwsNetworkPerformanceMetricSubscriptionRequest AWS API Documentation
    #
    class DisableAwsNetworkPerformanceMetricSubscriptionRequest < Struct.new(
      :source,
      :destination,
      :metric,
      :statistic,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] output
    #   Indicates whether the unsubscribe action was successful.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableAwsNetworkPerformanceMetricSubscriptionResult AWS API Documentation
    #
    class DisableAwsNetworkPerformanceMetricSubscriptionResult < Struct.new(
      :output)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableEbsEncryptionByDefaultRequest AWS API Documentation
    #
    class DisableEbsEncryptionByDefaultRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ebs_encryption_by_default
    #   The updated status of encryption by default.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableEbsEncryptionByDefaultResult AWS API Documentation
    #
    class DisableEbsEncryptionByDefaultResult < Struct.new(
      :ebs_encryption_by_default)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   Specify the ID of the image for which to disable Windows fast
    #   launch.
    #   @return [String]
    #
    # @!attribute [rw] force
    #   Forces the image settings to turn off Windows fast launch for your
    #   Windows AMI. This parameter overrides any errors that are
    #   encountered while cleaning up resources in your account.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastLaunchRequest AWS API Documentation
    #
    class DisableFastLaunchRequest < Struct.new(
      :image_id,
      :force,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the image for which Windows fast launch was disabled.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The pre-provisioning resource type that must be cleaned after
    #   turning off Windows fast launch for the Windows AMI. Supported
    #   values include: `snapshot`.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_configuration
    #   Parameters that were used for Windows fast launch for the Windows
    #   AMI before Windows fast launch was disabled. This informs the
    #   clean-up process.
    #   @return [Types::FastLaunchSnapshotConfigurationResponse]
    #
    # @!attribute [rw] launch_template
    #   The launch template that was used to launch Windows instances from
    #   pre-provisioned snapshots.
    #   @return [Types::FastLaunchLaunchTemplateSpecificationResponse]
    #
    # @!attribute [rw] max_parallel_launches
    #   The maximum number of instances that Amazon EC2 can launch at the
    #   same time to create pre-provisioned snapshots for Windows fast
    #   launch.
    #   @return [Integer]
    #
    # @!attribute [rw] owner_id
    #   The owner of the Windows AMI for which Windows fast launch was
    #   disabled.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of Windows fast launch for the specified Windows
    #   AMI.
    #   @return [String]
    #
    # @!attribute [rw] state_transition_reason
    #   The reason that the state changed for Windows fast launch for the
    #   Windows AMI.
    #   @return [String]
    #
    # @!attribute [rw] state_transition_time
    #   The time that the state changed for Windows fast launch for the
    #   Windows AMI.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastLaunchResult AWS API Documentation
    #
    class DisableFastLaunchResult < Struct.new(
      :image_id,
      :resource_type,
      :snapshot_configuration,
      :launch_template,
      :max_parallel_launches,
      :owner_id,
      :state,
      :state_transition_reason,
      :state_transition_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains information about the errors that occurred when disabling
    # fast snapshot restores.
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] fast_snapshot_restore_state_errors
    #   The errors.
    #   @return [Array<Types::DisableFastSnapshotRestoreStateErrorItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestoreErrorItem AWS API Documentation
    #
    class DisableFastSnapshotRestoreErrorItem < Struct.new(
      :snapshot_id,
      :fast_snapshot_restore_state_errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an error that occurred when disabling fast snapshot
    # restores.
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The error message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestoreStateError AWS API Documentation
    #
    class DisableFastSnapshotRestoreStateError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains information about an error that occurred when disabling fast
    # snapshot restores.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] error
    #   The error.
    #   @return [Types::DisableFastSnapshotRestoreStateError]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestoreStateErrorItem AWS API Documentation
    #
    class DisableFastSnapshotRestoreStateErrorItem < Struct.new(
      :availability_zone,
      :error)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes fast snapshot restores that were successfully disabled.
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of fast snapshot restores for the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] state_transition_reason
    #   The reason for the state transition. The possible values are as
    #   follows:
    #
    #   * `Client.UserInitiated` - The state successfully transitioned to
    #     `enabling` or `disabling`.
    #
    #   * `Client.UserInitiated - Lifecycle state transition` - The state
    #     successfully transitioned to `optimizing`, `enabled`, or
    #     `disabled`.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that enabled fast snapshot
    #   restores on the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] owner_alias
    #   The Amazon Web Services owner alias that enabled fast snapshot
    #   restores on the snapshot. This is intended for future use.
    #   @return [String]
    #
    # @!attribute [rw] enabling_time
    #   The time at which fast snapshot restores entered the `enabling`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] optimizing_time
    #   The time at which fast snapshot restores entered the `optimizing`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] enabled_time
    #   The time at which fast snapshot restores entered the `enabled`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] disabling_time
    #   The time at which fast snapshot restores entered the `disabling`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] disabled_time
    #   The time at which fast snapshot restores entered the `disabled`
    #   state.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestoreSuccessItem AWS API Documentation
    #
    class DisableFastSnapshotRestoreSuccessItem < Struct.new(
      :snapshot_id,
      :availability_zone,
      :state,
      :state_transition_reason,
      :owner_id,
      :owner_alias,
      :enabling_time,
      :optimizing_time,
      :enabled_time,
      :disabling_time,
      :disabled_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] availability_zones
    #   One or more Availability Zones. For example, `us-east-2a`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] source_snapshot_ids
    #   The IDs of one or more snapshots. For example,
    #   `snap-1234567890abcdef0`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestoresRequest AWS API Documentation
    #
    class DisableFastSnapshotRestoresRequest < Struct.new(
      :availability_zones,
      :source_snapshot_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successful
    #   Information about the snapshots for which fast snapshot restores
    #   were successfully disabled.
    #   @return [Array<Types::DisableFastSnapshotRestoreSuccessItem>]
    #
    # @!attribute [rw] unsuccessful
    #   Information about the snapshots for which fast snapshot restores
    #   could not be disabled.
    #   @return [Array<Types::DisableFastSnapshotRestoreErrorItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableFastSnapshotRestoresResult AWS API Documentation
    #
    class DisableFastSnapshotRestoresResult < Struct.new(
      :successful,
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableImageBlockPublicAccessRequest AWS API Documentation
    #
    class DisableImageBlockPublicAccessRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_block_public_access_state
    #   Returns `unblocked` if the request succeeds; otherwise, it returns
    #   an error.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableImageBlockPublicAccessResult AWS API Documentation
    #
    class DisableImageBlockPublicAccessResult < Struct.new(
      :image_block_public_access_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableImageDeprecationRequest AWS API Documentation
    #
    class DisableImageDeprecationRequest < Struct.new(
      :image_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableImageDeprecationResult AWS API Documentation
    #
    class DisableImageDeprecationResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableImageDeregistrationProtectionRequest AWS API Documentation
    #
    class DisableImageDeregistrationProtectionRequest < Struct.new(
      :image_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableImageDeregistrationProtectionResult AWS API Documentation
    #
    class DisableImageDeregistrationProtectionResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableImageRequest AWS API Documentation
    #
    class DisableImageRequest < Struct.new(
      :image_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableImageResult AWS API Documentation
    #
    class DisableImageResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] delegated_admin_account_id
    #   The Organizations member account ID that you want to disable as IPAM
    #   account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableIpamOrganizationAdminAccountRequest AWS API Documentation
    #
    class DisableIpamOrganizationAdminAccountRequest < Struct.new(
      :dry_run,
      :delegated_admin_account_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] success
    #   The result of disabling the IPAM account.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableIpamOrganizationAdminAccountResult AWS API Documentation
    #
    class DisableIpamOrganizationAdminAccountResult < Struct.new(
      :success)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The ID of the route server for which to disable propagation.
    #   @return [String]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table for which to disable route server
    #   propagation.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableRouteServerPropagationRequest AWS API Documentation
    #
    class DisableRouteServerPropagationRequest < Struct.new(
      :route_server_id,
      :route_table_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_propagation
    #   Information about the disabled route server propagation.
    #   @return [Types::RouteServerPropagation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableRouteServerPropagationResult AWS API Documentation
    #
    class DisableRouteServerPropagationResult < Struct.new(
      :route_server_propagation)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableSerialConsoleAccessRequest AWS API Documentation
    #
    class DisableSerialConsoleAccessRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] serial_console_access_enabled
    #   If `true`, access to the EC2 serial console of all instances is
    #   enabled for your account. If `false`, access to the EC2 serial
    #   console of all instances is disabled for your account.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableSerialConsoleAccessResult AWS API Documentation
    #
    class DisableSerialConsoleAccessResult < Struct.new(
      :serial_console_access_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableSnapshotBlockPublicAccessRequest AWS API Documentation
    #
    class DisableSnapshotBlockPublicAccessRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] state
    #   Returns `unblocked` if the request succeeds.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableSnapshotBlockPublicAccessResult AWS API Documentation
    #
    class DisableSnapshotBlockPublicAccessResult < Struct.new(
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the propagation route table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] transit_gateway_route_table_announcement_id
    #   The ID of the route table announcement.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableTransitGatewayRouteTablePropagationRequest AWS API Documentation
    #
    class DisableTransitGatewayRouteTablePropagationRequest < Struct.new(
      :transit_gateway_route_table_id,
      :transit_gateway_attachment_id,
      :dry_run,
      :transit_gateway_route_table_announcement_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] propagation
    #   Information about route propagation.
    #   @return [Types::TransitGatewayPropagation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableTransitGatewayRouteTablePropagationResult AWS API Documentation
    #
    class DisableTransitGatewayRouteTablePropagationResult < Struct.new(
      :propagation)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for DisableVgwRoutePropagation.
    #
    # @!attribute [rw] gateway_id
    #   The ID of the virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVgwRoutePropagationRequest AWS API Documentation
    #
    class DisableVgwRoutePropagationRequest < Struct.new(
      :gateway_id,
      :route_table_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupportRequest AWS API Documentation
    #
    class DisableVpcClassicLinkDnsSupportRequest < Struct.new(
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkDnsSupportResult AWS API Documentation
    #
    class DisableVpcClassicLinkDnsSupportResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkRequest AWS API Documentation
    #
    class DisableVpcClassicLinkRequest < Struct.new(
      :dry_run,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisableVpcClassicLinkResult AWS API Documentation
    #
    class DisableVpcClassicLinkResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_id
    #   The association ID. This parameter is required.
    #   @return [String]
    #
    # @!attribute [rw] public_ip
    #   Deprecated.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateAddressRequest AWS API Documentation
    #
    class DisassociateAddressRequest < Struct.new(
      :association_id,
      :public_ip,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] unused_reservation_billing_owner_id
    #   The ID of the consumer account to which the request was sent.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateCapacityReservationBillingOwnerRequest AWS API Documentation
    #
    class DisassociateCapacityReservationBillingOwnerRequest < Struct.new(
      :dry_run,
      :capacity_reservation_id,
      :unused_reservation_billing_owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateCapacityReservationBillingOwnerResult AWS API Documentation
    #
    class DisassociateCapacityReservationBillingOwnerResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint from which to disassociate the
    #   target network.
    #   @return [String]
    #
    # @!attribute [rw] association_id
    #   The ID of the target network association.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateClientVpnTargetNetworkRequest AWS API Documentation
    #
    class DisassociateClientVpnTargetNetworkRequest < Struct.new(
      :client_vpn_endpoint_id,
      :association_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_id
    #   The ID of the target network association.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The current state of the target network association.
    #   @return [Types::AssociationStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateClientVpnTargetNetworkResult AWS API Documentation
    #
    class DisassociateClientVpnTargetNetworkResult < Struct.new(
      :association_id,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] certificate_arn
    #   The ARN of the ACM certificate from which to disassociate the IAM
    #   role.
    #   @return [String]
    #
    # @!attribute [rw] role_arn
    #   The ARN of the IAM role to disassociate.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateEnclaveCertificateIamRoleRequest AWS API Documentation
    #
    class DisassociateEnclaveCertificateIamRoleRequest < Struct.new(
      :certificate_arn,
      :role_arn,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateEnclaveCertificateIamRoleResult AWS API Documentation
    #
    class DisassociateEnclaveCertificateIamRoleResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_id
    #   The ID of the IAM instance profile association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfileRequest AWS API Documentation
    #
    class DisassociateIamInstanceProfileRequest < Struct.new(
      :association_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] iam_instance_profile_association
    #   Information about the IAM instance profile association.
    #   @return [Types::IamInstanceProfileAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIamInstanceProfileResult AWS API Documentation
    #
    class DisassociateIamInstanceProfileResult < Struct.new(
      :iam_instance_profile_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_event_window_id
    #   The ID of the event window.
    #   @return [String]
    #
    # @!attribute [rw] association_target
    #   One or more targets to disassociate from the specified event window.
    #   @return [Types::InstanceEventWindowDisassociationRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateInstanceEventWindowRequest AWS API Documentation
    #
    class DisassociateInstanceEventWindowRequest < Struct.new(
      :dry_run,
      :instance_event_window_id,
      :association_target)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_event_window
    #   Information about the event window.
    #   @return [Types::InstanceEventWindow]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateInstanceEventWindowResult AWS API Documentation
    #
    class DisassociateInstanceEventWindowResult < Struct.new(
      :instance_event_window)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] asn
    #   A public 2-byte or 4-byte ASN.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   A BYOIP CIDR.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIpamByoasnRequest AWS API Documentation
    #
    class DisassociateIpamByoasnRequest < Struct.new(
      :dry_run,
      :asn,
      :cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] asn_association
    #   An ASN and BYOIP CIDR association.
    #   @return [Types::AsnAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIpamByoasnResult AWS API Documentation
    #
    class DisassociateIpamByoasnResult < Struct.new(
      :asn_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_resource_discovery_association_id
    #   A resource discovery association ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIpamResourceDiscoveryRequest AWS API Documentation
    #
    class DisassociateIpamResourceDiscoveryRequest < Struct.new(
      :dry_run,
      :ipam_resource_discovery_association_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_resource_discovery_association
    #   A resource discovery association.
    #   @return [Types::IpamResourceDiscoveryAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateIpamResourceDiscoveryResult AWS API Documentation
    #
    class DisassociateIpamResourceDiscoveryResult < Struct.new(
      :ipam_resource_discovery_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] association_ids
    #   The association IDs of EIPs that have been associated with the NAT
    #   gateway.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_drain_duration_seconds
    #   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.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateNatGatewayAddressRequest AWS API Documentation
    #
    class DisassociateNatGatewayAddressRequest < Struct.new(
      :nat_gateway_id,
      :association_ids,
      :max_drain_duration_seconds,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway_addresses
    #   Information about the NAT gateway IP addresses.
    #   @return [Array<Types::NatGatewayAddress>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateNatGatewayAddressResult AWS API Documentation
    #
    class DisassociateNatGatewayAddressResult < Struct.new(
      :nat_gateway_id,
      :nat_gateway_addresses)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The ID of the route server to disassociate.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC to disassociate from the route server.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteServerRequest AWS API Documentation
    #
    class DisassociateRouteServerRequest < Struct.new(
      :route_server_id,
      :vpc_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_association
    #   Information about the disassociated route server.
    #   @return [Types::RouteServerAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteServerResult AWS API Documentation
    #
    class DisassociateRouteServerResult < Struct.new(
      :route_server_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] association_id
    #   The association ID representing the current association between the
    #   route table and subnet or gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateRouteTableRequest AWS API Documentation
    #
    class DisassociateRouteTableRequest < Struct.new(
      :dry_run,
      :association_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] group_id
    #   A security group ID.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   A VPC ID.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSecurityGroupVpcRequest AWS API Documentation
    #
    class DisassociateSecurityGroupVpcRequest < Struct.new(
      :group_id,
      :vpc_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] state
    #   The state of the disassociation.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSecurityGroupVpcResult AWS API Documentation
    #
    class DisassociateSecurityGroupVpcResult < Struct.new(
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_id
    #   The association ID for the CIDR block.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlockRequest AWS API Documentation
    #
    class DisassociateSubnetCidrBlockRequest < Struct.new(
      :association_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipv_6_cidr_block_association
    #   Information about the IPv6 CIDR block association.
    #   @return [Types::SubnetIpv6CidrBlockAssociation]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateSubnetCidrBlockResult AWS API Documentation
    #
    class DisassociateSubnetCidrBlockResult < Struct.new(
      :ipv_6_cidr_block_association,
      :subnet_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets;
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayMulticastDomainRequest AWS API Documentation
    #
    class DisassociateTransitGatewayMulticastDomainRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :transit_gateway_attachment_id,
      :subnet_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] associations
    #   Information about the association.
    #   @return [Types::TransitGatewayMulticastDomainAssociations]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayMulticastDomainResult AWS API Documentation
    #
    class DisassociateTransitGatewayMulticastDomainResult < Struct.new(
      :associations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_table_id
    #   The ID of the disassociated policy table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment to disassociate from the
    #   policy table.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayPolicyTableRequest AWS API Documentation
    #
    class DisassociateTransitGatewayPolicyTableRequest < Struct.new(
      :transit_gateway_policy_table_id,
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association
    #   Returns details about the transit gateway policy table
    #   disassociation.
    #   @return [Types::TransitGatewayPolicyTableAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayPolicyTableResult AWS API Documentation
    #
    class DisassociateTransitGatewayPolicyTableResult < Struct.new(
      :association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayRouteTableRequest AWS API Documentation
    #
    class DisassociateTransitGatewayRouteTableRequest < Struct.new(
      :transit_gateway_route_table_id,
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association
    #   Information about the association.
    #   @return [Types::TransitGatewayAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTransitGatewayRouteTableResult AWS API Documentation
    #
    class DisassociateTransitGatewayRouteTableResult < Struct.new(
      :association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_id
    #   The ID of the association
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTrunkInterfaceRequest AWS API Documentation
    #
    class DisassociateTrunkInterfaceRequest < Struct.new(
      :association_id,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateTrunkInterfaceResult AWS API Documentation
    #
    class DisassociateTrunkInterfaceResult < Struct.new(
      :return,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] association_id
    #   The association ID for the CIDR block.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlockRequest AWS API Documentation
    #
    class DisassociateVpcCidrBlockRequest < Struct.new(
      :association_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipv_6_cidr_block_association
    #   Information about the IPv6 CIDR block association.
    #   @return [Types::VpcIpv6CidrBlockAssociation]
    #
    # @!attribute [rw] cidr_block_association
    #   Information about the IPv4 CIDR block association.
    #   @return [Types::VpcCidrBlockAssociation]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DisassociateVpcCidrBlockResult AWS API Documentation
    #
    class DisassociateVpcCidrBlockResult < Struct.new(
      :ipv_6_cidr_block_association,
      :cidr_block_association,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a disk image.
    #
    # @!attribute [rw] description
    #   A description of the disk image.
    #   @return [String]
    #
    # @!attribute [rw] image
    #   Information about the disk image.
    #   @return [Types::DiskImageDetail]
    #
    # @!attribute [rw] volume
    #   Information about the volume.
    #   @return [Types::VolumeDetail]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DiskImage AWS API Documentation
    #
    class DiskImage < Struct.new(
      :description,
      :image,
      :volume)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a disk image.
    #
    # @!attribute [rw] checksum
    #   The checksum computed for the disk image.
    #   @return [String]
    #
    # @!attribute [rw] format
    #   The disk image format.
    #   @return [String]
    #
    # @!attribute [rw] import_manifest_url
    #   A presigned URL for the import manifest stored in Amazon S3. For
    #   information about creating a presigned URL for an Amazon S3 object,
    #   read the "Query String Request Authentication Alternative" section
    #   of the [Authenticating REST Requests][1] topic in the *Amazon Simple
    #   Storage Service Developer Guide*.
    #
    #   For information about the import manifest referenced by this API
    #   action, see [VM Import Manifest][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html
    #   @return [String]
    #
    # @!attribute [rw] size
    #   The size of the disk image, in GiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DiskImageDescription AWS API Documentation
    #
    class DiskImageDescription < Struct.new(
      :checksum,
      :format,
      :import_manifest_url,
      :size)
      SENSITIVE = [:import_manifest_url]
      include Aws::Structure
    end

    # Describes a disk image.
    #
    # @!attribute [rw] format
    #   The disk image format.
    #   @return [String]
    #
    # @!attribute [rw] bytes
    #   The size of the disk image, in GiB.
    #   @return [Integer]
    #
    # @!attribute [rw] import_manifest_url
    #   A presigned URL for the import manifest stored in Amazon S3 and
    #   presented here as an Amazon S3 presigned URL. For information about
    #   creating a presigned URL for an Amazon S3 object, read the "Query
    #   String Request Authentication Alternative" section of the
    #   [Authenticating REST Requests][1] topic in the *Amazon Simple
    #   Storage Service Developer Guide*.
    #
    #   For information about the import manifest referenced by this API
    #   action, see [VM Import Manifest][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DiskImageDetail AWS API Documentation
    #
    class DiskImageDetail < Struct.new(
      :format,
      :bytes,
      :import_manifest_url)
      SENSITIVE = [:import_manifest_url]
      include Aws::Structure
    end

    # Describes a disk image volume.
    #
    # @!attribute [rw] id
    #   The volume identifier.
    #   @return [String]
    #
    # @!attribute [rw] size
    #   The size of the volume, in GiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DiskImageVolumeDescription AWS API Documentation
    #
    class DiskImageVolumeDescription < Struct.new(
      :id,
      :size)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a disk.
    #
    # @!attribute [rw] size_in_gb
    #   The size of the disk in GB.
    #   @return [Integer]
    #
    # @!attribute [rw] count
    #   The number of disks with this configuration.
    #   @return [Integer]
    #
    # @!attribute [rw] type
    #   The type of disk.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DiskInfo AWS API Documentation
    #
    class DiskInfo < Struct.new(
      :size_in_gb,
      :count,
      :type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a DNS entry.
    #
    # @!attribute [rw] dns_name
    #   The DNS name.
    #   @return [String]
    #
    # @!attribute [rw] hosted_zone_id
    #   The ID of the private hosted zone.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DnsEntry AWS API Documentation
    #
    class DnsEntry < Struct.new(
      :dns_name,
      :hosted_zone_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the DNS options for an endpoint.
    #
    # @!attribute [rw] dns_record_ip_type
    #   The DNS records created for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] private_dns_only_for_inbound_resolver_endpoint
    #   Indicates whether to enable private DNS only for inbound endpoints.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DnsOptions AWS API Documentation
    #
    class DnsOptions < Struct.new(
      :dns_record_ip_type,
      :private_dns_only_for_inbound_resolver_endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the DNS options for an endpoint.
    #
    # @!attribute [rw] dns_record_ip_type
    #   The DNS records created for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] private_dns_only_for_inbound_resolver_endpoint
    #   Indicates whether to enable private DNS only for inbound endpoints.
    #   This option is available only for services that support both gateway
    #   and interface endpoints. It routes traffic that originates from the
    #   VPC to the gateway endpoint and traffic that originates from
    #   on-premises to the interface endpoint.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DnsOptionsSpecification AWS API Documentation
    #
    class DnsOptionsSpecification < Struct.new(
      :dns_record_ip_type,
      :private_dns_only_for_inbound_resolver_endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the DNS server to be used.
    #
    # @!attribute [rw] custom_dns_servers
    #   The IPv4 address range, in CIDR notation, of the DNS servers to be
    #   used. You can specify up to two DNS servers. Ensure that the DNS
    #   servers can be reached by the clients. The specified values
    #   overwrite the existing values.
    #   @return [Array<String>]
    #
    # @!attribute [rw] enabled
    #   Indicates whether DNS servers should be used. Specify `False` to
    #   delete the existing DNS servers.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/DnsServersOptionsModifyStructure AWS API Documentation
    #
    class DnsServersOptionsModifyStructure < Struct.new(
      :custom_dns_servers,
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device for an EBS volume.
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the EBS volume is deleted on instance termination.
    #   For more information, see [Preserving Amazon EBS volumes on instance
    #   termination][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#preserving-volumes-on-termination
    #   @return [Boolean]
    #
    # @!attribute [rw] iops
    #   The number of I/O operations per second (IOPS). For `gp3`, `io1`,
    #   and `io2` volumes, this represents the number of IOPS that are
    #   provisioned for the volume. For `gp2` volumes, this represents the
    #   baseline performance of the volume and the rate at which the volume
    #   accumulates I/O credits for bursting.
    #
    #   The following are the supported values for each volume type:
    #
    #   * `gp3`: 3,000 - 80,000 IOPS
    #
    #   * `io1`: 100 - 64,000 IOPS
    #
    #   * `io2`: 100 - 256,000 IOPS
    #
    #   For `io2` volumes, you can achieve up to 256,000 IOPS on [instances
    #   built on the Nitro System][1]. On other instances, you can achieve
    #   performance up to 32,000 IOPS.
    #
    #   This parameter is required for `io1` and `io2` volumes. The default
    #   for `gp3` volumes is 3,000 IOPS.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances
    #   @return [Integer]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   The size of the volume, in GiBs. You must specify either a snapshot
    #   ID or a volume size. If you specify a snapshot, the default is the
    #   snapshot size. You can specify a volume size that is equal to or
    #   larger than the snapshot size.
    #
    #   The following are the supported sizes for each volume type:
    #
    #   * `gp2`: 1 - 16,384 GiB
    #
    #   * `gp3`: 1 - 65,536 GiB
    #
    #   * `io1`: 4 - 16,384 GiB
    #
    #   * `io2`: 4 - 65,536 GiB
    #
    #   * `st1` and `sc1`: 125 - 16,384 GiB
    #
    #   * `standard`: 1 - 1024 GiB
    #   @return [Integer]
    #
    # @!attribute [rw] volume_type
    #   The volume type. For more information, see [Amazon EBS volume
    #   types][1] in the *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html
    #   @return [String]
    #
    # @!attribute [rw] kms_key_id
    #   Identifier (key ID, key alias, key ARN, or alias ARN) of the
    #   customer managed KMS key to use for EBS encryption.
    #
    #   This parameter is only supported on `BlockDeviceMapping` objects
    #   called by [RunInstances][1], [RequestSpotFleet][2], and
    #   [RequestSpotInstances][3].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html
    #   @return [String]
    #
    # @!attribute [rw] throughput
    #   The throughput that the volume supports, in MiB/s.
    #
    #   This parameter is valid only for `gp3` volumes.
    #
    #   Valid Range: Minimum value of 125. Maximum value of 2,000.
    #   @return [Integer]
    #
    # @!attribute [rw] outpost_arn
    #   The ARN of the Outpost on which the snapshot is stored.
    #
    #   This parameter is not supported when using [CreateImage][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone where the EBS volume will be created (for
    #   example, `us-east-1a`).
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both. If neither is specified, Amazon EC2 automatically
    #   selects an Availability Zone within the Region.
    #
    #   This parameter is not supported when using [CreateFleet][1],
    #   [CreateImage][2], [DescribeImages][3], [RequestSpotFleet][4],
    #   [RequestSpotInstances][5], and [RunInstances][6].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html
    #   [4]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html
    #   [5]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html
    #   [6]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [String]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the encryption state of an EBS volume is changed
    #   while being restored from a backing snapshot. The effect of setting
    #   the encryption state to `true` depends on the volume origin (new or
    #   from a snapshot), starting encryption state, ownership, and whether
    #   encryption by default is enabled. For more information, see [Amazon
    #   EBS encryption][1] in the *Amazon EBS User Guide*.
    #
    #   In no case can you remove encryption from an encrypted volume.
    #
    #   Encrypted volumes can only be attached to instances that support
    #   Amazon EBS encryption. For more information, see [Supported instance
    #   types][2].
    #
    #   This parameter is not returned by DescribeImageAttribute.
    #
    #   For CreateImage and RegisterImage, whether you can include this
    #   parameter, and the allowed values differ depending on the type of
    #   block device mapping you are creating.
    #
    #   * If you are creating a block device mapping for a **new (empty)
    #     volume**, you can include this parameter, and specify either
    #     `true` for an encrypted volume, or `false` for an unencrypted
    #     volume. If you omit this parameter, it defaults to `false`
    #     (unencrypted).
    #
    #   * If you are creating a block device mapping from an **existing
    #     encrypted or unencrypted snapshot**, you must omit this parameter.
    #     If you include this parameter, the request will fail, regardless
    #     of the value that you specify.
    #
    #   * If you are creating a block device mapping from an **existing
    #     unencrypted volume**, you can include this parameter, but you must
    #     specify `false`. If you specify `true`, the request will fail. In
    #     this case, we recommend that you omit the parameter.
    #
    #   * If you are creating a block device mapping from an **existing
    #     encrypted volume**, you can include this parameter, and specify
    #     either `true` or `false`. However, if you specify `false`, the
    #     parameter is ignored and the block device mapping is always
    #     encrypted. In this case, we recommend that you omit the parameter.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html#encryption-parameters
    #   [2]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption-requirements.html#ebs-encryption_supported_instances
    #   @return [Boolean]
    #
    # @!attribute [rw] volume_initialization_rate
    #   Specifies the Amazon EBS Provisioned Rate for Volume Initialization
    #   (volume initialization rate), in MiB/s, at which to download the
    #   snapshot blocks from Amazon S3 to the volume. This is also known as
    #   *volume initialization*. Specifying a volume initialization rate
    #   ensures that the volume is initialized at a predictable and
    #   consistent rate after creation.
    #
    #   This parameter is supported only for volumes created from snapshots.
    #   Omit this parameter if:
    #
    #   * You want to create the volume using fast snapshot restore. You
    #     must specify a snapshot that is enabled for fast snapshot restore.
    #     In this case, the volume is fully initialized at creation.
    #
    #     <note markdown="1"> If you specify a snapshot that is enabled for fast snapshot
    #     restore and a volume initialization rate, the volume will be
    #     initialized at the specified rate instead of fast snapshot
    #     restore.
    #
    #      </note>
    #
    #   * You want to create a volume that is initialized at the default
    #     rate.
    #
    #   For more information, see [ Initialize Amazon EBS volumes][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #   This parameter is not supported when using [CreateImage][2].
    #
    #   Valid range: 100 - 300 MiB/s
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html
    #   @return [Integer]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone where the EBS volume will be created
    #   (for example, `use1-az1`).
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both. If neither is specified, Amazon EC2 automatically
    #   selects an Availability Zone within the Region.
    #
    #   This parameter is not supported when using [CreateFleet][1],
    #   [CreateImage][2], [DescribeImages][3], [RequestSpotFleet][4],
    #   [RequestSpotInstances][5], and [RunInstances][6].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html
    #   [4]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html
    #   [5]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html
    #   [6]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsBlockDevice AWS API Documentation
    #
    class EbsBlockDevice < Struct.new(
      :delete_on_termination,
      :iops,
      :snapshot_id,
      :volume_size,
      :volume_type,
      :kms_key_id,
      :throughput,
      :outpost_arn,
      :availability_zone,
      :encrypted,
      :volume_initialization_rate,
      :availability_zone_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device for an EBS volume.
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the volume is encrypted.
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the volume is deleted on instance termination.
    #   @return [Boolean]
    #
    # @!attribute [rw] iops
    #   The number of I/O operations per second (IOPS). For `gp3`, `io1`,
    #   and `io2` volumes, this represents the number of IOPS that are
    #   provisioned for the volume. For `gp2` volumes, this represents the
    #   baseline performance of the volume and the rate at which the volume
    #   accumulates I/O credits for bursting.
    #   @return [Integer]
    #
    # @!attribute [rw] throughput
    #   The throughput that the volume supports, in MiB/s.
    #   @return [Integer]
    #
    # @!attribute [rw] kms_key_id
    #   Identifier (key ID, key alias, key ARN, or alias ARN) of the
    #   customer managed KMS key to use for EBS encryption.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   The size of the volume, in GiBs.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_type
    #   The volume type. For more information, see [Amazon EBS volume
    #   types][1] in the *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsBlockDeviceResponse AWS API Documentation
    #
    class EbsBlockDeviceResponse < Struct.new(
      :encrypted,
      :delete_on_termination,
      :iops,
      :throughput,
      :kms_key_id,
      :snapshot_id,
      :volume_size,
      :volume_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Amazon EBS features supported by the instance type.
    #
    # @!attribute [rw] ebs_optimized_support
    #   Indicates whether the instance type is Amazon EBS-optimized. For
    #   more information, see [Amazon EBS-optimized instances][1] in *Amazon
    #   EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html
    #   @return [String]
    #
    # @!attribute [rw] encryption_support
    #   Indicates whether Amazon EBS encryption is supported.
    #   @return [String]
    #
    # @!attribute [rw] ebs_optimized_info
    #   Describes the optimized EBS performance for the instance type.
    #   @return [Types::EbsOptimizedInfo]
    #
    # @!attribute [rw] nvme_support
    #   Indicates whether non-volatile memory express (NVMe) is supported.
    #   @return [String]
    #
    # @!attribute [rw] maximum_ebs_attachments
    #   Indicates the maximum number of Amazon EBS volumes that can be
    #   attached to the instance type. For more information, see [Amazon EBS
    #   volume limits for Amazon EC2 instances][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html
    #   @return [Integer]
    #
    # @!attribute [rw] attachment_limit_type
    #   Indicates whether the instance type features a shared or dedicated
    #   Amazon EBS volume attachment limit. For more information, see
    #   [Amazon EBS volume limits for Amazon EC2 instances][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsInfo AWS API Documentation
    #
    class EbsInfo < Struct.new(
      :ebs_optimized_support,
      :encryption_support,
      :ebs_optimized_info,
      :nvme_support,
      :maximum_ebs_attachments,
      :attachment_limit_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a parameter used to set up an EBS volume in a block device
    # mapping.
    #
    # @!attribute [rw] attach_time
    #   The time stamp when the attachment initiated.
    #   @return [Time]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the volume is deleted on instance termination.
    #   @return [Boolean]
    #
    # @!attribute [rw] status
    #   The attachment state.
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the EBS volume.
    #   @return [String]
    #
    # @!attribute [rw] associated_resource
    #   The ARN of the Amazon Web Services-managed resource to which the
    #   volume is attached.
    #   @return [String]
    #
    # @!attribute [rw] volume_owner_id
    #   The ID of the Amazon Web Services account that owns the volume.
    #
    #   This parameter is returned only for volumes that are attached to
    #   Amazon Web Services-managed resources.
    #   @return [String]
    #
    # @!attribute [rw] operator
    #   The service provider that manages the EBS volume.
    #   @return [Types::OperatorResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsInstanceBlockDevice AWS API Documentation
    #
    class EbsInstanceBlockDevice < Struct.new(
      :attach_time,
      :delete_on_termination,
      :status,
      :volume_id,
      :associated_resource,
      :volume_owner_id,
      :operator)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes information used to set up an EBS volume specified in a
    # block device mapping.
    #
    # @!attribute [rw] volume_id
    #   The ID of the EBS volume.
    #   @return [String]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the volume is deleted on instance termination.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsInstanceBlockDeviceSpecification AWS API Documentation
    #
    class EbsInstanceBlockDeviceSpecification < Struct.new(
      :volume_id,
      :delete_on_termination)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the optimized EBS performance for supported instance types.
    #
    # @!attribute [rw] baseline_bandwidth_in_mbps
    #   The baseline bandwidth performance for an EBS-optimized instance
    #   type, in Mbps.
    #   @return [Integer]
    #
    # @!attribute [rw] baseline_throughput_in_m_bps
    #   The baseline throughput performance for an EBS-optimized instance
    #   type, in MB/s.
    #   @return [Float]
    #
    # @!attribute [rw] baseline_iops
    #   The baseline input/output storage operations per seconds for an
    #   EBS-optimized instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] maximum_bandwidth_in_mbps
    #   The maximum bandwidth performance for an EBS-optimized instance
    #   type, in Mbps.
    #   @return [Integer]
    #
    # @!attribute [rw] maximum_throughput_in_m_bps
    #   The maximum throughput performance for an EBS-optimized instance
    #   type, in MB/s.
    #   @return [Float]
    #
    # @!attribute [rw] maximum_iops
    #   The maximum input/output storage operations per second for an
    #   EBS-optimized instance type.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsOptimizedInfo AWS API Documentation
    #
    class EbsOptimizedInfo < Struct.new(
      :baseline_bandwidth_in_mbps,
      :baseline_throughput_in_m_bps,
      :baseline_iops,
      :maximum_bandwidth_in_mbps,
      :maximum_throughput_in_m_bps,
      :maximum_iops)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the attached EBS status check for an instance.
    #
    # @!attribute [rw] impaired_since
    #   The date and time when the attached EBS status check failed.
    #   @return [Time]
    #
    # @!attribute [rw] name
    #   The name of the attached EBS status check.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The result of the attached EBS status check.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsStatusDetails AWS API Documentation
    #
    class EbsStatusDetails < Struct.new(
      :impaired_since,
      :name,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Provides a summary of the attached EBS volume status for an instance.
    #
    # @!attribute [rw] details
    #   Details about the attached EBS status check for an instance.
    #   @return [Array<Types::EbsStatusDetails>]
    #
    # @!attribute [rw] status
    #   The current status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EbsStatusSummary AWS API Documentation
    #
    class EbsStatusSummary < Struct.new(
      :details,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # The EC2 Instance Connect Endpoint.
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that created the EC2
    #   Instance Connect Endpoint.
    #   @return [String]
    #
    # @!attribute [rw] instance_connect_endpoint_id
    #   The ID of the EC2 Instance Connect Endpoint.
    #   @return [String]
    #
    # @!attribute [rw] instance_connect_endpoint_arn
    #   The Amazon Resource Name (ARN) of the EC2 Instance Connect Endpoint.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the EC2 Instance Connect Endpoint.
    #   @return [String]
    #
    # @!attribute [rw] state_message
    #   The message for the current state of the EC2 Instance Connect
    #   Endpoint. Can include a failure message.
    #   @return [String]
    #
    # @!attribute [rw] dns_name
    #   The DNS name of the EC2 Instance Connect Endpoint.
    #   @return [String]
    #
    # @!attribute [rw] fips_dns_name
    #   The Federal Information Processing Standards (FIPS) compliant DNS
    #   name of the EC2 Instance Connect Endpoint.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_ids
    #   The ID of the elastic network interface that Amazon EC2
    #   automatically created when creating the EC2 Instance Connect
    #   Endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC in which the EC2 Instance Connect Endpoint was
    #   created.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the EC2 Instance Connect Endpoint.
    #   @return [String]
    #
    # @!attribute [rw] created_at
    #   The date and time that the EC2 Instance Connect Endpoint was
    #   created.
    #   @return [Time]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which the EC2 Instance Connect Endpoint was
    #   created.
    #   @return [String]
    #
    # @!attribute [rw] preserve_client_ip
    #   Indicates whether your client's IP address is preserved as the
    #   source. The value is `true` or `false`.
    #
    #   * If `true`, your client's IP address is used when you connect to a
    #     resource.
    #
    #   * If `false`, the elastic network interface IP address is used when
    #     you connect to a resource.
    #
    #   Default: `true`
    #   @return [Boolean]
    #
    # @!attribute [rw] security_group_ids
    #   The security groups associated with the endpoint. If you didn't
    #   specify a security group, the default security group for your VPC is
    #   associated with the endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the EC2 Instance Connect Endpoint.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] ip_address_type
    #   The IP address type of the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] public_dns_names
    #   The public DNS names of the endpoint.
    #   @return [Types::InstanceConnectEndpointPublicDnsNames]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ec2InstanceConnectEndpoint AWS API Documentation
    #
    class Ec2InstanceConnectEndpoint < Struct.new(
      :owner_id,
      :instance_connect_endpoint_id,
      :instance_connect_endpoint_arn,
      :state,
      :state_message,
      :dns_name,
      :fips_dns_name,
      :network_interface_ids,
      :vpc_id,
      :availability_zone,
      :created_at,
      :subnet_id,
      :preserve_client_ip,
      :security_group_ids,
      :tags,
      :ip_address_type,
      :public_dns_names)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Elastic Fabric Adapters for the instance type.
    #
    # @!attribute [rw] maximum_efa_interfaces
    #   The maximum number of Elastic Fabric Adapters for the instance type.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EfaInfo AWS API Documentation
    #
    class EfaInfo < Struct.new(
      :maximum_efa_interfaces)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an egress-only internet gateway.
    #
    # @!attribute [rw] attachments
    #   Information about the attachment of the egress-only internet
    #   gateway.
    #   @return [Array<Types::InternetGatewayAttachment>]
    #
    # @!attribute [rw] egress_only_internet_gateway_id
    #   The ID of the egress-only internet gateway.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the egress-only internet gateway.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EgressOnlyInternetGateway AWS API Documentation
    #
    class EgressOnlyInternetGateway < Struct.new(
      :attachments,
      :egress_only_internet_gateway_id,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #  </note>
    #
    # Describes the association between an instance and an Elastic Graphics
    # accelerator.
    #
    # @!attribute [rw] elastic_gpu_id
    #   The ID of the Elastic Graphics accelerator.
    #   @return [String]
    #
    # @!attribute [rw] elastic_gpu_association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] elastic_gpu_association_state
    #   The state of the association between the instance and the Elastic
    #   Graphics accelerator.
    #   @return [String]
    #
    # @!attribute [rw] elastic_gpu_association_time
    #   The time the Elastic Graphics accelerator was associated with the
    #   instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ElasticGpuAssociation AWS API Documentation
    #
    class ElasticGpuAssociation < Struct.new(
      :elastic_gpu_id,
      :elastic_gpu_association_id,
      :elastic_gpu_association_state,
      :elastic_gpu_association_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #  </note>
    #
    # Describes the status of an Elastic Graphics accelerator.
    #
    # @!attribute [rw] status
    #   The health status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ElasticGpuHealth AWS API Documentation
    #
    class ElasticGpuHealth < Struct.new(
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #  </note>
    #
    # A specification for an Elastic Graphics accelerator.
    #
    # @!attribute [rw] type
    #   The type of Elastic Graphics accelerator.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ElasticGpuSpecification AWS API Documentation
    #
    class ElasticGpuSpecification < Struct.new(
      :type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Deprecated.
    #
    # <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #  </note>
    #
    # @!attribute [rw] type
    #   Deprecated.
    #
    #   <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #    </note>
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ElasticGpuSpecificationResponse AWS API Documentation
    #
    class ElasticGpuSpecificationResponse < Struct.new(
      :type)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #  </note>
    #
    # Describes an Elastic Graphics accelerator.
    #
    # @!attribute [rw] elastic_gpu_id
    #   The ID of the Elastic Graphics accelerator.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in the which the Elastic Graphics accelerator
    #   resides.
    #   @return [String]
    #
    # @!attribute [rw] elastic_gpu_type
    #   The type of Elastic Graphics accelerator.
    #   @return [String]
    #
    # @!attribute [rw] elastic_gpu_health
    #   The status of the Elastic Graphics accelerator.
    #   @return [Types::ElasticGpuHealth]
    #
    # @!attribute [rw] elastic_gpu_state
    #   The state of the Elastic Graphics accelerator.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance to which the Elastic Graphics accelerator is
    #   attached.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the Elastic Graphics accelerator.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ElasticGpus AWS API Documentation
    #
    class ElasticGpus < Struct.new(
      :elastic_gpu_id,
      :availability_zone,
      :elastic_gpu_type,
      :elastic_gpu_health,
      :elastic_gpu_state,
      :instance_id,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #  </note>
    #
    # Describes an elastic inference accelerator.
    #
    # @!attribute [rw] type
    #   The type of elastic inference accelerator. The possible values are
    #   `eia1.medium`, `eia1.large`, `eia1.xlarge`, `eia2.medium`,
    #   `eia2.large`, and `eia2.xlarge`.
    #   @return [String]
    #
    # @!attribute [rw] count
    #   The number of elastic inference accelerators to attach to the
    #   instance.
    #
    #   Default: 1
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ElasticInferenceAccelerator AWS API Documentation
    #
    class ElasticInferenceAccelerator < Struct.new(
      :type,
      :count)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #  </note>
    #
    # Describes the association between an instance and an elastic inference
    # accelerator.
    #
    # @!attribute [rw] elastic_inference_accelerator_arn
    #   The Amazon Resource Name (ARN) of the elastic inference accelerator.
    #   @return [String]
    #
    # @!attribute [rw] elastic_inference_accelerator_association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] elastic_inference_accelerator_association_state
    #   The state of the elastic inference accelerator.
    #   @return [String]
    #
    # @!attribute [rw] elastic_inference_accelerator_association_time
    #   The time at which the elastic inference accelerator is associated
    #   with an instance.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ElasticInferenceAcceleratorAssociation AWS API Documentation
    #
    class ElasticInferenceAcceleratorAssociation < Struct.new(
      :elastic_inference_accelerator_arn,
      :elastic_inference_accelerator_association_id,
      :elastic_inference_accelerator_association_state,
      :elastic_inference_accelerator_association_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # ENA Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
    # technology to increase the maximum bandwidth used per stream and
    # minimize tail latency of network traffic between EC2 instances. With
    # ENA Express, you can communicate between two EC2 instances in the same
    # subnet within the same account, or in different accounts. Both sending
    # and receiving instances must have ENA Express enabled.
    #
    # To improve the reliability of network packet delivery, ENA Express
    # reorders network packets on the receiving end by default. However,
    # some UDP-based applications are designed to handle network packets
    # that are out of order to reduce the overhead for packet delivery at
    # the network layer. When ENA Express is enabled, you can specify
    # whether UDP network traffic uses it.
    #
    # @!attribute [rw] ena_srd_enabled
    #   Indicates whether ENA Express is enabled for the network interface.
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_srd_udp_specification
    #   Configures ENA Express for UDP network traffic.
    #   @return [Types::EnaSrdUdpSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnaSrdSpecification AWS API Documentation
    #
    class EnaSrdSpecification < Struct.new(
      :ena_srd_enabled,
      :ena_srd_udp_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # Launch instances with ENA Express settings configured from your launch
    # template.
    #
    # @!attribute [rw] ena_srd_enabled
    #   Specifies whether ENA Express is enabled for the network interface
    #   when you launch an instance.
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_srd_udp_specification
    #   Contains ENA Express settings for UDP network traffic for the
    #   network interface attached to the instance.
    #   @return [Types::EnaSrdUdpSpecificationRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnaSrdSpecificationRequest AWS API Documentation
    #
    class EnaSrdSpecificationRequest < Struct.new(
      :ena_srd_enabled,
      :ena_srd_udp_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # ENA Express is compatible with both TCP and UDP transport protocols.
    # When it's enabled, TCP traffic automatically uses it. However, some
    # UDP-based applications are designed to handle network packets that are
    # out of order, without a need for retransmission, such as live video
    # broadcasting or other near-real-time applications. For UDP traffic,
    # you can specify whether to use ENA Express, based on your application
    # environment needs.
    #
    # @!attribute [rw] ena_srd_udp_enabled
    #   Indicates whether UDP traffic to and from the instance uses ENA
    #   Express. To specify this setting, you must first enable ENA Express.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnaSrdUdpSpecification AWS API Documentation
    #
    class EnaSrdUdpSpecification < Struct.new(
      :ena_srd_udp_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Configures ENA Express for UDP network traffic from your launch
    # template.
    #
    # @!attribute [rw] ena_srd_udp_enabled
    #   Indicates whether UDP traffic uses ENA Express for your instance. To
    #   ensure that UDP traffic can use ENA Express when you launch an
    #   instance, you must also set **EnaSrdEnabled** in the
    #   **EnaSrdSpecificationRequest** to `true`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnaSrdUdpSpecificationRequest AWS API Documentation
    #
    class EnaSrdUdpSpecificationRequest < Struct.new(
      :ena_srd_udp_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_id
    #   The allocation ID of an Elastic IP address.
    #   @return [String]
    #
    # @!attribute [rw] transfer_account_id
    #   The ID of the account that you want to transfer the Elastic IP
    #   address to.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableAddressTransferRequest AWS API Documentation
    #
    class EnableAddressTransferRequest < Struct.new(
      :allocation_id,
      :transfer_account_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] address_transfer
    #   An Elastic IP address transfer.
    #   @return [Types::AddressTransfer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableAddressTransferResult AWS API Documentation
    #
    class EnableAddressTransferResult < Struct.new(
      :address_transfer)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allowed_images_settings_state
    #   Specify `enabled` to apply the image criteria specified by the
    #   Allowed AMIs settings. Specify `audit-mode` so that you can check
    #   which AMIs will be allowed or not allowed by the image criteria.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableAllowedImagesSettingsRequest AWS API Documentation
    #
    class EnableAllowedImagesSettingsRequest < Struct.new(
      :allowed_images_settings_state,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allowed_images_settings_state
    #   Returns `enabled` or `audit-mode` if the request succeeds;
    #   otherwise, it returns an error.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableAllowedImagesSettingsResult AWS API Documentation
    #
    class EnableAllowedImagesSettingsResult < Struct.new(
      :allowed_images_settings_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] source
    #   The source Region (like `us-east-1`) or Availability Zone ID (like
    #   `use1-az1`) that the metric subscription is enabled for. If you use
    #   Availability Zone IDs, the Source and Destination Availability Zones
    #   must be in the same Region.
    #   @return [String]
    #
    # @!attribute [rw] destination
    #   The target Region (like `us-east-2`) or Availability Zone ID (like
    #   `use2-az2`) that the metric subscription is enabled for. If you use
    #   Availability Zone IDs, the Source and Destination Availability Zones
    #   must be in the same Region.
    #   @return [String]
    #
    # @!attribute [rw] metric
    #   The metric used for the enabled subscription.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic used for the enabled subscription.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableAwsNetworkPerformanceMetricSubscriptionRequest AWS API Documentation
    #
    class EnableAwsNetworkPerformanceMetricSubscriptionRequest < Struct.new(
      :source,
      :destination,
      :metric,
      :statistic,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] output
    #   Indicates whether the subscribe action was successful.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableAwsNetworkPerformanceMetricSubscriptionResult AWS API Documentation
    #
    class EnableAwsNetworkPerformanceMetricSubscriptionResult < Struct.new(
      :output)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableEbsEncryptionByDefaultRequest AWS API Documentation
    #
    class EnableEbsEncryptionByDefaultRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ebs_encryption_by_default
    #   The updated status of encryption by default.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableEbsEncryptionByDefaultResult AWS API Documentation
    #
    class EnableEbsEncryptionByDefaultResult < Struct.new(
      :ebs_encryption_by_default)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   Specify the ID of the image for which to enable Windows fast launch.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of resource to use for pre-provisioning the AMI for Windows
    #   fast launch. Supported values include: `snapshot`, which is the
    #   default value.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_configuration
    #   Configuration settings for creating and managing the snapshots that
    #   are used for pre-provisioning the AMI for Windows fast launch. The
    #   associated `ResourceType` must be `snapshot`.
    #   @return [Types::FastLaunchSnapshotConfigurationRequest]
    #
    # @!attribute [rw] launch_template
    #   The launch template to use when launching Windows instances from
    #   pre-provisioned snapshots. Launch template parameters can include
    #   either the name or ID of the launch template, but not both.
    #   @return [Types::FastLaunchLaunchTemplateSpecificationRequest]
    #
    # @!attribute [rw] max_parallel_launches
    #   The maximum number of instances that Amazon EC2 can launch at the
    #   same time to create pre-provisioned snapshots for Windows fast
    #   launch. Value must be `6` or greater.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastLaunchRequest AWS API Documentation
    #
    class EnableFastLaunchRequest < Struct.new(
      :image_id,
      :resource_type,
      :snapshot_configuration,
      :launch_template,
      :max_parallel_launches,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The image ID that identifies the AMI for which Windows fast launch
    #   was enabled.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of resource that was defined for pre-provisioning the AMI
    #   for Windows fast launch.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_configuration
    #   Settings to create and manage the pre-provisioned snapshots that
    #   Amazon EC2 uses for faster launches from the Windows AMI. This
    #   property is returned when the associated `resourceType` is
    #   `snapshot`.
    #   @return [Types::FastLaunchSnapshotConfigurationResponse]
    #
    # @!attribute [rw] launch_template
    #   The launch template that is used when launching Windows instances
    #   from pre-provisioned snapshots.
    #   @return [Types::FastLaunchLaunchTemplateSpecificationResponse]
    #
    # @!attribute [rw] max_parallel_launches
    #   The maximum number of instances that Amazon EC2 can launch at the
    #   same time to create pre-provisioned snapshots for Windows fast
    #   launch.
    #   @return [Integer]
    #
    # @!attribute [rw] owner_id
    #   The owner ID for the AMI for which Windows fast launch was enabled.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of Windows fast launch for the specified AMI.
    #   @return [String]
    #
    # @!attribute [rw] state_transition_reason
    #   The reason that the state changed for Windows fast launch for the
    #   AMI.
    #   @return [String]
    #
    # @!attribute [rw] state_transition_time
    #   The time that the state changed for Windows fast launch for the AMI.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastLaunchResult AWS API Documentation
    #
    class EnableFastLaunchResult < Struct.new(
      :image_id,
      :resource_type,
      :snapshot_configuration,
      :launch_template,
      :max_parallel_launches,
      :owner_id,
      :state,
      :state_transition_reason,
      :state_transition_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains information about the errors that occurred when enabling fast
    # snapshot restores.
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] fast_snapshot_restore_state_errors
    #   The errors.
    #   @return [Array<Types::EnableFastSnapshotRestoreStateErrorItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestoreErrorItem AWS API Documentation
    #
    class EnableFastSnapshotRestoreErrorItem < Struct.new(
      :snapshot_id,
      :fast_snapshot_restore_state_errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an error that occurred when enabling fast snapshot restores.
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The error message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestoreStateError AWS API Documentation
    #
    class EnableFastSnapshotRestoreStateError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains information about an error that occurred when enabling fast
    # snapshot restores.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] error
    #   The error.
    #   @return [Types::EnableFastSnapshotRestoreStateError]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestoreStateErrorItem AWS API Documentation
    #
    class EnableFastSnapshotRestoreStateErrorItem < Struct.new(
      :availability_zone,
      :error)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes fast snapshot restores that were successfully enabled.
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of fast snapshot restores.
    #   @return [String]
    #
    # @!attribute [rw] state_transition_reason
    #   The reason for the state transition. The possible values are as
    #   follows:
    #
    #   * `Client.UserInitiated` - The state successfully transitioned to
    #     `enabling` or `disabling`.
    #
    #   * `Client.UserInitiated - Lifecycle state transition` - The state
    #     successfully transitioned to `optimizing`, `enabled`, or
    #     `disabled`.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that enabled fast snapshot
    #   restores on the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] owner_alias
    #   The Amazon Web Services owner alias that enabled fast snapshot
    #   restores on the snapshot. This is intended for future use.
    #   @return [String]
    #
    # @!attribute [rw] enabling_time
    #   The time at which fast snapshot restores entered the `enabling`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] optimizing_time
    #   The time at which fast snapshot restores entered the `optimizing`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] enabled_time
    #   The time at which fast snapshot restores entered the `enabled`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] disabling_time
    #   The time at which fast snapshot restores entered the `disabling`
    #   state.
    #   @return [Time]
    #
    # @!attribute [rw] disabled_time
    #   The time at which fast snapshot restores entered the `disabled`
    #   state.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestoreSuccessItem AWS API Documentation
    #
    class EnableFastSnapshotRestoreSuccessItem < Struct.new(
      :snapshot_id,
      :availability_zone,
      :state,
      :state_transition_reason,
      :owner_id,
      :owner_alias,
      :enabling_time,
      :optimizing_time,
      :enabled_time,
      :disabling_time,
      :disabled_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] availability_zones
    #   One or more Availability Zones. For example, `us-east-2a`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] source_snapshot_ids
    #   The IDs of one or more snapshots. For example,
    #   `snap-1234567890abcdef0`. You can specify a snapshot that was shared
    #   with you from another Amazon Web Services account.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestoresRequest AWS API Documentation
    #
    class EnableFastSnapshotRestoresRequest < Struct.new(
      :availability_zones,
      :source_snapshot_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successful
    #   Information about the snapshots for which fast snapshot restores
    #   were successfully enabled.
    #   @return [Array<Types::EnableFastSnapshotRestoreSuccessItem>]
    #
    # @!attribute [rw] unsuccessful
    #   Information about the snapshots for which fast snapshot restores
    #   could not be enabled.
    #   @return [Array<Types::EnableFastSnapshotRestoreErrorItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableFastSnapshotRestoresResult AWS API Documentation
    #
    class EnableFastSnapshotRestoresResult < Struct.new(
      :successful,
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_block_public_access_state
    #   Specify `block-new-sharing` to enable block public access for AMIs
    #   at the account level in the specified Region. This will block any
    #   attempt to publicly share your AMIs in the specified Region.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableImageBlockPublicAccessRequest AWS API Documentation
    #
    class EnableImageBlockPublicAccessRequest < Struct.new(
      :image_block_public_access_state,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_block_public_access_state
    #   Returns `block-new-sharing` if the request succeeds; otherwise, it
    #   returns an error.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableImageBlockPublicAccessResult AWS API Documentation
    #
    class EnableImageBlockPublicAccessResult < Struct.new(
      :image_block_public_access_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] deprecate_at
    #   The date and time to deprecate the AMI, in UTC, in the following
    #   format: *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z. If you specify a value for
    #   seconds, Amazon EC2 rounds the seconds to the nearest minute.
    #
    #   You can’t specify a date in the past. The upper limit for
    #   `DeprecateAt` is 10 years from now, except for public AMIs, where
    #   the upper limit is 2 years from the creation date.
    #   @return [Time]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableImageDeprecationRequest AWS API Documentation
    #
    class EnableImageDeprecationRequest < Struct.new(
      :image_id,
      :deprecate_at,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableImageDeprecationResult AWS API Documentation
    #
    class EnableImageDeprecationResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] with_cooldown
    #   If `true`, enforces deregistration protection for 24 hours after
    #   deregistration protection is disabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableImageDeregistrationProtectionRequest AWS API Documentation
    #
    class EnableImageDeregistrationProtectionRequest < Struct.new(
      :image_id,
      :with_cooldown,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableImageDeregistrationProtectionResult AWS API Documentation
    #
    class EnableImageDeregistrationProtectionResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableImageRequest AWS API Documentation
    #
    class EnableImageRequest < Struct.new(
      :image_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableImageResult AWS API Documentation
    #
    class EnableImageResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] delegated_admin_account_id
    #   The Organizations member account ID that you want to enable as the
    #   IPAM account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableIpamOrganizationAdminAccountRequest AWS API Documentation
    #
    class EnableIpamOrganizationAdminAccountRequest < Struct.new(
      :dry_run,
      :delegated_admin_account_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] success
    #   The result of enabling the IPAM account.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableIpamOrganizationAdminAccountResult AWS API Documentation
    #
    class EnableIpamOrganizationAdminAccountResult < Struct.new(
      :success)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableReachabilityAnalyzerOrganizationSharingRequest AWS API Documentation
    #
    class EnableReachabilityAnalyzerOrganizationSharingRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return_value
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableReachabilityAnalyzerOrganizationSharingResult AWS API Documentation
    #
    class EnableReachabilityAnalyzerOrganizationSharingResult < Struct.new(
      :return_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The ID of the route server for which to enable propagation.
    #   @return [String]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table to which route server will propagate
    #   routes.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableRouteServerPropagationRequest AWS API Documentation
    #
    class EnableRouteServerPropagationRequest < Struct.new(
      :route_server_id,
      :route_table_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_propagation
    #   Information about the enabled route server propagation.
    #   @return [Types::RouteServerPropagation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableRouteServerPropagationResult AWS API Documentation
    #
    class EnableRouteServerPropagationResult < Struct.new(
      :route_server_propagation)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableSerialConsoleAccessRequest AWS API Documentation
    #
    class EnableSerialConsoleAccessRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] serial_console_access_enabled
    #   If `true`, access to the EC2 serial console of all instances is
    #   enabled for your account. If `false`, access to the EC2 serial
    #   console of all instances is disabled for your account.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableSerialConsoleAccessResult AWS API Documentation
    #
    class EnableSerialConsoleAccessResult < Struct.new(
      :serial_console_access_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] state
    #   The mode in which to enable block public access for snapshots for
    #   the Region. Specify one of the following values:
    #
    #   * `block-all-sharing` - Prevents all public sharing of snapshots in
    #     the Region. Users in the account will no longer be able to request
    #     new public sharing. Additionally, snapshots that are already
    #     publicly shared are treated as private and they are no longer
    #     publicly available.
    #
    #   * `block-new-sharing` - Prevents only new public sharing of
    #     snapshots in the Region. Users in the account will no longer be
    #     able to request new public sharing. However, snapshots that are
    #     already publicly shared, remain publicly available.
    #
    #   `unblocked` is not a valid value for
    #   **EnableSnapshotBlockPublicAccess**.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableSnapshotBlockPublicAccessRequest AWS API Documentation
    #
    class EnableSnapshotBlockPublicAccessRequest < Struct.new(
      :state,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] state
    #   The state of block public access for snapshots for the account and
    #   Region. Returns either `block-all-sharing` or `block-new-sharing` if
    #   the request succeeds.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableSnapshotBlockPublicAccessResult AWS API Documentation
    #
    class EnableSnapshotBlockPublicAccessResult < Struct.new(
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the propagation route table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] transit_gateway_route_table_announcement_id
    #   The ID of the transit gateway route table announcement.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableTransitGatewayRouteTablePropagationRequest AWS API Documentation
    #
    class EnableTransitGatewayRouteTablePropagationRequest < Struct.new(
      :transit_gateway_route_table_id,
      :transit_gateway_attachment_id,
      :dry_run,
      :transit_gateway_route_table_announcement_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] propagation
    #   Information about route propagation.
    #   @return [Types::TransitGatewayPropagation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableTransitGatewayRouteTablePropagationResult AWS API Documentation
    #
    class EnableTransitGatewayRouteTablePropagationResult < Struct.new(
      :propagation)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for EnableVgwRoutePropagation.
    #
    # @!attribute [rw] gateway_id
    #   The ID of the virtual private gateway that is attached to a VPC. The
    #   virtual private gateway must be attached to the same VPC that the
    #   routing tables are associated with.
    #   @return [String]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table. The routing table must be associated with
    #   the same VPC that the virtual private gateway is attached to.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVgwRoutePropagationRequest AWS API Documentation
    #
    class EnableVgwRoutePropagationRequest < Struct.new(
      :gateway_id,
      :route_table_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVolumeIORequest AWS API Documentation
    #
    class EnableVolumeIORequest < Struct.new(
      :dry_run,
      :volume_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupportRequest AWS API Documentation
    #
    class EnableVpcClassicLinkDnsSupportRequest < Struct.new(
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkDnsSupportResult AWS API Documentation
    #
    class EnableVpcClassicLinkDnsSupportResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkRequest AWS API Documentation
    #
    class EnableVpcClassicLinkRequest < Struct.new(
      :dry_run,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnableVpcClassicLinkResult AWS API Documentation
    #
    class EnableVpcClassicLinkResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # Indicates whether the instance is enabled for Amazon Web Services
    # Nitro Enclaves.
    #
    # @!attribute [rw] enabled
    #   If this parameter is set to `true`, the instance is enabled for
    #   Amazon Web Services Nitro Enclaves; otherwise, it is not enabled for
    #   Amazon Web Services Nitro Enclaves.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnclaveOptions AWS API Documentation
    #
    class EnclaveOptions < Struct.new(
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Indicates whether the instance is enabled for Amazon Web Services
    # Nitro Enclaves. For more information, see [ What is Amazon Web
    # Services Nitro Enclaves?][1] in the *Amazon Web Services Nitro
    # Enclaves User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html
    #
    # @!attribute [rw] enabled
    #   To enable the instance for Amazon Web Services Nitro Enclaves, set
    #   this parameter to `true`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EnclaveOptionsRequest AWS API Documentation
    #
    class EnclaveOptionsRequest < Struct.new(
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an EC2 Fleet or Spot Fleet event.
    #
    # @!attribute [rw] event_description
    #   The description of the event.
    #   @return [String]
    #
    # @!attribute [rw] event_sub_type
    #   The event.
    #
    #   `error` events:
    #
    #   * `iamFleetRoleInvalid` - The EC2 Fleet or Spot Fleet does not have
    #     the required permissions either to launch or terminate an
    #     instance.
    #
    #   * `allLaunchSpecsTemporarilyBlacklisted` - None of the
    #     configurations are valid, and several attempts to launch instances
    #     have failed. For more information, see the description of the
    #     event.
    #
    #   * `spotInstanceCountLimitExceeded` - You've reached the limit on
    #     the number of Spot Instances that you can launch.
    #
    #   * `spotFleetRequestConfigurationInvalid` - The configuration is not
    #     valid. For more information, see the description of the event.
    #
    #   `fleetRequestChange` events:
    #
    #   * `active` - The EC2 Fleet or Spot Fleet request has been validated
    #     and Amazon EC2 is attempting to maintain the target number of
    #     running instances.
    #
    #   * `deleted` (EC2 Fleet) / `cancelled` (Spot Fleet) - The EC2 Fleet
    #     is deleted or the Spot Fleet request is canceled and has no
    #     running instances. The EC2 Fleet or Spot Fleet will be deleted two
    #     days after its instances are terminated.
    #
    #   * `deleted_running` (EC2 Fleet) / `cancelled_running` (Spot Fleet) -
    #     The EC2 Fleet is deleted or the Spot Fleet request is canceled and
    #     does not launch additional instances. Its existing instances
    #     continue to run until they are interrupted or terminated. The
    #     request remains in this state until all instances are interrupted
    #     or terminated.
    #
    #   * `deleted_terminating` (EC2 Fleet) / `cancelled_terminating` (Spot
    #     Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is
    #     canceled and its instances are terminating. The request remains in
    #     this state until all instances are terminated.
    #
    #   * `expired` - The EC2 Fleet or Spot Fleet request has expired. If
    #     the request was created with `TerminateInstancesWithExpiration`
    #     set, a subsequent `terminated` event indicates that the instances
    #     are terminated.
    #
    #   * `modify_in_progress` - The EC2 Fleet or Spot Fleet request is
    #     being modified. The request remains in this state until the
    #     modification is fully processed.
    #
    #   * `modify_succeeded` - The EC2 Fleet or Spot Fleet request was
    #     modified.
    #
    #   * `submitted` - The EC2 Fleet or Spot Fleet request is being
    #     evaluated and Amazon EC2 is preparing to launch the target number
    #     of instances.
    #
    #   * `progress` - The EC2 Fleet or Spot Fleet request is in the process
    #     of being fulfilled.
    #
    #   `instanceChange` events:
    #
    #   * `launched` - A new instance was launched.
    #
    #   * `terminated` - An instance was terminated by the user.
    #
    #   * `termination_notified` - An instance termination notification was
    #     sent when a Spot Instance was terminated by Amazon EC2 during
    #     scale-down, when the target capacity of the fleet was modified
    #     down, for example, from a target capacity of 4 to a target
    #     capacity of 3.
    #
    #   `Information` events:
    #
    #   * `fleetProgressHalted` - The price in every launch specification is
    #     not valid because it is below the Spot price (all the launch
    #     specifications have produced `launchSpecUnusable` events). A
    #     launch specification might become valid if the Spot price changes.
    #
    #   * `launchSpecTemporarilyBlacklisted` - The configuration is not
    #     valid and several attempts to launch instances have failed. For
    #     more information, see the description of the event.
    #
    #   * `launchSpecUnusable` - The price specified in a launch
    #     specification is not valid because it is below the Spot price for
    #     the requested Spot pools.
    #
    #     Note: Even if a fleet with the `maintain` request type is in the
    #     process of being canceled, it may still publish a
    #     `launchSpecUnusable` event. This does not mean that the canceled
    #     fleet is attempting to launch a new instance.
    #
    #   * `registerWithLoadBalancersFailed` - An attempt to register
    #     instances with load balancers failed. For more information, see
    #     the description of the event.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance. This information is available only for
    #   `instanceChange` events.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/EventInformation AWS API Documentation
    #
    class EventInformation < Struct.new(
      :event_description,
      :event_sub_type,
      :instance_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an explanation code for an unreachable path. For more
    # information, see [Reachability Analyzer explanation codes][1].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/reachability/explanation-codes.html
    #
    # @!attribute [rw] acl
    #   The network ACL.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] acl_rule
    #   The network ACL rule.
    #   @return [Types::AnalysisAclRule]
    #
    # @!attribute [rw] address
    #   The IPv4 address, in CIDR notation.
    #   @return [String]
    #
    # @!attribute [rw] addresses
    #   The IPv4 addresses, in CIDR notation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] attached_to
    #   The resource to which the component is attached.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] availability_zones
    #   The Availability Zones.
    #   @return [Array<String>]
    #
    # @!attribute [rw] availability_zone_ids
    #   The IDs of the Availability Zones.
    #   @return [Array<String>]
    #
    # @!attribute [rw] cidrs
    #   The CIDR ranges.
    #   @return [Array<String>]
    #
    # @!attribute [rw] component
    #   The component.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] customer_gateway
    #   The customer gateway.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] destination
    #   The destination.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] destination_vpc
    #   The destination VPC.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] direction
    #   The direction. The following are the possible values:
    #
    #   * egress
    #
    #   * ingress
    #   @return [String]
    #
    # @!attribute [rw] explanation_code
    #   The explanation code.
    #   @return [String]
    #
    # @!attribute [rw] ingress_route_table
    #   The route table.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] internet_gateway
    #   The internet gateway.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] load_balancer_arn
    #   The Amazon Resource Name (ARN) of the load balancer.
    #   @return [String]
    #
    # @!attribute [rw] classic_load_balancer_listener
    #   The listener for a Classic Load Balancer.
    #   @return [Types::AnalysisLoadBalancerListener]
    #
    # @!attribute [rw] load_balancer_listener_port
    #   The listener port of the load balancer.
    #   @return [Integer]
    #
    # @!attribute [rw] load_balancer_target
    #   The target.
    #   @return [Types::AnalysisLoadBalancerTarget]
    #
    # @!attribute [rw] load_balancer_target_group
    #   The target group.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] load_balancer_target_groups
    #   The target groups.
    #   @return [Array<Types::AnalysisComponent>]
    #
    # @!attribute [rw] load_balancer_target_port
    #   The target port.
    #   @return [Integer]
    #
    # @!attribute [rw] elastic_load_balancer_listener
    #   The load balancer listener.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] missing_component
    #   The missing component.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway
    #   The NAT gateway.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] network_interface
    #   The network interface.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] packet_field
    #   The packet field.
    #   @return [String]
    #
    # @!attribute [rw] vpc_peering_connection
    #   The VPC peering connection.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] port
    #   The port.
    #   @return [Integer]
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::PortRange>]
    #
    # @!attribute [rw] prefix_list
    #   The prefix list.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] protocols
    #   The protocols.
    #   @return [Array<String>]
    #
    # @!attribute [rw] route_table_route
    #   The route table route.
    #   @return [Types::AnalysisRouteTableRoute]
    #
    # @!attribute [rw] route_table
    #   The route table.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] security_group
    #   The security group.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] security_group_rule
    #   The security group rule.
    #   @return [Types::AnalysisSecurityGroupRule]
    #
    # @!attribute [rw] security_groups
    #   The security groups.
    #   @return [Array<Types::AnalysisComponent>]
    #
    # @!attribute [rw] source_vpc
    #   The source VPC.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] state
    #   The state.
    #   @return [String]
    #
    # @!attribute [rw] subnet
    #   The subnet.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] subnet_route_table
    #   The route table for the subnet.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] vpc
    #   The component VPC.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] vpc_endpoint
    #   The VPC endpoint.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] vpn_connection
    #   The VPN connection.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] vpn_gateway
    #   The VPN gateway.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] transit_gateway
    #   The transit gateway.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] transit_gateway_route_table
    #   The transit gateway route table.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] transit_gateway_route_table_route
    #   The transit gateway route table route.
    #   @return [Types::TransitGatewayRouteTableRoute]
    #
    # @!attribute [rw] transit_gateway_attachment
    #   The transit gateway attachment.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] component_account
    #   The Amazon Web Services account for the component.
    #   @return [String]
    #
    # @!attribute [rw] component_region
    #   The Region for the component.
    #   @return [String]
    #
    # @!attribute [rw] firewall_stateless_rule
    #   The Network Firewall stateless rule.
    #   @return [Types::FirewallStatelessRule]
    #
    # @!attribute [rw] firewall_stateful_rule
    #   The Network Firewall stateful rule.
    #   @return [Types::FirewallStatefulRule]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Explanation AWS API Documentation
    #
    class Explanation < Struct.new(
      :acl,
      :acl_rule,
      :address,
      :addresses,
      :attached_to,
      :availability_zones,
      :availability_zone_ids,
      :cidrs,
      :component,
      :customer_gateway,
      :destination,
      :destination_vpc,
      :direction,
      :explanation_code,
      :ingress_route_table,
      :internet_gateway,
      :load_balancer_arn,
      :classic_load_balancer_listener,
      :load_balancer_listener_port,
      :load_balancer_target,
      :load_balancer_target_group,
      :load_balancer_target_groups,
      :load_balancer_target_port,
      :elastic_load_balancer_listener,
      :missing_component,
      :nat_gateway,
      :network_interface,
      :packet_field,
      :vpc_peering_connection,
      :port,
      :port_ranges,
      :prefix_list,
      :protocols,
      :route_table_route,
      :route_table,
      :security_group,
      :security_group_rule,
      :security_groups,
      :source_vpc,
      :state,
      :subnet,
      :subnet_route_table,
      :vpc,
      :vpc_endpoint,
      :vpn_connection,
      :vpn_gateway,
      :transit_gateway,
      :transit_gateway_route_table,
      :transit_gateway_route_table_route,
      :transit_gateway_attachment,
      :component_account,
      :component_region,
      :firewall_stateless_rule,
      :firewall_stateful_rule)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientCertificateRevocationListRequest AWS API Documentation
    #
    class ExportClientVpnClientCertificateRevocationListRequest < Struct.new(
      :client_vpn_endpoint_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] certificate_revocation_list
    #   Information about the client certificate revocation list.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The current state of the client certificate revocation list.
    #   @return [Types::ClientCertificateRevocationListStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientCertificateRevocationListResult AWS API Documentation
    #
    class ExportClientVpnClientCertificateRevocationListResult < Struct.new(
      :certificate_revocation_list,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientConfigurationRequest AWS API Documentation
    #
    class ExportClientVpnClientConfigurationRequest < Struct.new(
      :client_vpn_endpoint_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_configuration
    #   The contents of the Client VPN endpoint configuration file.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportClientVpnClientConfigurationResult AWS API Documentation
    #
    class ExportClientVpnClientConfigurationResult < Struct.new(
      :client_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Token to enable idempotency for export image requests.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the image being exported. The maximum length is 255
    #   characters.
    #   @return [String]
    #
    # @!attribute [rw] disk_image_format
    #   The disk image format.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] image_id
    #   The ID of the image.
    #   @return [String]
    #
    # @!attribute [rw] s3_export_location
    #   The Amazon S3 bucket for the destination image. The destination
    #   bucket must exist.
    #   @return [Types::ExportTaskS3LocationRequest]
    #
    # @!attribute [rw] role_name
    #   The name of the role that grants VM Import/Export permission to
    #   export images to your Amazon S3 bucket. If this parameter is not
    #   specified, the default role is named 'vmimport'.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the export image task during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportImageRequest AWS API Documentation
    #
    class ExportImageRequest < Struct.new(
      :client_token,
      :description,
      :disk_image_format,
      :dry_run,
      :image_id,
      :s3_export_location,
      :role_name,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] description
    #   A description of the image being exported.
    #   @return [String]
    #
    # @!attribute [rw] disk_image_format
    #   The disk image format for the exported image.
    #   @return [String]
    #
    # @!attribute [rw] export_image_task_id
    #   The ID of the export image task.
    #   @return [String]
    #
    # @!attribute [rw] image_id
    #   The ID of the image.
    #   @return [String]
    #
    # @!attribute [rw] role_name
    #   The name of the role that grants VM Import/Export permission to
    #   export images to your Amazon S3 bucket.
    #   @return [String]
    #
    # @!attribute [rw] progress
    #   The percent complete of the export image task.
    #   @return [String]
    #
    # @!attribute [rw] s3_export_location
    #   Information about the destination Amazon S3 bucket.
    #   @return [Types::ExportTaskS3Location]
    #
    # @!attribute [rw] status
    #   The status of the export image task. The possible values are
    #   `active`, `completed`, `deleting`, and `deleted`.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The status message for the export image task.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the export image task.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportImageResult AWS API Documentation
    #
    class ExportImageResult < Struct.new(
      :description,
      :disk_image_format,
      :export_image_task_id,
      :image_id,
      :role_name,
      :progress,
      :s3_export_location,
      :status,
      :status_message,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an export image task.
    #
    # @!attribute [rw] description
    #   A description of the image being exported.
    #   @return [String]
    #
    # @!attribute [rw] export_image_task_id
    #   The ID of the export image task.
    #   @return [String]
    #
    # @!attribute [rw] image_id
    #   The ID of the image.
    #   @return [String]
    #
    # @!attribute [rw] progress
    #   The percent complete of the export image task.
    #   @return [String]
    #
    # @!attribute [rw] s3_export_location
    #   Information about the destination Amazon S3 bucket.
    #   @return [Types::ExportTaskS3Location]
    #
    # @!attribute [rw] status
    #   The status of the export image task. The possible values are
    #   `active`, `completed`, `deleting`, and `deleted`.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The status message for the export image task.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the export image task.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportImageTask AWS API Documentation
    #
    class ExportImageTask < Struct.new(
      :description,
      :export_image_task_id,
      :image_id,
      :progress,
      :s3_export_location,
      :status,
      :status_message,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an export instance task.
    #
    # @!attribute [rw] description
    #   A description of the resource being exported.
    #   @return [String]
    #
    # @!attribute [rw] export_task_id
    #   The ID of the export task.
    #   @return [String]
    #
    # @!attribute [rw] export_to_s3_task
    #   Information about the export task.
    #   @return [Types::ExportToS3Task]
    #
    # @!attribute [rw] instance_export_details
    #   Information about the instance to export.
    #   @return [Types::InstanceExportDetails]
    #
    # @!attribute [rw] state
    #   The state of the export task.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The status message related to the export task.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags for the export task.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTask AWS API Documentation
    #
    class ExportTask < Struct.new(
      :description,
      :export_task_id,
      :export_to_s3_task,
      :instance_export_details,
      :state,
      :status_message,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the destination for an export image task.
    #
    # @!attribute [rw] s3_bucket
    #   The destination Amazon S3 bucket.
    #   @return [String]
    #
    # @!attribute [rw] s3_prefix
    #   The prefix (logical hierarchy) in the bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTaskS3Location AWS API Documentation
    #
    class ExportTaskS3Location < Struct.new(
      :s3_bucket,
      :s3_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the destination for an export image task.
    #
    # @!attribute [rw] s3_bucket
    #   The destination Amazon S3 bucket.
    #   @return [String]
    #
    # @!attribute [rw] s3_prefix
    #   The prefix (logical hierarchy) in the bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTaskS3LocationRequest AWS API Documentation
    #
    class ExportTaskS3LocationRequest < Struct.new(
      :s3_bucket,
      :s3_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the format and location for the export task.
    #
    # @!attribute [rw] container_format
    #   The container format used to combine disk images with metadata (such
    #   as OVF). If absent, only the disk image is exported.
    #   @return [String]
    #
    # @!attribute [rw] disk_image_format
    #   The format for the exported image.
    #   @return [String]
    #
    # @!attribute [rw] s3_bucket
    #   The Amazon S3 bucket for the destination image. The destination
    #   bucket must exist and have an access control list (ACL) attached
    #   that specifies the Region-specific canonical account ID for the
    #   `Grantee`. For more information about the ACL to your S3 bucket, see
    #   [Prerequisites][1] in the VM Import/Export User Guide.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites
    #   @return [String]
    #
    # @!attribute [rw] s3_key
    #   The encryption key for your S3 bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportToS3Task AWS API Documentation
    #
    class ExportToS3Task < Struct.new(
      :container_format,
      :disk_image_format,
      :s3_bucket,
      :s3_key)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an export instance task.
    #
    # @!attribute [rw] disk_image_format
    #   The format for the exported image.
    #   @return [String]
    #
    # @!attribute [rw] container_format
    #   The container format used to combine disk images with metadata (such
    #   as OVF). If absent, only the disk image is exported.
    #   @return [String]
    #
    # @!attribute [rw] s3_bucket
    #   The Amazon S3 bucket for the destination image. The destination
    #   bucket must exist and have an access control list (ACL) attached
    #   that specifies the Region-specific canonical account ID for the
    #   `Grantee`. For more information about the ACL to your S3 bucket, see
    #   [Prerequisites][1] in the VM Import/Export User Guide.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites
    #   @return [String]
    #
    # @!attribute [rw] s3_prefix
    #   The image is written to a single object in the Amazon S3 bucket at
    #   the S3 key s3prefix + exportTaskId + '.' + diskImageFormat.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportToS3TaskSpecification AWS API Documentation
    #
    class ExportToS3TaskSpecification < Struct.new(
      :disk_image_format,
      :container_format,
      :s3_bucket,
      :s3_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `attachment.transit-gateway-attachment-id` - The id of the transit
    #     gateway attachment.
    #
    #   * `attachment.resource-id` - The resource id of the transit gateway
    #     attachment.
    #
    #   * `route-search.exact-match` - The exact match of the specified
    #     filter.
    #
    #   * `route-search.longest-prefix-match` - The longest prefix that
    #     matches the route.
    #
    #   * `route-search.subnet-of-match` - The routes with a subnet that
    #     match the specified CIDR filter.
    #
    #   * `route-search.supernet-of-match` - 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.
    #
    #   * `state` - The state of the route (`active` \| `blackhole`).
    #
    #   * `transit-gateway-route-destination-cidr-block` - The CIDR range.
    #
    #   * `type` - The type of route (`propagated` \| `static`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] s3_bucket
    #   The name of the S3 bucket.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTransitGatewayRoutesRequest AWS API Documentation
    #
    class ExportTransitGatewayRoutesRequest < Struct.new(
      :transit_gateway_route_table_id,
      :filters,
      :s3_bucket,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] s3_location
    #   The URL of the exported file in Amazon S3. For example,
    #   s3://*bucket\_name*/VPCTransitGateway/TransitGatewayRouteTables/*file\_name*.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportTransitGatewayRoutesResult AWS API Documentation
    #
    class ExportTransitGatewayRoutesResult < Struct.new(
      :s3_location)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportVerifiedAccessInstanceClientConfigurationRequest AWS API Documentation
    #
    class ExportVerifiedAccessInstanceClientConfigurationRequest < Struct.new(
      :verified_access_instance_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] version
    #   The version.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] region
    #   The Region.
    #   @return [String]
    #
    # @!attribute [rw] device_trust_providers
    #   The device trust providers.
    #   @return [Array<String>]
    #
    # @!attribute [rw] user_trust_provider
    #   The user identity trust provider.
    #   @return [Types::VerifiedAccessInstanceUserTrustProviderClientConfiguration]
    #
    # @!attribute [rw] open_vpn_configurations
    #   The Open VPN configuration.
    #   @return [Array<Types::VerifiedAccessInstanceOpenVpnClientConfiguration>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ExportVerifiedAccessInstanceClientConfigurationResult AWS API Documentation
    #
    class ExportVerifiedAccessInstanceClientConfigurationResult < Struct.new(
      :version,
      :verified_access_instance_id,
      :region,
      :device_trust_providers,
      :user_trust_provider,
      :open_vpn_configurations)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Capacity Reservation Fleet that could not be cancelled.
    #
    # @!attribute [rw] capacity_reservation_fleet_id
    #   The ID of the Capacity Reservation Fleet that could not be
    #   cancelled.
    #   @return [String]
    #
    # @!attribute [rw] cancel_capacity_reservation_fleet_error
    #   Information about the Capacity Reservation Fleet cancellation error.
    #   @return [Types::CancelCapacityReservationFleetError]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FailedCapacityReservationFleetCancellationResult AWS API Documentation
    #
    class FailedCapacityReservationFleetCancellationResult < Struct.new(
      :capacity_reservation_fleet_id,
      :cancel_capacity_reservation_fleet_error)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Reserved Instance whose queued purchase was not deleted.
    #
    # @!attribute [rw] error
    #   The error.
    #   @return [Types::DeleteQueuedReservedInstancesError]
    #
    # @!attribute [rw] reserved_instances_id
    #   The ID of the Reserved Instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FailedQueuedPurchaseDeletion AWS API Documentation
    #
    class FailedQueuedPurchaseDeletion < Struct.new(
      :error,
      :reserved_instances_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Request to create a launch template for a Windows fast launch enabled
    # AMI.
    #
    # <note markdown="1"> Note - You can specify either the `LaunchTemplateName` or the
    # `LaunchTemplateId`, but not both.
    #
    #  </note>
    #
    # @!attribute [rw] launch_template_id
    #   Specify the ID of the launch template that the AMI should use for
    #   Windows fast launch.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   Specify the name of the launch template that the AMI should use for
    #   Windows fast launch.
    #   @return [String]
    #
    # @!attribute [rw] version
    #   Specify the version of the launch template that the AMI should use
    #   for Windows fast launch.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FastLaunchLaunchTemplateSpecificationRequest AWS API Documentation
    #
    class FastLaunchLaunchTemplateSpecificationRequest < Struct.new(
      :launch_template_id,
      :launch_template_name,
      :version)
      SENSITIVE = []
      include Aws::Structure
    end

    # Identifies the launch template that the AMI uses for Windows fast
    # launch.
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template that the AMI uses for Windows fast
    #   launch.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template that the AMI uses for Windows fast
    #   launch.
    #   @return [String]
    #
    # @!attribute [rw] version
    #   The version of the launch template that the AMI uses for Windows
    #   fast launch.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FastLaunchLaunchTemplateSpecificationResponse AWS API Documentation
    #
    class FastLaunchLaunchTemplateSpecificationResponse < Struct.new(
      :launch_template_id,
      :launch_template_name,
      :version)
      SENSITIVE = []
      include Aws::Structure
    end

    # Configuration settings for creating and managing pre-provisioned
    # snapshots for a Windows fast launch enabled AMI.
    #
    # @!attribute [rw] target_resource_count
    #   The number of pre-provisioned snapshots to keep on hand for a
    #   Windows fast launch enabled AMI.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FastLaunchSnapshotConfigurationRequest AWS API Documentation
    #
    class FastLaunchSnapshotConfigurationRequest < Struct.new(
      :target_resource_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # Configuration settings for creating and managing pre-provisioned
    # snapshots for a Windows fast launch enabled Windows AMI.
    #
    # @!attribute [rw] target_resource_count
    #   The number of pre-provisioned snapshots requested to keep on hand
    #   for a Windows fast launch enabled AMI.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FastLaunchSnapshotConfigurationResponse AWS API Documentation
    #
    class FastLaunchSnapshotConfigurationResponse < Struct.new(
      :target_resource_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the IAM SAML identity providers used for federated
    # authentication.
    #
    # @!attribute [rw] saml_provider_arn
    #   The Amazon Resource Name (ARN) of the IAM SAML identity provider.
    #   @return [String]
    #
    # @!attribute [rw] self_service_saml_provider_arn
    #   The Amazon Resource Name (ARN) of the IAM SAML identity provider for
    #   the self-service portal.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FederatedAuthentication AWS API Documentation
    #
    class FederatedAuthentication < Struct.new(
      :saml_provider_arn,
      :self_service_saml_provider_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # The IAM SAML identity provider used for federated authentication.
    #
    # @!attribute [rw] saml_provider_arn
    #   The Amazon Resource Name (ARN) of the IAM SAML identity provider.
    #   @return [String]
    #
    # @!attribute [rw] self_service_saml_provider_arn
    #   The Amazon Resource Name (ARN) of the IAM SAML identity provider for
    #   the self-service portal.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FederatedAuthenticationRequest AWS API Documentation
    #
    class FederatedAuthenticationRequest < Struct.new(
      :saml_provider_arn,
      :self_service_saml_provider_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # A filter name and value pair that is used to return a more specific
    # list of results from a describe operation. Filters can be used to
    # match a set of resources by specific criteria, such as tags,
    # attributes, or IDs.
    #
    # If you specify multiple filters, the filters are joined with an `AND`,
    # and the request returns only results that match all of the specified
    # filters.
    #
    # For more information, see [List and filter using the CLI and API][1]
    # in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Filtering.html#Filtering_Resources_CLI
    #
    # @!attribute [rw] name
    #   The name of the filter. Filter names are case-sensitive.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The filter values. Filter values are case-sensitive. If you specify
    #   multiple values for a filter, the values are joined with an `OR`,
    #   and the request returns all results that match any of the specified
    #   values.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Filter AWS API Documentation
    #
    class Filter < Struct.new(
      :name,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a port range.
    #
    # @!attribute [rw] from_port
    #   The first port in the range.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   The last port in the range.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FilterPortRange AWS API Documentation
    #
    class FilterPortRange < Struct.new(
      :from_port,
      :to_port)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a stateful rule.
    #
    # @!attribute [rw] rule_group_arn
    #   The ARN of the stateful rule group.
    #   @return [String]
    #
    # @!attribute [rw] sources
    #   The source IP addresses, in CIDR notation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] destinations
    #   The destination IP addresses, in CIDR notation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] source_ports
    #   The source ports.
    #   @return [Array<Types::PortRange>]
    #
    # @!attribute [rw] destination_ports
    #   The destination ports.
    #   @return [Array<Types::PortRange>]
    #
    # @!attribute [rw] protocol
    #   The protocol.
    #   @return [String]
    #
    # @!attribute [rw] rule_action
    #   The rule action. The possible values are `pass`, `drop`, and
    #   `alert`.
    #   @return [String]
    #
    # @!attribute [rw] direction
    #   The direction. The possible values are `FORWARD` and `ANY`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FirewallStatefulRule AWS API Documentation
    #
    class FirewallStatefulRule < Struct.new(
      :rule_group_arn,
      :sources,
      :destinations,
      :source_ports,
      :destination_ports,
      :protocol,
      :rule_action,
      :direction)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a stateless rule.
    #
    # @!attribute [rw] rule_group_arn
    #   The ARN of the stateless rule group.
    #   @return [String]
    #
    # @!attribute [rw] sources
    #   The source IP addresses, in CIDR notation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] destinations
    #   The destination IP addresses, in CIDR notation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] source_ports
    #   The source ports.
    #   @return [Array<Types::PortRange>]
    #
    # @!attribute [rw] destination_ports
    #   The destination ports.
    #   @return [Array<Types::PortRange>]
    #
    # @!attribute [rw] protocols
    #   The protocols.
    #   @return [Array<Integer>]
    #
    # @!attribute [rw] rule_action
    #   The rule action. The possible values are `pass`, `drop`, and
    #   `forward_to_site`.
    #   @return [String]
    #
    # @!attribute [rw] priority
    #   The rule priority.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FirewallStatelessRule AWS API Documentation
    #
    class FirewallStatelessRule < Struct.new(
      :rule_group_arn,
      :sources,
      :destinations,
      :source_ports,
      :destination_ports,
      :protocols,
      :rule_action,
      :priority)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device mapping, which defines the EBS volumes and
    # instance store volumes to attach to an instance at launch.
    #
    # To override a block device mapping specified in the launch template:
    #
    # * Specify the exact same `DeviceName` here as specified in the launch
    #   template.
    #
    # * Only specify the parameters you want to change.
    #
    # * Any parameters you don't specify here will keep their original
    #   launch template values.
    #
    # To add a new block device mapping:
    #
    # * Specify a `DeviceName` that doesn't exist in the launch template.
    #
    # * Specify all desired parameters here.
    #
    # @!attribute [rw] device_name
    #   The device name (for example, `/dev/sdh` or `xvdh`).
    #   @return [String]
    #
    # @!attribute [rw] virtual_name
    #   The virtual device name (`ephemeralN`). Instance store volumes are
    #   numbered starting from 0. An instance type with 2 available instance
    #   store volumes can specify mappings for `ephemeral0` and
    #   `ephemeral1`. The number of available instance store volumes depends
    #   on the instance type. After you connect to the instance, you must
    #   mount the volume.
    #
    #   NVMe instance store volumes are automatically enumerated and
    #   assigned a device name. Including them in your block device mapping
    #   has no effect.
    #
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] ebs
    #   Parameters used to automatically set up EBS volumes when the
    #   instance is launched.
    #   @return [Types::FleetEbsBlockDeviceRequest]
    #
    # @!attribute [rw] no_device
    #   To omit the device from the block device mapping, specify an empty
    #   string. When this property is specified, the device is removed from
    #   the block device mapping regardless of the assigned value.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetBlockDeviceMappingRequest AWS API Documentation
    #
    class FleetBlockDeviceMappingRequest < Struct.new(
      :device_name,
      :virtual_name,
      :ebs,
      :no_device)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a Capacity Reservation in a Capacity Reservation
    # Fleet.
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone in which the Capacity Reservation
    #   reserves capacity.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type for which the Capacity Reservation reserves
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] instance_platform
    #   The type of operating system for which the Capacity Reservation
    #   reserves capacity.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which the Capacity Reservation reserves
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] total_instance_count
    #   The total number of instances for which the Capacity Reservation
    #   reserves capacity.
    #   @return [Integer]
    #
    # @!attribute [rw] fulfilled_capacity
    #   The number of capacity units fulfilled by the Capacity Reservation.
    #   For more information, see [Total target capacity][1] in the *Amazon
    #   EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity
    #   @return [Float]
    #
    # @!attribute [rw] ebs_optimized
    #   Indicates whether the Capacity Reservation reserves capacity for
    #   EBS-optimized instance types.
    #   @return [Boolean]
    #
    # @!attribute [rw] create_date
    #   The date and time at which the Capacity Reservation was created.
    #   @return [Time]
    #
    # @!attribute [rw] weight
    #   The weight of the instance type in the Capacity Reservation Fleet.
    #   For more information, see [Instance type weight][1] in the *Amazon
    #   EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-weight
    #   @return [Float]
    #
    # @!attribute [rw] priority
    #   The priority of the instance type in the Capacity Reservation Fleet.
    #   For more information, see [Instance type priority][1] in the *Amazon
    #   EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetCapacityReservation AWS API Documentation
    #
    class FleetCapacityReservation < Struct.new(
      :capacity_reservation_id,
      :availability_zone_id,
      :instance_type,
      :instance_platform,
      :availability_zone,
      :total_instance_count,
      :fulfilled_capacity,
      :ebs_optimized,
      :create_date,
      :weight,
      :priority)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an EC2 Fleet.
    #
    # @!attribute [rw] activity_status
    #   The progress of the EC2 Fleet.
    #
    #   For fleets of type `instant`, the status is `fulfilled` after all
    #   requests are placed, regardless of whether target capacity is met
    #   (this is the only possible status for `instant` fleets).
    #
    #   For fleets of type `request` or `maintain`, the status is
    #   `pending_fulfillment` after all requests are placed, `fulfilled`
    #   when the fleet size meets or exceeds target capacity,
    #   `pending_termination` while instances are terminating when fleet
    #   size is decreased, and `error` if there's an error.
    #   @return [String]
    #
    # @!attribute [rw] create_time
    #   The creation date and time of the EC2 Fleet.
    #   @return [Time]
    #
    # @!attribute [rw] fleet_id
    #   The ID of the EC2 Fleet.
    #   @return [String]
    #
    # @!attribute [rw] fleet_state
    #   The state of the EC2 Fleet.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   Constraints: Maximum 64 ASCII characters
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] excess_capacity_termination_policy
    #   Indicates whether running instances should be terminated if the
    #   target capacity of the EC2 Fleet is decreased below the current size
    #   of the EC2 Fleet.
    #
    #   Supported only for fleets of type `maintain`.
    #   @return [String]
    #
    # @!attribute [rw] fulfilled_capacity
    #   The number of units fulfilled by this request compared to the set
    #   target capacity.
    #   @return [Float]
    #
    # @!attribute [rw] fulfilled_on_demand_capacity
    #   The number of units fulfilled by this request compared to the set
    #   target On-Demand capacity.
    #   @return [Float]
    #
    # @!attribute [rw] launch_template_configs
    #   The launch template and overrides.
    #   @return [Array<Types::FleetLaunchTemplateConfig>]
    #
    # @!attribute [rw] target_capacity_specification
    #   The number of units to request. You can choose to set the target
    #   capacity in terms of instances or a performance characteristic that
    #   is important to your application workload, such as vCPUs, memory, or
    #   I/O. If the request type is `maintain`, you can specify a target
    #   capacity of 0 and add capacity later.
    #   @return [Types::TargetCapacitySpecification]
    #
    # @!attribute [rw] terminate_instances_with_expiration
    #   Indicates whether running instances should be terminated when the
    #   EC2 Fleet expires.
    #   @return [Boolean]
    #
    # @!attribute [rw] type
    #   The type of request. Indicates whether the EC2 Fleet only `requests`
    #   the target capacity, or also attempts to `maintain` it. If you
    #   request a certain target capacity, EC2 Fleet only places the
    #   required requests; it does not attempt to replenish instances if
    #   capacity is diminished, and it does not submit requests in
    #   alternative capacity pools if capacity is unavailable. To maintain a
    #   certain target capacity, EC2 Fleet places the required requests to
    #   meet this target capacity. It also automatically replenishes any
    #   interrupted Spot Instances. Default: `maintain`.
    #   @return [String]
    #
    # @!attribute [rw] valid_from
    #   The start date and time of the request, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). The default is to start
    #   fulfilling the request immediately.
    #   @return [Time]
    #
    # @!attribute [rw] valid_until
    #   The end date and time of the request, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). At this point, no new instance
    #   requests are placed or able to fulfill the request. The default end
    #   date is 7 days from the current date.
    #   @return [Time]
    #
    # @!attribute [rw] replace_unhealthy_instances
    #   Indicates whether EC2 Fleet should replace unhealthy Spot Instances.
    #   Supported only for fleets of type `maintain`. For more information,
    #   see [EC2 Fleet health checks][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_options
    #   The configuration of Spot Instances in an EC2 Fleet.
    #   @return [Types::SpotOptions]
    #
    # @!attribute [rw] on_demand_options
    #   The allocation strategy of On-Demand Instances in an EC2 Fleet.
    #   @return [Types::OnDemandOptions]
    #
    # @!attribute [rw] tags
    #   The tags for an EC2 Fleet resource.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] errors
    #   Information about the instances that could not be launched by the
    #   fleet. Valid only when **Type** is set to `instant`.
    #   @return [Array<Types::DescribeFleetError>]
    #
    # @!attribute [rw] instances
    #   Information about the instances that were launched by the fleet.
    #   Valid only when **Type** is set to `instant`.
    #   @return [Array<Types::DescribeFleetsInstances>]
    #
    # @!attribute [rw] context
    #   Reserved.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetData AWS API Documentation
    #
    class FleetData < Struct.new(
      :activity_status,
      :create_time,
      :fleet_id,
      :fleet_state,
      :client_token,
      :excess_capacity_termination_policy,
      :fulfilled_capacity,
      :fulfilled_on_demand_capacity,
      :launch_template_configs,
      :target_capacity_specification,
      :terminate_instances_with_expiration,
      :type,
      :valid_from,
      :valid_until,
      :replace_unhealthy_instances,
      :spot_options,
      :on_demand_options,
      :tags,
      :errors,
      :instances,
      :context)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device for an EBS volume.
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the encryption state of an EBS volume is changed
    #   while being restored from a backing snapshot. The effect of setting
    #   the encryption state to `true` depends on the volume origin (new or
    #   from a snapshot), starting encryption state, ownership, and whether
    #   encryption by default is enabled. For more information, see [Amazon
    #   EBS encryption][1] in the *Amazon EBS User Guide*.
    #
    #   In no case can you remove encryption from an encrypted volume.
    #
    #   Encrypted volumes can only be attached to instances that support
    #   Amazon EBS encryption. For more information, see [Supported instance
    #   types][2].
    #
    #   This parameter is not returned by [DescribeImageAttribute][3].
    #
    #   For [CreateImage][4] and [RegisterImage][5], whether you can include
    #   this parameter, and the allowed values differ depending on the type
    #   of block device mapping you are creating.
    #
    #   * If you are creating a block device mapping for a **new (empty)
    #     volume**, you can include this parameter, and specify either
    #     `true` for an encrypted volume, or `false` for an unencrypted
    #     volume. If you omit this parameter, it defaults to `false`
    #     (unencrypted).
    #
    #   * If you are creating a block device mapping from an **existing
    #     encrypted or unencrypted snapshot**, you must omit this parameter.
    #     If you include this parameter, the request will fail, regardless
    #     of the value that you specify.
    #
    #   * If you are creating a block device mapping from an **existing
    #     unencrypted volume**, you can include this parameter, but you must
    #     specify `false`. If you specify `true`, the request will fail. In
    #     this case, we recommend that you omit the parameter.
    #
    #   * If you are creating a block device mapping from an **existing
    #     encrypted volume**, you can include this parameter, and specify
    #     either `true` or `false`. However, if you specify `false`, the
    #     parameter is ignored and the block device mapping is always
    #     encrypted. In this case, we recommend that you omit the parameter.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html
    #   [2]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption-requirements.html#ebs-encryption_supported_instances
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImageAttribute
    #   [4]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage
    #   [5]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RegisterImage
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the EBS volume is deleted on instance termination.
    #   For more information, see [Preserve data when an instance is
    #   terminated][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/preserving-volumes-on-termination.html
    #   @return [Boolean]
    #
    # @!attribute [rw] iops
    #   The number of I/O operations per second (IOPS). For `gp3`, `io1`,
    #   and `io2` volumes, this represents the number of IOPS that are
    #   provisioned for the volume. For `gp2` volumes, this represents the
    #   baseline performance of the volume and the rate at which the volume
    #   accumulates I/O credits for bursting.
    #
    #   The following are the supported values for each volume type:
    #
    #   * `gp3`: 3,000 - 80,000 IOPS
    #
    #   * `io1`: 100 - 64,000 IOPS
    #
    #   * `io2`: 100 - 256,000 IOPS
    #
    #   For `io2` volumes, you can achieve up to 256,000 IOPS on [instances
    #   built on the Nitro System][1]. On other instances, you can achieve
    #   performance up to 32,000 IOPS.
    #
    #   This parameter is required for `io1` and `io2` volumes. The default
    #   for `gp3` volumes is 3,000 IOPS.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances
    #   @return [Integer]
    #
    # @!attribute [rw] throughput
    #   The throughput that the volume supports, in MiB/s.
    #
    #   This parameter is valid only for `gp3` volumes.
    #
    #   Valid Range: Minimum value of 125. Maximum value of 2,000.
    #   @return [Integer]
    #
    # @!attribute [rw] kms_key_id
    #   Identifier (key ID, key alias, key ARN, or alias ARN) of the
    #   customer managed KMS key to use for EBS encryption.
    #
    #   This parameter is only supported on `BlockDeviceMapping` objects
    #   called by [CreateFleet][1], [RequestSpotInstances][2], and
    #   [RunInstances][3].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   The size of the volume, in GiBs. You must specify either a snapshot
    #   ID or a volume size. If you specify a snapshot, the default is the
    #   snapshot size. You can specify a volume size that is equal to or
    #   larger than the snapshot size.
    #
    #   The following are the supported sizes for each volume type:
    #
    #   * `gp2`: 1 - 16,384 GiB
    #
    #   * `gp3`: 1 - 65,536 GiB
    #
    #   * `io1`: 4 - 16,384 GiB
    #
    #   * `io2`: 4 - 65,536 GiB
    #
    #   * `st1` and `sc1`: 125 - 16,384 GiB
    #
    #   * `standard`: 1 - 1024 GiB
    #   @return [Integer]
    #
    # @!attribute [rw] volume_type
    #   The volume type. For more information, see [Amazon EBS volume
    #   types][1] in the *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetEbsBlockDeviceRequest AWS API Documentation
    #
    class FleetEbsBlockDeviceRequest < Struct.new(
      :encrypted,
      :delete_on_termination,
      :iops,
      :throughput,
      :kms_key_id,
      :snapshot_id,
      :volume_size,
      :volume_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a launch template and overrides.
    #
    # @!attribute [rw] launch_template_specification
    #   The launch template.
    #   @return [Types::FleetLaunchTemplateSpecification]
    #
    # @!attribute [rw] overrides
    #   Any parameters that you specify override the same parameters in the
    #   launch template.
    #   @return [Array<Types::FleetLaunchTemplateOverrides>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetLaunchTemplateConfig AWS API Documentation
    #
    class FleetLaunchTemplateConfig < Struct.new(
      :launch_template_specification,
      :overrides)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a launch template and overrides.
    #
    # @!attribute [rw] launch_template_specification
    #   The launch template to use. You must specify either the launch
    #   template ID or launch template name in the request.
    #   @return [Types::FleetLaunchTemplateSpecificationRequest]
    #
    # @!attribute [rw] overrides
    #   Any parameters that you specify override the same parameters in the
    #   launch template.
    #
    #   For fleets of type `request` and `maintain`, a maximum of 300 items
    #   is allowed across all launch templates.
    #   @return [Array<Types::FleetLaunchTemplateOverridesRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetLaunchTemplateConfigRequest AWS API Documentation
    #
    class FleetLaunchTemplateConfigRequest < Struct.new(
      :launch_template_specification,
      :overrides)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes overrides for a launch template.
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #
    #   `mac1.metal` is not supported as a launch template override.
    #
    #   <note markdown="1"> If you specify `InstanceType`, you can't specify
    #   `InstanceRequirements`.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] max_price
    #   The maximum price per unit hour that you are 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.
    #
    #   If you specify a maximum price, your instances will be interrupted
    #   more frequently than if you do not specify this parameter.
    #
    #    If you specify a maximum price, it must be more than USD $0.001.
    #   Specifying a value below USD $0.001 will result in an
    #   `InvalidParameterValue` error message.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which to launch the instances.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which to launch the instances.
    #   @return [String]
    #
    # @!attribute [rw] weighted_capacity
    #   The number of units provided by the specified instance type. These
    #   are the same units that you chose to set the target capacity in
    #   terms of instances, or a performance characteristic such as vCPUs,
    #   memory, or I/O.
    #
    #   If the target capacity divided by this value is not a whole number,
    #   Amazon EC2 rounds the number of instances to the next whole number.
    #   If this value is not specified, the default is 1.
    #
    #   <note markdown="1"> When specifying weights, the price used in the `lowest-price` and
    #   `price-capacity-optimized` allocation strategies is per *unit* hour
    #   (where the instance price is divided by the specified weight).
    #   However, if all the specified weights are above the requested
    #   `TargetCapacity`, resulting in only 1 instance being launched, the
    #   price used is per *instance* hour.
    #
    #    </note>
    #   @return [Float]
    #
    # @!attribute [rw] priority
    #   The priority for the launch template override. The highest priority
    #   is launched first.
    #
    #   If the On-Demand `AllocationStrategy` is set to `prioritized`, EC2
    #   Fleet uses priority to determine which launch template override to
    #   use first in fulfilling On-Demand capacity.
    #
    #   If the Spot `AllocationStrategy` is set to
    #   `capacity-optimized-prioritized`, EC2 Fleet uses priority on a
    #   best-effort basis to determine which launch template override to use
    #   in fulfilling Spot capacity, but optimizes for capacity first.
    #
    #   Valid values are whole numbers starting at `0`. The lower the
    #   number, the higher the priority. If no number is set, the override
    #   has the lowest priority. You can set the same priority for different
    #   launch template overrides.
    #   @return [Float]
    #
    # @!attribute [rw] placement
    #   The location where the instance launched, if applicable.
    #   @return [Types::PlacementResponse]
    #
    # @!attribute [rw] instance_requirements
    #   The attributes for the instance types. When you specify instance
    #   attributes, Amazon EC2 will identify instance types with those
    #   attributes.
    #
    #   <note markdown="1"> If you specify `InstanceRequirements`, you can't specify
    #   `InstanceType`.
    #
    #    </note>
    #   @return [Types::InstanceRequirements]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI in the format `ami-17characters00000`.
    #
    #   Alternatively, you can specify a Systems Manager parameter, using
    #   one of the following formats. The Systems Manager parameter will
    #   resolve to an AMI ID on launch.
    #
    #   To reference a public parameter:
    #
    #   * `resolve:ssm:public-parameter `
    #
    #   ^
    #
    #   To reference a parameter stored in the same account:
    #
    #   * `resolve:ssm:parameter-name `
    #
    #   * `resolve:ssm:parameter-name:version-number `
    #
    #   * `resolve:ssm:parameter-name:label `
    #
    #   To reference a parameter shared from another Amazon Web Services
    #   account:
    #
    #   * `resolve:ssm:parameter-ARN `
    #
    #   * `resolve:ssm:parameter-ARN:version-number `
    #
    #   * `resolve:ssm:parameter-ARN:label `
    #
    #   For more information, see [Use a Systems Manager parameter instead
    #   of an AMI ID][1] in the *Amazon EC2 User Guide*.
    #
    #   <note markdown="1"> This parameter is only available for fleets of type `instant`. For
    #   fleets of type `maintain` and `request`, you must specify the AMI ID
    #   in the launch template.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id
    #   @return [String]
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mappings, which define the EBS volumes and instance
    #   store volumes to attach to the instance at launch.
    #
    #   Supported only for fleets of type `instant`.
    #
    #   For more information, see [Block device mappings for volumes on
    #   Amazon EC2 instances][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html
    #   @return [Array<Types::BlockDeviceMappingResponse>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetLaunchTemplateOverrides AWS API Documentation
    #
    class FleetLaunchTemplateOverrides < Struct.new(
      :instance_type,
      :max_price,
      :subnet_id,
      :availability_zone,
      :weighted_capacity,
      :priority,
      :placement,
      :instance_requirements,
      :image_id,
      :block_device_mappings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes overrides for a launch template.
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #
    #   `mac1.metal` is not supported as a launch template override.
    #
    #   <note markdown="1"> If you specify `InstanceType`, you can't specify
    #   `InstanceRequirements`.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] max_price
    #   The maximum price per unit hour that you are 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.
    #
    #   If you specify a maximum price, your instances will be interrupted
    #   more frequently than if you do not specify this parameter.
    #
    #    If you specify a maximum price, it must be more than USD $0.001.
    #   Specifying a value below USD $0.001 will result in an
    #   `InvalidParameterValue` error message.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The IDs of the subnets in which to launch the instances. Separate
    #   multiple subnet IDs using commas (for example,
    #   `subnet-1234abcdeexample1, subnet-0987cdef6example2`). A request of
    #   type `instant` can have only one subnet ID.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which to launch the instances.
    #   @return [String]
    #
    # @!attribute [rw] weighted_capacity
    #   The number of units provided by the specified instance type. These
    #   are the same units that you chose to set the target capacity in
    #   terms of instances, or a performance characteristic such as vCPUs,
    #   memory, or I/O.
    #
    #   If the target capacity divided by this value is not a whole number,
    #   Amazon EC2 rounds the number of instances to the next whole number.
    #   If this value is not specified, the default is 1.
    #
    #   <note markdown="1"> When specifying weights, the price used in the `lowest-price` and
    #   `price-capacity-optimized` allocation strategies is per *unit* hour
    #   (where the instance price is divided by the specified weight).
    #   However, if all the specified weights are above the requested
    #   `TargetCapacity`, resulting in only 1 instance being launched, the
    #   price used is per *instance* hour.
    #
    #    </note>
    #   @return [Float]
    #
    # @!attribute [rw] priority
    #   The priority for the launch template override. The highest priority
    #   is launched first.
    #
    #   If the On-Demand `AllocationStrategy` is set to `prioritized`, EC2
    #   Fleet uses priority to determine which launch template override to
    #   use first in fulfilling On-Demand capacity.
    #
    #   If the Spot `AllocationStrategy` is set to
    #   `capacity-optimized-prioritized`, EC2 Fleet uses priority on a
    #   best-effort basis to determine which launch template override to use
    #   in fulfilling Spot capacity, but optimizes for capacity first.
    #
    #   Valid values are whole numbers starting at `0`. The lower the
    #   number, the higher the priority. If no number is set, the launch
    #   template override has the lowest priority. You can set the same
    #   priority for different launch template overrides.
    #   @return [Float]
    #
    # @!attribute [rw] placement
    #   The location where the instance launched, if applicable.
    #   @return [Types::Placement]
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mappings, which define the EBS volumes and instance
    #   store volumes to attach to the instance at launch.
    #
    #   Supported only for fleets of type `instant`.
    #
    #   For more information, see [Block device mappings for volumes on
    #   Amazon EC2 instances][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html
    #   @return [Array<Types::FleetBlockDeviceMappingRequest>]
    #
    # @!attribute [rw] instance_requirements
    #   The attributes for the instance types. When you specify instance
    #   attributes, Amazon EC2 will identify instance types with those
    #   attributes.
    #
    #   <note markdown="1"> If you specify `InstanceRequirements`, you can't specify
    #   `InstanceType`.
    #
    #    </note>
    #   @return [Types::InstanceRequirementsRequest]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI in the format `ami-17characters00000`.
    #
    #   Alternatively, you can specify a Systems Manager parameter, using
    #   one of the following formats. The Systems Manager parameter will
    #   resolve to an AMI ID on launch.
    #
    #   To reference a public parameter:
    #
    #   * `resolve:ssm:public-parameter `
    #
    #   ^
    #
    #   To reference a parameter stored in the same account:
    #
    #   * `resolve:ssm:parameter-name `
    #
    #   * `resolve:ssm:parameter-name:version-number `
    #
    #   * `resolve:ssm:parameter-name:label `
    #
    #   To reference a parameter shared from another Amazon Web Services
    #   account:
    #
    #   * `resolve:ssm:parameter-ARN `
    #
    #   * `resolve:ssm:parameter-ARN:version-number `
    #
    #   * `resolve:ssm:parameter-ARN:label `
    #
    #   For more information, see [Use a Systems Manager parameter instead
    #   of an AMI ID][1] in the *Amazon EC2 User Guide*.
    #
    #   <note markdown="1"> This parameter is only available for fleets of type `instant`. For
    #   fleets of type `maintain` and `request`, you must specify the AMI ID
    #   in the launch template.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetLaunchTemplateOverridesRequest AWS API Documentation
    #
    class FleetLaunchTemplateOverridesRequest < Struct.new(
      :instance_type,
      :max_price,
      :subnet_id,
      :availability_zone,
      :weighted_capacity,
      :priority,
      :placement,
      :block_device_mappings,
      :instance_requirements,
      :image_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Amazon EC2 launch template that can be used by a Spot Fleet to
    # configure Amazon EC2 instances. You must specify either the ID or name
    # of the launch template in the request, but not both.
    #
    # For information about launch templates, see [Launch an instance from a
    # launch template][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #
    #   You must specify the `LaunchTemplateId` or the `LaunchTemplateName`,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #
    #   You must specify the `LaunchTemplateName` or the `LaunchTemplateId`,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] version
    #   The launch template version number, `$Latest`, or `$Default`. You
    #   must specify a value, otherwise the request fails.
    #
    #   If the value is `$Latest`, Amazon EC2 uses the latest version of the
    #   launch template.
    #
    #   If the value is `$Default`, Amazon EC2 uses the default version of
    #   the launch template.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetLaunchTemplateSpecification AWS API Documentation
    #
    class FleetLaunchTemplateSpecification < Struct.new(
      :launch_template_id,
      :launch_template_name,
      :version)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Amazon EC2 launch template that can be used by an EC2 Fleet to
    # configure Amazon EC2 instances. You must specify either the ID or name
    # of the launch template in the request, but not both.
    #
    # For information about launch templates, see [Launch an instance from a
    # launch template][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #
    #   You must specify the `LaunchTemplateId` or the `LaunchTemplateName`,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #
    #   You must specify the `LaunchTemplateName` or the `LaunchTemplateId`,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] version
    #   The launch template version number, `$Latest`, or `$Default`. You
    #   must specify a value, otherwise the request fails.
    #
    #   If the value is `$Latest`, Amazon EC2 uses the latest version of the
    #   launch template.
    #
    #   If the value is `$Default`, Amazon EC2 uses the default version of
    #   the launch template.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetLaunchTemplateSpecificationRequest AWS API Documentation
    #
    class FleetLaunchTemplateSpecificationRequest < Struct.new(
      :launch_template_id,
      :launch_template_name,
      :version)
      SENSITIVE = []
      include Aws::Structure
    end

    # The strategy to use when Amazon EC2 emits a signal that your Spot
    # Instance is at an elevated risk of being interrupted.
    #
    # @!attribute [rw] replacement_strategy
    #   The replacement strategy to use. Only available for fleets of type
    #   `maintain`.
    #
    #   `launch` - EC2 Fleet launches a new replacement Spot Instance when a
    #   rebalance notification is emitted for an existing Spot Instance in
    #   the fleet. EC2 Fleet does not terminate the instances that receive a
    #   rebalance notification. You can terminate the old instances, or you
    #   can leave them running. You are charged for all instances while they
    #   are running.
    #
    #   `launch-before-terminate` - EC2 Fleet launches a new replacement
    #   Spot Instance when a rebalance notification is emitted for an
    #   existing Spot Instance in the fleet, and then, after a delay that
    #   you specify (in `TerminationDelay`), terminates the instances that
    #   received a rebalance notification.
    #   @return [String]
    #
    # @!attribute [rw] termination_delay
    #   The amount of time (in seconds) that Amazon EC2 waits before
    #   terminating the old Spot Instance after launching a new replacement
    #   Spot Instance.
    #
    #   Required when `ReplacementStrategy` is set to
    #   `launch-before-terminate`.
    #
    #   Not valid when `ReplacementStrategy` is set to `launch`.
    #
    #   Valid values: Minimum value of `120` seconds. Maximum value of
    #   `7200` seconds.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetSpotCapacityRebalance AWS API Documentation
    #
    class FleetSpotCapacityRebalance < Struct.new(
      :replacement_strategy,
      :termination_delay)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Spot Instance replacement strategy to use when Amazon EC2 emits a
    # rebalance notification signal that your Spot Instance is at an
    # elevated risk of being interrupted. For more information, see
    # [Capacity rebalancing][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-capacity-rebalance.html
    #
    # @!attribute [rw] replacement_strategy
    #   The replacement strategy to use. Only available for fleets of type
    #   `maintain`.
    #
    #   `launch` - EC2 Fleet launches a replacement Spot Instance when a
    #   rebalance notification is emitted for an existing Spot Instance in
    #   the fleet. EC2 Fleet does not terminate the instances that receive a
    #   rebalance notification. You can terminate the old instances, or you
    #   can leave them running. You are charged for all instances while they
    #   are running.
    #
    #   `launch-before-terminate` - EC2 Fleet launches a replacement Spot
    #   Instance when a rebalance notification is emitted for an existing
    #   Spot Instance in the fleet, and then, after a delay that you specify
    #   (in `TerminationDelay`), terminates the instances that received a
    #   rebalance notification.
    #   @return [String]
    #
    # @!attribute [rw] termination_delay
    #   The amount of time (in seconds) that Amazon EC2 waits before
    #   terminating the old Spot Instance after launching a new replacement
    #   Spot Instance.
    #
    #   Required when `ReplacementStrategy` is set to
    #   `launch-before-terminate`.
    #
    #   Not valid when `ReplacementStrategy` is set to `launch`.
    #
    #   Valid values: Minimum value of `120` seconds. Maximum value of
    #   `7200` seconds.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetSpotCapacityRebalanceRequest AWS API Documentation
    #
    class FleetSpotCapacityRebalanceRequest < Struct.new(
      :replacement_strategy,
      :termination_delay)
      SENSITIVE = []
      include Aws::Structure
    end

    # The strategies for managing your Spot Instances that are at an
    # elevated risk of being interrupted.
    #
    # @!attribute [rw] capacity_rebalance
    #   The strategy to use when Amazon EC2 emits a signal that your Spot
    #   Instance is at an elevated risk of being interrupted.
    #   @return [Types::FleetSpotCapacityRebalance]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetSpotMaintenanceStrategies AWS API Documentation
    #
    class FleetSpotMaintenanceStrategies < Struct.new(
      :capacity_rebalance)
      SENSITIVE = []
      include Aws::Structure
    end

    # The strategies for managing your Spot Instances that are at an
    # elevated risk of being interrupted.
    #
    # @!attribute [rw] capacity_rebalance
    #   The strategy to use when Amazon EC2 emits a signal that your Spot
    #   Instance is at an elevated risk of being interrupted.
    #   @return [Types::FleetSpotCapacityRebalanceRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FleetSpotMaintenanceStrategiesRequest AWS API Documentation
    #
    class FleetSpotMaintenanceStrategiesRequest < Struct.new(
      :capacity_rebalance)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a flow log.
    #
    # @!attribute [rw] creation_time
    #   The date and time the flow log was created.
    #   @return [Time]
    #
    # @!attribute [rw] deliver_logs_error_message
    #   Information about the error that occurred. `Rate limited` indicates
    #   that CloudWatch Logs throttling has been applied for one or more
    #   network interfaces, or that you've reached the limit on the number
    #   of log groups that you can create. `Access error` indicates that the
    #   IAM role associated with the flow log does not have sufficient
    #   permissions to publish to CloudWatch Logs. `Unknown error` indicates
    #   an internal error.
    #   @return [String]
    #
    # @!attribute [rw] deliver_logs_permission_arn
    #   The ARN of the IAM role allows the service to publish logs to
    #   CloudWatch Logs.
    #   @return [String]
    #
    # @!attribute [rw] deliver_cross_account_role
    #   The ARN of the IAM role that allows the service to publish flow logs
    #   across accounts.
    #   @return [String]
    #
    # @!attribute [rw] deliver_logs_status
    #   The status of the logs delivery (`SUCCESS` \| `FAILED`).
    #   @return [String]
    #
    # @!attribute [rw] flow_log_id
    #   The ID of the flow log.
    #   @return [String]
    #
    # @!attribute [rw] flow_log_status
    #   The status of the flow log (`ACTIVE`).
    #   @return [String]
    #
    # @!attribute [rw] log_group_name
    #   The name of the flow log group.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource being monitored.
    #   @return [String]
    #
    # @!attribute [rw] traffic_type
    #   The type of traffic captured for the flow log.
    #   @return [String]
    #
    # @!attribute [rw] log_destination_type
    #   The type of destination for the flow log data.
    #   @return [String]
    #
    # @!attribute [rw] log_destination
    #   The Amazon Resource Name (ARN) of the destination for the flow log
    #   data.
    #   @return [String]
    #
    # @!attribute [rw] log_format
    #   The format of the flow log record.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags for the flow log.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] max_aggregation_interval
    #   The maximum interval of time, in seconds, during which a flow of
    #   packets is captured and aggregated into a flow log record.
    #
    #   When a network interface is attached to a [Nitro-based instance][1],
    #   the aggregation interval is always 60 seconds (1 minute) or less,
    #   regardless of the specified value.
    #
    #   Valid Values: `60` \| `600`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html
    #   @return [Integer]
    #
    # @!attribute [rw] destination_options
    #   The destination options.
    #   @return [Types::DestinationOptionsResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FlowLog AWS API Documentation
    #
    class FlowLog < Struct.new(
      :creation_time,
      :deliver_logs_error_message,
      :deliver_logs_permission_arn,
      :deliver_cross_account_role,
      :deliver_logs_status,
      :flow_log_id,
      :flow_log_status,
      :log_group_name,
      :resource_id,
      :traffic_type,
      :log_destination_type,
      :log_destination,
      :log_format,
      :tags,
      :max_aggregation_interval,
      :destination_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the FPGA accelerator for the instance type.
    #
    # @!attribute [rw] name
    #   The name of the FPGA accelerator.
    #   @return [String]
    #
    # @!attribute [rw] manufacturer
    #   The manufacturer of the FPGA accelerator.
    #   @return [String]
    #
    # @!attribute [rw] count
    #   The count of FPGA accelerators for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] memory_info
    #   Describes the memory for the FPGA accelerator for the instance type.
    #   @return [Types::FpgaDeviceMemoryInfo]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FpgaDeviceInfo AWS API Documentation
    #
    class FpgaDeviceInfo < Struct.new(
      :name,
      :manufacturer,
      :count,
      :memory_info)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the memory for the FPGA accelerator for the instance type.
    #
    # @!attribute [rw] size_in_mi_b
    #   The size of the memory available to the FPGA accelerator, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FpgaDeviceMemoryInfo AWS API Documentation
    #
    class FpgaDeviceMemoryInfo < Struct.new(
      :size_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Amazon FPGA image (AFI).
    #
    # @!attribute [rw] fpga_image_id
    #   The FPGA image identifier (AFI ID).
    #   @return [String]
    #
    # @!attribute [rw] fpga_image_global_id
    #   The global FPGA image identifier (AGFI ID).
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the AFI.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the AFI.
    #   @return [String]
    #
    # @!attribute [rw] shell_version
    #   The version of the Amazon Web Services Shell that was used to create
    #   the bitstream.
    #   @return [String]
    #
    # @!attribute [rw] pci_id
    #   Information about the PCI bus.
    #   @return [Types::PciId]
    #
    # @!attribute [rw] state
    #   Information about the state of the AFI.
    #   @return [Types::FpgaImageState]
    #
    # @!attribute [rw] create_time
    #   The date and time the AFI was created.
    #   @return [Time]
    #
    # @!attribute [rw] update_time
    #   The time of the most recent update to the AFI.
    #   @return [Time]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the AFI.
    #   @return [String]
    #
    # @!attribute [rw] owner_alias
    #   The alias of the AFI owner. Possible values include `self`,
    #   `amazon`, and `aws-marketplace`.
    #   @return [String]
    #
    # @!attribute [rw] product_codes
    #   The product codes for the AFI.
    #   @return [Array<Types::ProductCode>]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the AFI.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] public
    #   Indicates whether the AFI is public.
    #   @return [Boolean]
    #
    # @!attribute [rw] data_retention_support
    #   Indicates whether data retention support is enabled for the AFI.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_types
    #   The instance types supported by the AFI.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FpgaImage AWS API Documentation
    #
    class FpgaImage < Struct.new(
      :fpga_image_id,
      :fpga_image_global_id,
      :name,
      :description,
      :shell_version,
      :pci_id,
      :state,
      :create_time,
      :update_time,
      :owner_id,
      :owner_alias,
      :product_codes,
      :tags,
      :public,
      :data_retention_support,
      :instance_types)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Amazon FPGA image (AFI) attribute.
    #
    # @!attribute [rw] fpga_image_id
    #   The ID of the AFI.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the AFI.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the AFI.
    #   @return [String]
    #
    # @!attribute [rw] load_permissions
    #   The load permissions.
    #   @return [Array<Types::LoadPermission>]
    #
    # @!attribute [rw] product_codes
    #   The product codes.
    #   @return [Array<Types::ProductCode>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FpgaImageAttribute AWS API Documentation
    #
    class FpgaImageAttribute < Struct.new(
      :fpga_image_id,
      :name,
      :description,
      :load_permissions,
      :product_codes)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of the bitstream generation process for an Amazon
    # FPGA image (AFI).
    #
    # @!attribute [rw] code
    #   The state. The following are the possible values:
    #
    #   * `pending` - AFI bitstream generation is in progress.
    #
    #   * `available` - The AFI is available for use.
    #
    #   * `failed` - AFI bitstream generation failed.
    #
    #   * `unavailable` - The AFI is no longer available for use.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   If the state is `failed`, this is the error message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FpgaImageState AWS API Documentation
    #
    class FpgaImageState < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the FPGAs for the instance type.
    #
    # @!attribute [rw] fpgas
    #   Describes the FPGAs for the instance type.
    #   @return [Array<Types::FpgaDeviceInfo>]
    #
    # @!attribute [rw] total_fpga_memory_in_mi_b
    #   The total memory of all FPGA accelerators for the instance type.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/FpgaInfo AWS API Documentation
    #
    class FpgaInfo < Struct.new(
      :fpgas,
      :total_fpga_memory_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_id
    #   The ID of the VPN connection for which to retrieve the active tunnel
    #   status.
    #   @return [String]
    #
    # @!attribute [rw] vpn_tunnel_outside_ip_address
    #   The external IP address of the VPN tunnel for which to retrieve the
    #   active status.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the action,
    #   without actually making the request.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetActiveVpnTunnelStatusRequest AWS API Documentation
    #
    class GetActiveVpnTunnelStatusRequest < Struct.new(
      :vpn_connection_id,
      :vpn_tunnel_outside_ip_address,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] active_vpn_tunnel_status
    #   Information about the current security configuration of the VPN
    #   tunnel.
    #   @return [Types::ActiveVpnTunnelStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetActiveVpnTunnelStatusResult AWS API Documentation
    #
    class GetActiveVpnTunnelStatusResult < Struct.new(
      :active_vpn_tunnel_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetAllowedImagesSettingsRequest AWS API Documentation
    #
    class GetAllowedImagesSettingsRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] state
    #   The current state of the Allowed AMIs setting at the account level
    #   in the specified Amazon Web Services Region.
    #
    #   Possible values:
    #
    #   * `disabled`: All AMIs are allowed.
    #
    #   * `audit-mode`: All AMIs are allowed, but the `ImageAllowed` field
    #     is set to `true` if the AMI would be allowed with the current list
    #     of criteria if allowed AMIs was enabled.
    #
    #   * `enabled`: Only AMIs matching the image criteria are discoverable
    #     and available for use.
    #   @return [String]
    #
    # @!attribute [rw] image_criteria
    #   The list of criteria for images that are discoverable and usable in
    #   the account in the specified Amazon Web Services Region.
    #   @return [Array<Types::ImageCriterion>]
    #
    # @!attribute [rw] managed_by
    #   The entity that manages the Allowed AMIs settings. Possible values
    #   include:
    #
    #   * `account` - The Allowed AMIs settings is managed by the account.
    #
    #   * `declarative-policy` - The Allowed AMIs settings is managed by a
    #     declarative policy and can't be modified by the account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetAllowedImagesSettingsResult AWS API Documentation
    #
    class GetAllowedImagesSettingsResult < Struct.new(
      :state,
      :image_criteria,
      :managed_by)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] certificate_arn
    #   The ARN of the ACM certificate for which to view the associated IAM
    #   roles, encryption keys, and Amazon S3 object information.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetAssociatedEnclaveCertificateIamRolesRequest AWS API Documentation
    #
    class GetAssociatedEnclaveCertificateIamRolesRequest < Struct.new(
      :certificate_arn,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] associated_roles
    #   Information about the associated IAM roles.
    #   @return [Array<Types::AssociatedRole>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetAssociatedEnclaveCertificateIamRolesResult AWS API Documentation
    #
    class GetAssociatedEnclaveCertificateIamRolesResult < Struct.new(
      :associated_roles)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] pool_id
    #   The ID of the IPv6 address pool.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetAssociatedIpv6PoolCidrsRequest AWS API Documentation
    #
    class GetAssociatedIpv6PoolCidrsRequest < Struct.new(
      :pool_id,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipv_6_cidr_associations
    #   Information about the IPv6 CIDR block associations.
    #   @return [Array<Types::Ipv6CidrAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetAssociatedIpv6PoolCidrsResult AWS API Documentation
    #
    class GetAssociatedIpv6PoolCidrsResult < Struct.new(
      :ipv_6_cidr_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] data_queries
    #   A list of network performance data queries.
    #   @return [Array<Types::DataQuery>]
    #
    # @!attribute [rw] start_time
    #   The starting time for the performance data request. The starting
    #   time must be formatted as `yyyy-mm-ddThh:mm:ss`. For example,
    #   `2022-06-10T12:00:00.000Z`.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The ending time for the performance data request. The end time must
    #   be formatted as `yyyy-mm-ddThh:mm:ss`. For example,
    #   `2022-06-12T12:00:00.000Z`.
    #   @return [Time]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetAwsNetworkPerformanceDataRequest AWS API Documentation
    #
    class GetAwsNetworkPerformanceDataRequest < Struct.new(
      :data_queries,
      :start_time,
      :end_time,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] data_responses
    #   The list of data responses.
    #   @return [Array<Types::DataResponse>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetAwsNetworkPerformanceDataResult AWS API Documentation
    #
    class GetAwsNetworkPerformanceDataResult < Struct.new(
      :data_responses,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetCapacityReservationUsageRequest AWS API Documentation
    #
    class GetCapacityReservationUsageRequest < Struct.new(
      :capacity_reservation_id,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The type of instance for which the Capacity Reservation reserves
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] total_instance_count
    #   The number of instances for which the Capacity Reservation reserves
    #   capacity.
    #   @return [Integer]
    #
    # @!attribute [rw] available_instance_count
    #   The remaining capacity. Indicates the number of instances that can
    #   be launched in the Capacity Reservation.
    #   @return [Integer]
    #
    # @!attribute [rw] state
    #   The current state of the Capacity Reservation. A Capacity
    #   Reservation can be in one of the following states:
    #
    #   * `active` - The capacity is available for use.
    #
    #   * `expired` - The Capacity Reservation expired automatically at the
    #     date and time specified in your reservation request. The reserved
    #     capacity is no longer available for your use.
    #
    #   * `cancelled` - The Capacity Reservation was canceled. The reserved
    #     capacity is no longer available for your use.
    #
    #   * `pending` - The Capacity Reservation request was successful but
    #     the capacity provisioning is still pending.
    #
    #   * `failed` - The Capacity Reservation request has failed. A request
    #     can fail due to request parameters that are not valid, capacity
    #     constraints, or instance limit constraints. You can view a failed
    #     request for 60 minutes.
    #
    #   * `scheduled` - (*Future-dated Capacity Reservations*) The
    #     future-dated Capacity Reservation request was approved and the
    #     Capacity Reservation is scheduled for delivery on the requested
    #     start date.
    #
    #   * `payment-pending` - (*Capacity Blocks*) The upfront payment has
    #     not been processed yet.
    #
    #   * `payment-failed` - (*Capacity Blocks*) The upfront payment was not
    #     processed in the 12-hour time frame. Your Capacity Block was
    #     released.
    #
    #   * `assessing` - (*Future-dated Capacity Reservations*) Amazon EC2 is
    #     assessing your request for a future-dated Capacity Reservation.
    #
    #   * `delayed` - (*Future-dated Capacity Reservations*) Amazon EC2
    #     encountered a delay in provisioning the requested future-dated
    #     Capacity Reservation. Amazon EC2 is unable to deliver the
    #     requested capacity by the requested start date and time.
    #
    #   * `unsupported` - (*Future-dated Capacity Reservations*) Amazon EC2
    #     can't support the future-dated Capacity Reservation request due
    #     to capacity constraints. You can view unsupported requests for 30
    #     days. The Capacity Reservation will not be delivered.
    #   @return [String]
    #
    # @!attribute [rw] instance_usages
    #   Information about the Capacity Reservation usage.
    #   @return [Array<Types::InstanceUsage>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetCapacityReservationUsageResult AWS API Documentation
    #
    class GetCapacityReservationUsageResult < Struct.new(
      :next_token,
      :capacity_reservation_id,
      :instance_type,
      :total_instance_count,
      :available_instance_count,
      :state,
      :instance_usages)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] pool_id
    #   The ID of the address pool.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `coip-address-usage.allocation-id` - The allocation ID of the
    #     address.
    #
    #   * `coip-address-usage.aws-account-id` - The ID of the Amazon Web
    #     Services account that is using the customer-owned IP address.
    #
    #   * `coip-address-usage.aws-service` - The Amazon Web Services service
    #     that is using the customer-owned IP address.
    #
    #   * `coip-address-usage.co-ip` - The customer-owned IP address.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetCoipPoolUsageRequest AWS API Documentation
    #
    class GetCoipPoolUsageRequest < Struct.new(
      :pool_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] coip_pool_id
    #   The ID of the customer-owned address pool.
    #   @return [String]
    #
    # @!attribute [rw] coip_address_usages
    #   Information about the address usage.
    #   @return [Array<Types::CoipAddressUsage>]
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetCoipPoolUsageResult AWS API Documentation
    #
    class GetCoipPoolUsageResult < Struct.new(
      :coip_pool_id,
      :coip_address_usages,
      :local_gateway_route_table_id,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] latest
    #   When enabled, retrieves the latest console output for the instance.
    #
    #   Default: disabled (`false`)
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutputRequest AWS API Documentation
    #
    class GetConsoleOutputRequest < Struct.new(
      :instance_id,
      :latest,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] timestamp
    #   The time at which the output was last updated.
    #   @return [Time]
    #
    # @!attribute [rw] output
    #   The console output, base64-encoded. If you are using a command line
    #   tool, the tool decodes the output for you.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleOutputResult AWS API Documentation
    #
    class GetConsoleOutputResult < Struct.new(
      :instance_id,
      :timestamp,
      :output)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] wake_up
    #   When set to `true`, acts as keystroke input and wakes up an instance
    #   that's in standby or "sleep" mode.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshotRequest AWS API Documentation
    #
    class GetConsoleScreenshotRequest < Struct.new(
      :dry_run,
      :instance_id,
      :wake_up)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_data
    #   The data that comprises the image.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetConsoleScreenshotResult AWS API Documentation
    #
    class GetConsoleScreenshotResult < Struct.new(
      :image_data,
      :instance_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] report_id
    #   The ID of the report.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetDeclarativePoliciesReportSummaryRequest AWS API Documentation
    #
    class GetDeclarativePoliciesReportSummaryRequest < Struct.new(
      :dry_run,
      :report_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] report_id
    #   The ID of the report.
    #   @return [String]
    #
    # @!attribute [rw] s3_bucket
    #   The name of the Amazon S3 bucket where the report is located.
    #   @return [String]
    #
    # @!attribute [rw] s3_prefix
    #   The prefix for your S3 object.
    #   @return [String]
    #
    # @!attribute [rw] target_id
    #   The root ID, organizational unit ID, or account ID.
    #
    #   Format:
    #
    #   * For root: `r-ab12`
    #
    #   * For OU: `ou-ab12-cdef1234`
    #
    #   * For account: `123456789012`
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The time when the report generation started.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The time when the report generation ended.
    #   @return [Time]
    #
    # @!attribute [rw] number_of_accounts
    #   The total number of accounts associated with the specified
    #   `targetId`.
    #   @return [Integer]
    #
    # @!attribute [rw] number_of_failed_accounts
    #   The number of accounts where attributes could not be retrieved in
    #   any Region.
    #   @return [Integer]
    #
    # @!attribute [rw] attribute_summaries
    #   The attributes described in the report.
    #   @return [Array<Types::AttributeSummary>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetDeclarativePoliciesReportSummaryResult AWS API Documentation
    #
    class GetDeclarativePoliciesReportSummaryResult < Struct.new(
      :report_id,
      :s3_bucket,
      :s3_prefix,
      :target_id,
      :start_time,
      :end_time,
      :number_of_accounts,
      :number_of_failed_accounts,
      :attribute_summaries)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_family
    #   The instance family.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetDefaultCreditSpecificationRequest AWS API Documentation
    #
    class GetDefaultCreditSpecificationRequest < Struct.new(
      :dry_run,
      :instance_family)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_family_credit_specification
    #   The default credit option for CPU usage of the instance family.
    #   @return [Types::InstanceFamilyCreditSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetDefaultCreditSpecificationResult AWS API Documentation
    #
    class GetDefaultCreditSpecificationResult < Struct.new(
      :instance_family_credit_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsDefaultKmsKeyIdRequest AWS API Documentation
    #
    class GetEbsDefaultKmsKeyIdRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] kms_key_id
    #   The Amazon Resource Name (ARN) of the default KMS key for encryption
    #   by default.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsDefaultKmsKeyIdResult AWS API Documentation
    #
    class GetEbsDefaultKmsKeyIdResult < Struct.new(
      :kms_key_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsEncryptionByDefaultRequest AWS API Documentation
    #
    class GetEbsEncryptionByDefaultRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ebs_encryption_by_default
    #   Indicates whether encryption by default is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] sse_type
    #   Reserved for future use.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetEbsEncryptionByDefaultResult AWS API Documentation
    #
    class GetEbsEncryptionByDefaultResult < Struct.new(
      :ebs_encryption_by_default,
      :sse_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] flow_log_id
    #   The ID of the flow log.
    #   @return [String]
    #
    # @!attribute [rw] config_delivery_s3_destination_arn
    #   To store the CloudFormation template in Amazon S3, specify the
    #   location in Amazon S3.
    #   @return [String]
    #
    # @!attribute [rw] integrate_services
    #   Information about the service integration.
    #   @return [Types::IntegrateServices]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetFlowLogsIntegrationTemplateRequest AWS API Documentation
    #
    class GetFlowLogsIntegrationTemplateRequest < Struct.new(
      :dry_run,
      :flow_log_id,
      :config_delivery_s3_destination_arn,
      :integrate_services)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] result
    #   The generated CloudFormation template.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetFlowLogsIntegrationTemplateResult AWS API Documentation
    #
    class GetFlowLogsIntegrationTemplateResult < Struct.new(
      :result)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation. If you specify a Capacity
    #   Reservation that is shared with you, the operation returns only
    #   Capacity Reservation groups that you own.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetGroupsForCapacityReservationRequest AWS API Documentation
    #
    class GetGroupsForCapacityReservationRequest < Struct.new(
      :capacity_reservation_id,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_groups
    #   Information about the resource groups to which the Capacity
    #   Reservation has been added.
    #   @return [Array<Types::CapacityReservationGroup>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetGroupsForCapacityReservationResult AWS API Documentation
    #
    class GetGroupsForCapacityReservationResult < Struct.new(
      :next_token,
      :capacity_reservation_groups)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] host_id_set
    #   The IDs of the Dedicated Hosts with which the reservation is
    #   associated.
    #   @return [Array<String>]
    #
    # @!attribute [rw] offering_id
    #   The offering ID of the reservation.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreviewRequest AWS API Documentation
    #
    class GetHostReservationPurchasePreviewRequest < Struct.new(
      :host_id_set,
      :offering_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] currency_code
    #   The currency in which the `totalUpfrontPrice` and `totalHourlyPrice`
    #   amounts are specified. At this time, the only supported currency is
    #   `USD`.
    #   @return [String]
    #
    # @!attribute [rw] purchase
    #   The purchase information of the Dedicated Host reservation and the
    #   Dedicated Hosts associated with it.
    #   @return [Array<Types::Purchase>]
    #
    # @!attribute [rw] total_hourly_price
    #   The potential total hourly price of the reservation per hour.
    #   @return [String]
    #
    # @!attribute [rw] total_upfront_price
    #   The potential total upfront price. This is billed immediately.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetHostReservationPurchasePreviewResult AWS API Documentation
    #
    class GetHostReservationPurchasePreviewResult < Struct.new(
      :currency_code,
      :purchase,
      :total_hourly_price,
      :total_upfront_price)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetImageBlockPublicAccessStateRequest AWS API Documentation
    #
    class GetImageBlockPublicAccessStateRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_block_public_access_state
    #   The current state of block public access for AMIs at the account
    #   level in the specified Amazon Web Services Region.
    #
    #   Possible values:
    #
    #   * `block-new-sharing` - Any attempt to publicly share your AMIs in
    #     the specified Region is blocked.
    #
    #   * `unblocked` - Your AMIs in the specified Region can be publicly
    #     shared.
    #   @return [String]
    #
    # @!attribute [rw] managed_by
    #   The entity that manages the state for block public access for AMIs.
    #   Possible values include:
    #
    #   * `account` - The state is managed by the account.
    #
    #   * `declarative-policy` - The state is managed by a declarative
    #     policy and can't be modified by the account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetImageBlockPublicAccessStateResult AWS API Documentation
    #
    class GetImageBlockPublicAccessStateResult < Struct.new(
      :image_block_public_access_state,
      :managed_by)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetInstanceMetadataDefaultsRequest AWS API Documentation
    #
    class GetInstanceMetadataDefaultsRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] account_level
    #   The account-level default IMDS settings.
    #   @return [Types::InstanceMetadataDefaultsResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetInstanceMetadataDefaultsResult AWS API Documentation
    #
    class GetInstanceMetadataDefaultsResult < Struct.new(
      :account_level)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance for which to get the public endorsement key.
    #   @return [String]
    #
    # @!attribute [rw] key_type
    #   The required public endorsement key type.
    #   @return [String]
    #
    # @!attribute [rw] key_format
    #   The required public endorsement key format. Specify `der` for a
    #   DER-encoded public key that is compatible with OpenSSL. Specify
    #   `tpmt` for a TPM 2.0 format that is compatible with tpm2-tools. The
    #   returned key is base64 encoded.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Specify this parameter to verify whether the request will succeed,
    #   without actually making the request. If the request will succeed,
    #   the response is `DryRunOperation`. Otherwise, the response is
    #   `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetInstanceTpmEkPubRequest AWS API Documentation
    #
    class GetInstanceTpmEkPubRequest < Struct.new(
      :instance_id,
      :key_type,
      :key_format,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] key_type
    #   The public endorsement key type.
    #   @return [String]
    #
    # @!attribute [rw] key_format
    #   The public endorsement key format.
    #   @return [String]
    #
    # @!attribute [rw] key_value
    #   The public endorsement key material.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetInstanceTpmEkPubResult AWS API Documentation
    #
    class GetInstanceTpmEkPubResult < Struct.new(
      :instance_id,
      :key_type,
      :key_format,
      :key_value)
      SENSITIVE = [:key_value]
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] architecture_types
    #   The processor architecture type.
    #   @return [Array<String>]
    #
    # @!attribute [rw] virtualization_types
    #   The virtualization type.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_requirements
    #   The attributes required for the instance types.
    #   @return [Types::InstanceRequirementsRequest]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] context
    #   Reserved.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetInstanceTypesFromInstanceRequirementsRequest AWS API Documentation
    #
    class GetInstanceTypesFromInstanceRequirementsRequest < Struct.new(
      :dry_run,
      :architecture_types,
      :virtualization_types,
      :instance_requirements,
      :max_results,
      :next_token,
      :context)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_types
    #   The instance types with the specified instance attributes.
    #   @return [Array<Types::InstanceTypeInfoFromInstanceRequirements>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetInstanceTypesFromInstanceRequirementsResult AWS API Documentation
    #
    class GetInstanceTypesFromInstanceRequirementsResult < Struct.new(
      :instance_types,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance from which to retrieve the UEFI data.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetInstanceUefiDataRequest AWS API Documentation
    #
    class GetInstanceUefiDataRequest < Struct.new(
      :instance_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance from which to retrieve the UEFI data.
    #   @return [String]
    #
    # @!attribute [rw] uefi_data
    #   Base64 representation of the non-volatile UEFI variable store.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetInstanceUefiDataResult AWS API Documentation
    #
    class GetInstanceUefiDataResult < Struct.new(
      :instance_id,
      :uefi_data)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] cidr
    #   The CIDR you want the history of. The CIDR can be an IPv4 or IPv6 IP
    #   address range. If you enter a /16 IPv4 CIDR, you will get records
    #   that match it exactly. You will not get records for any subnets
    #   within the /16 CIDR.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scope_id
    #   The ID of the IPAM scope that the CIDR is in.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC you want your history records filtered by.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The start of the time period for which you are looking for history.
    #   If you omit this option, it will default to the value of EndTime.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The end of the time period for which you are looking for history. If
    #   you omit this option, it will default to the current time.
    #   @return [Time]
    #
    # @!attribute [rw] max_results
    #   The maximum number of historical results you would like returned per
    #   page. Defaults to 100.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamAddressHistoryRequest AWS API Documentation
    #
    class GetIpamAddressHistoryRequest < Struct.new(
      :dry_run,
      :cidr,
      :ipam_scope_id,
      :vpc_id,
      :start_time,
      :end_time,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] history_records
    #   A historical record for a CIDR within an IPAM scope. If the CIDR is
    #   associated with an EC2 instance, you will see an object in the
    #   response for the instance and one for the network interface.
    #   @return [Array<Types::IpamAddressHistoryRecord>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamAddressHistoryResult AWS API Documentation
    #
    class GetIpamAddressHistoryResult < Struct.new(
      :history_records,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   A resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] discovery_region
    #   The Amazon Web Services Region that the account information is
    #   returned from.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   Discovered account filters.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of discovered accounts to return in one page of
    #   results.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamDiscoveredAccountsRequest AWS API Documentation
    #
    class GetIpamDiscoveredAccountsRequest < Struct.new(
      :dry_run,
      :ipam_resource_discovery_id,
      :discovery_region,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_discovered_accounts
    #   Discovered accounts.
    #   @return [Array<Types::IpamDiscoveredAccount>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamDiscoveredAccountsResult AWS API Documentation
    #
    class GetIpamDiscoveredAccountsResult < Struct.new(
      :ipam_discovered_accounts,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   An IPAM resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] address_region
    #   The Amazon Web Services Region for the IP address.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   Filters.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of IPAM discovered public addresses to return in
    #   one page of results.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamDiscoveredPublicAddressesRequest AWS API Documentation
    #
    class GetIpamDiscoveredPublicAddressesRequest < Struct.new(
      :dry_run,
      :ipam_resource_discovery_id,
      :address_region,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_discovered_public_addresses
    #   IPAM discovered public addresses.
    #   @return [Array<Types::IpamDiscoveredPublicAddress>]
    #
    # @!attribute [rw] oldest_sample_time
    #   The oldest successful resource discovery time.
    #   @return [Time]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamDiscoveredPublicAddressesResult AWS API Documentation
    #
    class GetIpamDiscoveredPublicAddressesResult < Struct.new(
      :ipam_discovered_public_addresses,
      :oldest_sample_time,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   A resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] resource_region
    #   A resource Region.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   Filters.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of discovered resource CIDRs to return in one
    #   page of results.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamDiscoveredResourceCidrsRequest AWS API Documentation
    #
    class GetIpamDiscoveredResourceCidrsRequest < Struct.new(
      :dry_run,
      :ipam_resource_discovery_id,
      :resource_region,
      :filters,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_discovered_resource_cidrs
    #   Discovered resource CIDRs.
    #   @return [Array<Types::IpamDiscoveredResourceCidr>]
    #
    # @!attribute [rw] next_token
    #   Specify the pagination token from a previous request to retrieve the
    #   next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamDiscoveredResourceCidrsResult AWS API Documentation
    #
    class GetIpamDiscoveredResourceCidrsResult < Struct.new(
      :ipam_discovered_resource_cidrs,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the IPAM pool you want to see the allocations for.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_allocation_id
    #   The ID of the allocation.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters for the request. For more information about
    #   filtering, see [Filtering CLI output][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results you would like returned per page.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamPoolAllocationsRequest AWS API Documentation
    #
    class GetIpamPoolAllocationsRequest < Struct.new(
      :dry_run,
      :ipam_pool_id,
      :ipam_pool_allocation_id,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_pool_allocations
    #   The IPAM pool allocations you want information on.
    #   @return [Array<Types::IpamPoolAllocation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamPoolAllocationsResult AWS API Documentation
    #
    class GetIpamPoolAllocationsResult < Struct.new(
      :ipam_pool_allocations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the IPAM pool you want the CIDR for.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters for the request. For more information about
    #   filtering, see [Filtering CLI output][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in the request.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamPoolCidrsRequest AWS API Documentation
    #
    class GetIpamPoolCidrsRequest < Struct.new(
      :dry_run,
      :ipam_pool_id,
      :filters,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_pool_cidrs
    #   Information about the CIDRs provisioned to an IPAM pool.
    #   @return [Array<Types::IpamPoolCidr>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamPoolCidrsResult AWS API Documentation
    #
    class GetIpamPoolCidrsResult < Struct.new(
      :ipam_pool_cidrs,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   One or more filters for the request. For more information about
    #   filtering, see [Filtering CLI output][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return in the request.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scope_id
    #   The ID of the scope that the resource is in.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the IPAM pool that the resource is in.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type.
    #   @return [String]
    #
    # @!attribute [rw] resource_tag
    #   The resource tag.
    #   @return [Types::RequestIpamResourceTag]
    #
    # @!attribute [rw] resource_owner
    #   The ID of the Amazon Web Services account that owns the resource.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamResourceCidrsRequest AWS API Documentation
    #
    class GetIpamResourceCidrsRequest < Struct.new(
      :dry_run,
      :filters,
      :max_results,
      :next_token,
      :ipam_scope_id,
      :ipam_pool_id,
      :resource_id,
      :resource_type,
      :resource_tag,
      :resource_owner)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @!attribute [rw] ipam_resource_cidrs
    #   The resource CIDRs.
    #   @return [Array<Types::IpamResourceCidr>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetIpamResourceCidrsResult AWS API Documentation
    #
    class GetIpamResourceCidrsResult < Struct.new(
      :next_token,
      :ipam_resource_cidrs)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetLaunchTemplateDataRequest AWS API Documentation
    #
    class GetLaunchTemplateDataRequest < Struct.new(
      :dry_run,
      :instance_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] launch_template_data
    #   The instance data.
    #   @return [Types::ResponseLaunchTemplateData]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetLaunchTemplateDataResult AWS API Documentation
    #
    class GetLaunchTemplateDataResult < Struct.new(
      :launch_template_data)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetManagedPrefixListAssociationsRequest AWS API Documentation
    #
    class GetManagedPrefixListAssociationsRequest < Struct.new(
      :dry_run,
      :prefix_list_id,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] prefix_list_associations
    #   Information about the associations.
    #   @return [Array<Types::PrefixListAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetManagedPrefixListAssociationsResult AWS API Documentation
    #
    class GetManagedPrefixListAssociationsResult < Struct.new(
      :prefix_list_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] target_version
    #   The version of the prefix list for which to return the entries. The
    #   default is the current version.
    #   @return [Integer]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetManagedPrefixListEntriesRequest AWS API Documentation
    #
    class GetManagedPrefixListEntriesRequest < Struct.new(
      :dry_run,
      :prefix_list_id,
      :target_version,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] entries
    #   Information about the prefix list entries.
    #   @return [Array<Types::PrefixListEntry>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetManagedPrefixListEntriesResult AWS API Documentation
    #
    class GetManagedPrefixListEntriesResult < Struct.new(
      :entries,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_analysis_id
    #   The ID of the Network Access Scope analysis.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetNetworkInsightsAccessScopeAnalysisFindingsRequest AWS API Documentation
    #
    class GetNetworkInsightsAccessScopeAnalysisFindingsRequest < Struct.new(
      :network_insights_access_scope_analysis_id,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_analysis_id
    #   The ID of the Network Access Scope analysis.
    #   @return [String]
    #
    # @!attribute [rw] analysis_status
    #   The status of Network Access Scope Analysis.
    #   @return [String]
    #
    # @!attribute [rw] analysis_findings
    #   The findings associated with Network Access Scope Analysis.
    #   @return [Array<Types::AccessScopeAnalysisFinding>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetNetworkInsightsAccessScopeAnalysisFindingsResult AWS API Documentation
    #
    class GetNetworkInsightsAccessScopeAnalysisFindingsResult < Struct.new(
      :network_insights_access_scope_analysis_id,
      :analysis_status,
      :analysis_findings,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_id
    #   The ID of the Network Access Scope.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetNetworkInsightsAccessScopeContentRequest AWS API Documentation
    #
    class GetNetworkInsightsAccessScopeContentRequest < Struct.new(
      :network_insights_access_scope_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_content
    #   The Network Access Scope content.
    #   @return [Types::NetworkInsightsAccessScopeContent]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetNetworkInsightsAccessScopeContentResult AWS API Documentation
    #
    class GetNetworkInsightsAccessScopeContentResult < Struct.new(
      :network_insights_access_scope_content)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the Windows instance.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordDataRequest AWS API Documentation
    #
    class GetPasswordDataRequest < Struct.new(
      :instance_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the Windows instance.
    #   @return [String]
    #
    # @!attribute [rw] timestamp
    #   The time the data was last updated.
    #   @return [Time]
    #
    # @!attribute [rw] password_data
    #   The password of the instance. Returns an empty string if the
    #   password is not available.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetPasswordDataResult AWS API Documentation
    #
    class GetPasswordDataResult < Struct.new(
      :instance_id,
      :timestamp,
      :password_data)
      SENSITIVE = [:password_data]
      include Aws::Structure
    end

    # Contains the parameters for GetReservedInstanceExchangeQuote.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] reserved_instance_ids
    #   The IDs of the Convertible Reserved Instances to exchange.
    #   @return [Array<String>]
    #
    # @!attribute [rw] target_configurations
    #   The configuration of the target Convertible Reserved Instance to
    #   exchange for your current Convertible Reserved Instances.
    #   @return [Array<Types::TargetConfigurationRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuoteRequest AWS API Documentation
    #
    class GetReservedInstancesExchangeQuoteRequest < Struct.new(
      :dry_run,
      :reserved_instance_ids,
      :target_configurations)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of GetReservedInstancesExchangeQuote.
    #
    # @!attribute [rw] currency_code
    #   The currency of the transaction.
    #   @return [String]
    #
    # @!attribute [rw] is_valid_exchange
    #   If `true`, the exchange is valid. If `false`, the exchange cannot be
    #   completed.
    #   @return [Boolean]
    #
    # @!attribute [rw] output_reserved_instances_will_expire_at
    #   The new end date of the reservation term.
    #   @return [Time]
    #
    # @!attribute [rw] payment_due
    #   The total true upfront charge for the exchange.
    #   @return [String]
    #
    # @!attribute [rw] reserved_instance_value_rollup
    #   The cost associated with the Reserved Instance.
    #   @return [Types::ReservationValue]
    #
    # @!attribute [rw] reserved_instance_value_set
    #   The configuration of your Convertible Reserved Instances.
    #   @return [Array<Types::ReservedInstanceReservationValue>]
    #
    # @!attribute [rw] target_configuration_value_rollup
    #   The cost associated with the Reserved Instance.
    #   @return [Types::ReservationValue]
    #
    # @!attribute [rw] target_configuration_value_set
    #   The values of the target Convertible Reserved Instances.
    #   @return [Array<Types::TargetReservationValue>]
    #
    # @!attribute [rw] validation_failure_reason
    #   Describes the reason why the exchange cannot be completed.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetReservedInstancesExchangeQuoteResult AWS API Documentation
    #
    class GetReservedInstancesExchangeQuoteResult < Struct.new(
      :currency_code,
      :is_valid_exchange,
      :output_reserved_instances_will_expire_at,
      :payment_due,
      :reserved_instance_value_rollup,
      :reserved_instance_value_set,
      :target_configuration_value_rollup,
      :target_configuration_value_set,
      :validation_failure_reason)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The ID of the route server for which to get association information.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetRouteServerAssociationsRequest AWS API Documentation
    #
    class GetRouteServerAssociationsRequest < Struct.new(
      :route_server_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_associations
    #   Information about the associations for the specified route server.
    #   @return [Array<Types::RouteServerAssociation>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetRouteServerAssociationsResult AWS API Documentation
    #
    class GetRouteServerAssociationsResult < Struct.new(
      :route_server_associations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The ID of the route server for which to get propagation information.
    #   @return [String]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table for which to get propagation information.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetRouteServerPropagationsRequest AWS API Documentation
    #
    class GetRouteServerPropagationsRequest < Struct.new(
      :route_server_id,
      :route_table_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_propagations
    #   Information about the route propagations for the specified route
    #   server.
    #   @return [Array<Types::RouteServerPropagation>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetRouteServerPropagationsResult AWS API Documentation
    #
    class GetRouteServerPropagationsResult < Struct.new(
      :route_server_propagations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The ID of the route server for which to get the routing database.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of routing database entries to return in a single
    #   response.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] filters
    #   Filters to apply to the routing database query.
    #   @return [Array<Types::Filter>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetRouteServerRoutingDatabaseRequest AWS API Documentation
    #
    class GetRouteServerRoutingDatabaseRequest < Struct.new(
      :route_server_id,
      :next_token,
      :max_results,
      :dry_run,
      :filters)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] are_routes_persisted
    #   Indicates whether routes are being persisted in the routing
    #   database.
    #   @return [Boolean]
    #
    # @!attribute [rw] routes
    #   The collection of routes in the route server's routing database.
    #   @return [Array<Types::RouteServerRoute>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetRouteServerRoutingDatabaseResult AWS API Documentation
    #
    class GetRouteServerRoutingDatabaseResult < Struct.new(
      :are_routes_persisted,
      :routes,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_id
    #   The VPC ID where the security group can be used.
    #   @return [String]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] filters
    #   The filters. If using multiple filters, the results include security
    #   groups which match all filters.
    #
    #   * `group-id`: The security group ID.
    #
    #   * `description`: The security group's description.
    #
    #   * `group-name`: The security group name.
    #
    #   * `owner-id`: The security group owner ID.
    #
    #   * `primary-vpc-id`: The VPC ID in which the security group was
    #     created.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSecurityGroupsForVpcRequest AWS API Documentation
    #
    class GetSecurityGroupsForVpcRequest < Struct.new(
      :vpc_id,
      :next_token,
      :max_results,
      :filters,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @!attribute [rw] security_group_for_vpcs
    #   The security group that can be used by interfaces in the VPC.
    #   @return [Array<Types::SecurityGroupForVpc>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSecurityGroupsForVpcResult AWS API Documentation
    #
    class GetSecurityGroupsForVpcResult < Struct.new(
      :next_token,
      :security_group_for_vpcs)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSerialConsoleAccessStatusRequest AWS API Documentation
    #
    class GetSerialConsoleAccessStatusRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] serial_console_access_enabled
    #   If `true`, access to the EC2 serial console of all instances is
    #   enabled for your account. If `false`, access to the EC2 serial
    #   console of all instances is disabled for your account.
    #   @return [Boolean]
    #
    # @!attribute [rw] managed_by
    #   The entity that manages access to the serial console. Possible
    #   values include:
    #
    #   * `account` - Access is managed by the account.
    #
    #   * `declarative-policy` - Access is managed by a declarative policy
    #     and can't be modified by the account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSerialConsoleAccessStatusResult AWS API Documentation
    #
    class GetSerialConsoleAccessStatusResult < Struct.new(
      :serial_console_access_enabled,
      :managed_by)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSnapshotBlockPublicAccessStateRequest AWS API Documentation
    #
    class GetSnapshotBlockPublicAccessStateRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] state
    #   The current state of block public access for snapshots. Possible
    #   values include:
    #
    #   * `block-all-sharing` - All public sharing of snapshots is blocked.
    #     Users in the account can't request new public sharing.
    #     Additionally, snapshots that were already publicly shared are
    #     treated as private and are not publicly available.
    #
    #   * `block-new-sharing` - Only new public sharing of snapshots is
    #     blocked. Users in the account can't request new public sharing.
    #     However, snapshots that were already publicly shared, remain
    #     publicly available.
    #
    #   * `unblocked` - Public sharing is not blocked. Users can publicly
    #     share snapshots.
    #   @return [String]
    #
    # @!attribute [rw] managed_by
    #   The entity that manages the state for block public access for
    #   snapshots. Possible values include:
    #
    #   * `account` - The state is managed by the account.
    #
    #   * `declarative-policy` - The state is managed by a declarative
    #     policy and can't be modified by the account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSnapshotBlockPublicAccessStateResult AWS API Documentation
    #
    class GetSnapshotBlockPublicAccessStateResult < Struct.new(
      :state,
      :managed_by)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_types
    #   The instance types. We recommend that you specify at least three
    #   instance types. If you specify one or two instance types, or specify
    #   variations of a single instance type (for example, an `m3.xlarge`
    #   with and without instance storage), the returned placement score
    #   will always be low.
    #
    #   If you specify `InstanceTypes`, you can't specify
    #   `InstanceRequirementsWithMetadata`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] target_capacity
    #   The target capacity.
    #   @return [Integer]
    #
    # @!attribute [rw] target_capacity_unit_type
    #   The unit for the target capacity.
    #   @return [String]
    #
    # @!attribute [rw] single_availability_zone
    #   Specify `true` so that the response returns a list of scored
    #   Availability Zones. Otherwise, the response returns a list of scored
    #   Regions.
    #
    #   A list of scored Availability Zones is useful if you want to launch
    #   all of your Spot capacity into a single Availability Zone.
    #   @return [Boolean]
    #
    # @!attribute [rw] region_names
    #   The Regions used to narrow down the list of Regions to be scored.
    #   Enter the Region code, for example, `us-east-1`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_requirements_with_metadata
    #   The attributes for the instance types. When you specify instance
    #   attributes, Amazon EC2 will identify instance types with those
    #   attributes.
    #
    #   If you specify `InstanceRequirementsWithMetadata`, you can't
    #   specify `InstanceTypes`.
    #   @return [Types::InstanceRequirementsWithMetadataRequest]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSpotPlacementScoresRequest AWS API Documentation
    #
    class GetSpotPlacementScoresRequest < Struct.new(
      :instance_types,
      :target_capacity,
      :target_capacity_unit_type,
      :single_availability_zone,
      :region_names,
      :instance_requirements_with_metadata,
      :dry_run,
      :max_results,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] spot_placement_scores
    #   The Spot placement score for the top 10 Regions or Availability
    #   Zones, scored on a scale from 1 to 10. Each score  reflects how
    #   likely it is that each Region or Availability Zone will succeed at
    #   fulfilling the specified target capacity  *at the time of the Spot
    #   placement score request*. A score of `10` means that your Spot
    #   capacity request is highly likely to succeed in that Region or
    #   Availability Zone.
    #
    #   If you request a Spot placement score for Regions, a high score
    #   assumes that your fleet request will be configured to use all
    #   Availability Zones and the `capacity-optimized` allocation strategy.
    #   If you request a Spot placement score for Availability Zones, a high
    #   score assumes that your fleet request will be configured to use a
    #   single Availability Zone and the `capacity-optimized` allocation
    #   strategy.
    #
    #   Different  Regions or Availability Zones might return the same
    #   score.
    #
    #   <note markdown="1"> The Spot placement score serves as a recommendation only. No score
    #   guarantees that your Spot request will be fully or partially
    #   fulfilled.
    #
    #    </note>
    #   @return [Array<Types::SpotPlacementScore>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSpotPlacementScoresResult AWS API Documentation
    #
    class GetSpotPlacementScoresResult < Struct.new(
      :spot_placement_scores,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `reservationType` - The type of reservation (`prefix` \|
    #     `explicit`).
    #
    #   * `subnet-id` - The ID of the subnet.
    #
    #   * `tag`:&lt;key&gt; - The key/value combination of a tag assigned to
    #     the resource. Use the tag key in the filter name and the tag value
    #     as the filter value. For example, to find all resources that have
    #     a tag with the key `Owner` and the value `TeamA`, specify
    #     `tag:Owner` for the filter name and `TeamA` for the filter value.
    #
    #   * `tag-key` - The key of a tag assigned to the resource. Use this
    #     filter to find all resources assigned a tag with a specific key,
    #     regardless of the tag value.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSubnetCidrReservationsRequest AWS API Documentation
    #
    class GetSubnetCidrReservationsRequest < Struct.new(
      :filters,
      :subnet_id,
      :dry_run,
      :next_token,
      :max_results)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] subnet_ipv_4_cidr_reservations
    #   Information about the IPv4 subnet CIDR reservations.
    #   @return [Array<Types::SubnetCidrReservation>]
    #
    # @!attribute [rw] subnet_ipv_6_cidr_reservations
    #   Information about the IPv6 subnet CIDR reservations.
    #   @return [Array<Types::SubnetCidrReservation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetSubnetCidrReservationsResult AWS API Documentation
    #
    class GetSubnetCidrReservationsResult < Struct.new(
      :subnet_ipv_4_cidr_reservations,
      :subnet_ipv_6_cidr_reservations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `transit-gateway-route-table-id` - The ID of the transit gateway
    #     route table.
    #
    #   ^
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayAttachmentPropagationsRequest AWS API Documentation
    #
    class GetTransitGatewayAttachmentPropagationsRequest < Struct.new(
      :transit_gateway_attachment_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_propagations
    #   Information about the propagation route tables.
    #   @return [Array<Types::TransitGatewayAttachmentPropagation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayAttachmentPropagationsResult AWS API Documentation
    #
    class GetTransitGatewayAttachmentPropagationsResult < Struct.new(
      :transit_gateway_attachment_propagations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `resource-id` - The ID of the resource.
    #
    #   * `resource-type` - The type of resource. The valid value is: `vpc`.
    #
    #   * `state` - The state of the subnet association. Valid values are
    #     `associated` \| `associating` \| `disassociated` \|
    #     `disassociating`.
    #
    #   * `subnet-id` - The ID of the subnet.
    #
    #   * `transit-gateway-attachment-id` - The id of the transit gateway
    #     attachment.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayMulticastDomainAssociationsRequest AWS API Documentation
    #
    class GetTransitGatewayMulticastDomainAssociationsRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] multicast_domain_associations
    #   Information about the multicast domain associations.
    #   @return [Array<Types::TransitGatewayMulticastDomainAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayMulticastDomainAssociationsResult AWS API Documentation
    #
    class GetTransitGatewayMulticastDomainAssociationsResult < Struct.new(
      :multicast_domain_associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_table_id
    #   The ID of the transit gateway policy table.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   The filters associated with the transit gateway policy table.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayPolicyTableAssociationsRequest AWS API Documentation
    #
    class GetTransitGatewayPolicyTableAssociationsRequest < Struct.new(
      :transit_gateway_policy_table_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] associations
    #   Returns details about the transit gateway policy table association.
    #   @return [Array<Types::TransitGatewayPolicyTableAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayPolicyTableAssociationsResult AWS API Documentation
    #
    class GetTransitGatewayPolicyTableAssociationsResult < Struct.new(
      :associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_table_id
    #   The ID of the transit gateway policy table.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   The filters associated with the transit gateway policy table.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayPolicyTableEntriesRequest AWS API Documentation
    #
    class GetTransitGatewayPolicyTableEntriesRequest < Struct.new(
      :transit_gateway_policy_table_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_policy_table_entries
    #   The entries for the transit gateway policy table.
    #   @return [Array<Types::TransitGatewayPolicyTableEntry>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayPolicyTableEntriesResult AWS API Documentation
    #
    class GetTransitGatewayPolicyTableEntriesResult < Struct.new(
      :transit_gateway_policy_table_entries)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `attachment.resource-id` - The ID of the resource for the
    #     attachment.
    #
    #   * `attachment.resource-type` - The type of resource for the
    #     attachment. Valid values are `vpc` \| `vpn` \|
    #     `direct-connect-gateway` \| `peering`.
    #
    #   * `attachment.transit-gateway-attachment-id` - The ID of the
    #     attachment.
    #
    #   * `is-blackhole` - Whether traffic matching the route is blocked
    #     (`true` \| `false`).
    #
    #   * `prefix-list-id` - The ID of the prefix list.
    #
    #   * `prefix-list-owner-id` - The ID of the owner of the prefix list.
    #
    #   * `state` - The state of the prefix list reference (`pending` \|
    #     `available` \| `modifying` \| `deleting`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayPrefixListReferencesRequest AWS API Documentation
    #
    class GetTransitGatewayPrefixListReferencesRequest < Struct.new(
      :transit_gateway_route_table_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_prefix_list_references
    #   Information about the prefix list references.
    #   @return [Array<Types::TransitGatewayPrefixListReference>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayPrefixListReferencesResult AWS API Documentation
    #
    class GetTransitGatewayPrefixListReferencesResult < Struct.new(
      :transit_gateway_prefix_list_references,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `resource-id` - The ID of the resource.
    #
    #   * `resource-type` - The resource type. Valid values are `vpc` \|
    #     `vpn` \| `direct-connect-gateway` \| `peering` \| `connect`.
    #
    #   * `transit-gateway-attachment-id` - The ID of the attachment.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTableAssociationsRequest AWS API Documentation
    #
    class GetTransitGatewayRouteTableAssociationsRequest < Struct.new(
      :transit_gateway_route_table_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] associations
    #   Information about the associations.
    #   @return [Array<Types::TransitGatewayRouteTableAssociation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTableAssociationsResult AWS API Documentation
    #
    class GetTransitGatewayRouteTableAssociationsResult < Struct.new(
      :associations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `resource-id` - The ID of the resource.
    #
    #   * `resource-type` - The resource type. Valid values are `vpc` \|
    #     `vpn` \| `direct-connect-gateway` \| `peering` \| `connect`.
    #
    #   * `transit-gateway-attachment-id` - The ID of the attachment.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTablePropagationsRequest AWS API Documentation
    #
    class GetTransitGatewayRouteTablePropagationsRequest < Struct.new(
      :transit_gateway_route_table_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_propagations
    #   Information about the route table propagations.
    #   @return [Array<Types::TransitGatewayRouteTablePropagation>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetTransitGatewayRouteTablePropagationsResult AWS API Documentation
    #
    class GetTransitGatewayRouteTablePropagationsResult < Struct.new(
      :transit_gateway_route_table_propagations,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint_id
    #   The ID of the Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVerifiedAccessEndpointPolicyRequest AWS API Documentation
    #
    class GetVerifiedAccessEndpointPolicyRequest < Struct.new(
      :verified_access_endpoint_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] policy_enabled
    #   The status of the Verified Access policy.
    #   @return [Boolean]
    #
    # @!attribute [rw] policy_document
    #   The Verified Access policy document.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVerifiedAccessEndpointPolicyResult AWS API Documentation
    #
    class GetVerifiedAccessEndpointPolicyResult < Struct.new(
      :policy_enabled,
      :policy_document)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint_id
    #   The ID of the network CIDR endpoint.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVerifiedAccessEndpointTargetsRequest AWS API Documentation
    #
    class GetVerifiedAccessEndpointTargetsRequest < Struct.new(
      :verified_access_endpoint_id,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint_targets
    #   The Verified Access targets.
    #   @return [Array<Types::VerifiedAccessEndpointTarget>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVerifiedAccessEndpointTargetsResult AWS API Documentation
    #
    class GetVerifiedAccessEndpointTargetsResult < Struct.new(
      :verified_access_endpoint_targets,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_group_id
    #   The ID of the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVerifiedAccessGroupPolicyRequest AWS API Documentation
    #
    class GetVerifiedAccessGroupPolicyRequest < Struct.new(
      :verified_access_group_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] policy_enabled
    #   The status of the Verified Access policy.
    #   @return [Boolean]
    #
    # @!attribute [rw] policy_document
    #   The Verified Access policy document.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVerifiedAccessGroupPolicyResult AWS API Documentation
    #
    class GetVerifiedAccessGroupPolicyResult < Struct.new(
      :policy_enabled,
      :policy_document)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_id
    #   The `VpnConnectionId` specifies the Site-to-Site VPN connection used
    #   for the sample configuration.
    #   @return [String]
    #
    # @!attribute [rw] vpn_connection_device_type_id
    #   Device identifier provided by the `GetVpnConnectionDeviceTypes` API.
    #   @return [String]
    #
    # @!attribute [rw] internet_key_exchange_version
    #   The IKE version to be used in the sample configuration file for your
    #   customer gateway device. You can specify one of the following
    #   versions: `ikev1` or `ikev2`.
    #   @return [String]
    #
    # @!attribute [rw] sample_type
    #   The type of sample configuration to generate. Valid values are
    #   "compatibility" (includes IKEv1) or "recommended" (throws
    #   UnsupportedOperationException for IKEv1).
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVpnConnectionDeviceSampleConfigurationRequest AWS API Documentation
    #
    class GetVpnConnectionDeviceSampleConfigurationRequest < Struct.new(
      :vpn_connection_id,
      :vpn_connection_device_type_id,
      :internet_key_exchange_version,
      :sample_type,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_device_sample_configuration
    #   Sample configuration file for the specified customer gateway device.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVpnConnectionDeviceSampleConfigurationResult AWS API Documentation
    #
    class GetVpnConnectionDeviceSampleConfigurationResult < Struct.new(
      :vpn_connection_device_sample_configuration)
      SENSITIVE = [:vpn_connection_device_sample_configuration]
      include Aws::Structure
    end

    # @!attribute [rw] max_results
    #   The maximum number of results returned by
    #   `GetVpnConnectionDeviceTypes` in paginated output. When this
    #   parameter is used, `GetVpnConnectionDeviceTypes` only returns
    #   `MaxResults` results in a single page along with a `NextToken`
    #   response element. The remaining results of the initial request can
    #   be seen by sending another `GetVpnConnectionDeviceTypes` request
    #   with the returned `NextToken` value. This value can be between 200
    #   and 1000. If this parameter is not used, then
    #   `GetVpnConnectionDeviceTypes` returns all results.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The `NextToken` value returned from a previous paginated
    #   `GetVpnConnectionDeviceTypes` request where `MaxResults` was used
    #   and the results exceeded the value of that parameter. Pagination
    #   continues from the end of the previous results that returned the
    #   `NextToken` value. This value is null when there are no more results
    #   to return.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVpnConnectionDeviceTypesRequest AWS API Documentation
    #
    class GetVpnConnectionDeviceTypesRequest < Struct.new(
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_device_types
    #   List of customer gateway devices that have a sample configuration
    #   file available for use.
    #   @return [Array<Types::VpnConnectionDeviceType>]
    #
    # @!attribute [rw] next_token
    #   The `NextToken` value to include in a future
    #   `GetVpnConnectionDeviceTypes` request. When the results of a
    #   `GetVpnConnectionDeviceTypes` request exceed `MaxResults`, this
    #   value can be used to retrieve the next page of results. This value
    #   is null when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVpnConnectionDeviceTypesResult AWS API Documentation
    #
    class GetVpnConnectionDeviceTypesResult < Struct.new(
      :vpn_connection_device_types,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_id
    #   The ID of the Site-to-Site VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] vpn_tunnel_outside_ip_address
    #   The external IP address of the VPN tunnel.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVpnTunnelReplacementStatusRequest AWS API Documentation
    #
    class GetVpnTunnelReplacementStatusRequest < Struct.new(
      :vpn_connection_id,
      :vpn_tunnel_outside_ip_address,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_id
    #   The ID of the Site-to-Site VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway associated with the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] customer_gateway_id
    #   The ID of the customer gateway.
    #   @return [String]
    #
    # @!attribute [rw] vpn_gateway_id
    #   The ID of the virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] vpn_tunnel_outside_ip_address
    #   The external IP address of the VPN tunnel.
    #   @return [String]
    #
    # @!attribute [rw] maintenance_details
    #   Get details of pending tunnel endpoint maintenance.
    #   @return [Types::MaintenanceDetails]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GetVpnTunnelReplacementStatusResult AWS API Documentation
    #
    class GetVpnTunnelReplacementStatusResult < Struct.new(
      :vpn_connection_id,
      :transit_gateway_id,
      :customer_gateway_id,
      :vpn_gateway_id,
      :vpn_tunnel_outside_ip_address,
      :maintenance_details)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the GPU accelerators for the instance type.
    #
    # @!attribute [rw] name
    #   The name of the GPU accelerator.
    #   @return [String]
    #
    # @!attribute [rw] manufacturer
    #   The manufacturer of the GPU accelerator.
    #   @return [String]
    #
    # @!attribute [rw] count
    #   The number of GPUs for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] memory_info
    #   Describes the memory available to the GPU accelerator.
    #   @return [Types::GpuDeviceMemoryInfo]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GpuDeviceInfo AWS API Documentation
    #
    class GpuDeviceInfo < Struct.new(
      :name,
      :manufacturer,
      :count,
      :memory_info)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the memory available to the GPU accelerator.
    #
    # @!attribute [rw] size_in_mi_b
    #   The size of the memory available to the GPU accelerator, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GpuDeviceMemoryInfo AWS API Documentation
    #
    class GpuDeviceMemoryInfo < Struct.new(
      :size_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the GPU accelerators for the instance type.
    #
    # @!attribute [rw] gpus
    #   Describes the GPU accelerators for the instance type.
    #   @return [Array<Types::GpuDeviceInfo>]
    #
    # @!attribute [rw] total_gpu_memory_in_mi_b
    #   The total size of the memory for the GPU accelerators for the
    #   instance type, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GpuInfo AWS API Documentation
    #
    class GpuInfo < Struct.new(
      :gpus,
      :total_gpu_memory_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a security group.
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the security group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/GroupIdentifier AWS API Documentation
    #
    class GroupIdentifier < Struct.new(
      :group_id,
      :group_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Indicates whether your instance is configured for hibernation. This
    # parameter is valid only if the instance meets the [hibernation
    # prerequisites][1]. For more information, see [Hibernate your Amazon
    # EC2 instance][2] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html
    # [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html
    #
    # @!attribute [rw] configured
    #   If `true`, your instance is enabled for hibernation; otherwise, it
    #   is not enabled for hibernation.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HibernationOptions AWS API Documentation
    #
    class HibernationOptions < Struct.new(
      :configured)
      SENSITIVE = []
      include Aws::Structure
    end

    # Indicates whether your instance is configured for hibernation. This
    # parameter is valid only if the instance meets the [hibernation
    # prerequisites][1]. For more information, see [Hibernate your Amazon
    # EC2 instance][2] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html
    # [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html
    #
    # @!attribute [rw] configured
    #   Set to `true` to enable your instance for hibernation.
    #
    #   For Spot Instances, if you set `Configured` to `true`, either omit
    #   the `InstanceInterruptionBehavior` parameter (for [
    #   `SpotMarketOptions` ][1]), or set it to `hibernate`. When
    #   `Configured` is true:
    #
    #   * If you omit `InstanceInterruptionBehavior`, it defaults to
    #     `hibernate`.
    #
    #   * If you set `InstanceInterruptionBehavior` to a value other than
    #     `hibernate`, you'll get an error.
    #
    #   Default: `false`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotMarketOptions.html
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HibernationOptionsRequest AWS API Documentation
    #
    class HibernationOptionsRequest < Struct.new(
      :configured)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an event in the history of the Spot Fleet request.
    #
    # @!attribute [rw] event_information
    #   Information about the event.
    #   @return [Types::EventInformation]
    #
    # @!attribute [rw] event_type
    #   The event type.
    #
    #   * `error` - An error with the Spot Fleet request.
    #
    #   * `fleetRequestChange` - A change in the status or configuration of
    #     the Spot Fleet request.
    #
    #   * `instanceChange` - An instance was launched or terminated.
    #
    #   * `Information` - An informational event.
    #   @return [String]
    #
    # @!attribute [rw] timestamp
    #   The date and time of the event, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HistoryRecord AWS API Documentation
    #
    class HistoryRecord < Struct.new(
      :event_information,
      :event_type,
      :timestamp)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an event in the history of an EC2 Fleet.
    #
    # @!attribute [rw] event_information
    #   Information about the event.
    #   @return [Types::EventInformation]
    #
    # @!attribute [rw] event_type
    #   The event type.
    #   @return [String]
    #
    # @!attribute [rw] timestamp
    #   The date and time of the event, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HistoryRecordEntry AWS API Documentation
    #
    class HistoryRecordEntry < Struct.new(
      :event_information,
      :event_type,
      :timestamp)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the properties of the Dedicated Host.
    #
    # @!attribute [rw] auto_placement
    #   Whether auto-placement is on or off.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the Dedicated Host.
    #   @return [String]
    #
    # @!attribute [rw] available_capacity
    #   Information about the instances running on the Dedicated Host.
    #   @return [Types::AvailableCapacity]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] host_id
    #   The ID of the Dedicated Host.
    #   @return [String]
    #
    # @!attribute [rw] host_properties
    #   The hardware specifications of the Dedicated Host.
    #   @return [Types::HostProperties]
    #
    # @!attribute [rw] host_reservation_id
    #   The reservation ID of the Dedicated Host. This returns a `null`
    #   response if the Dedicated Host doesn't have an associated
    #   reservation.
    #   @return [String]
    #
    # @!attribute [rw] instances
    #   The IDs and instance type that are currently running on the
    #   Dedicated Host.
    #   @return [Array<Types::HostInstance>]
    #
    # @!attribute [rw] state
    #   The Dedicated Host's state.
    #   @return [String]
    #
    # @!attribute [rw] allocation_time
    #   The time that the Dedicated Host was allocated.
    #   @return [Time]
    #
    # @!attribute [rw] release_time
    #   The time that the Dedicated Host was released.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the Dedicated Host.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] host_recovery
    #   Indicates whether host recovery is enabled or disabled for the
    #   Dedicated Host.
    #   @return [String]
    #
    # @!attribute [rw] allows_multiple_instance_types
    #   Indicates whether the Dedicated Host supports multiple instance
    #   types of the same instance family. If the value is `on`, the
    #   Dedicated Host supports multiple instance types in the instance
    #   family. If the value is `off`, the Dedicated Host supports a single
    #   instance type only.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the Dedicated
    #   Host.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone in which the Dedicated Host is
    #   allocated.
    #   @return [String]
    #
    # @!attribute [rw] member_of_service_linked_resource_group
    #   Indicates whether the Dedicated Host is in a host resource group. If
    #   **memberOfServiceLinkedResourceGroup** is `true`, the host is in a
    #   host resource group; otherwise, it is not.
    #   @return [Boolean]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on
    #   which the Dedicated Host is allocated.
    #   @return [String]
    #
    # @!attribute [rw] host_maintenance
    #   Indicates whether host maintenance is enabled or disabled for the
    #   Dedicated Host.
    #   @return [String]
    #
    # @!attribute [rw] asset_id
    #   The ID of the Outpost hardware asset on which the Dedicated Host is
    #   allocated.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Host AWS API Documentation
    #
    class Host < Struct.new(
      :auto_placement,
      :availability_zone,
      :available_capacity,
      :client_token,
      :host_id,
      :host_properties,
      :host_reservation_id,
      :instances,
      :state,
      :allocation_time,
      :release_time,
      :tags,
      :host_recovery,
      :allows_multiple_instance_types,
      :owner_id,
      :availability_zone_id,
      :member_of_service_linked_resource_group,
      :outpost_arn,
      :host_maintenance,
      :asset_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an instance running on a Dedicated Host.
    #
    # @!attribute [rw] instance_id
    #   The ID of instance that is running on the Dedicated Host.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type (for example, `m3.medium`) of the running
    #   instance.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HostInstance AWS API Documentation
    #
    class HostInstance < Struct.new(
      :instance_id,
      :instance_type,
      :owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Details about the Dedicated Host Reservation offering.
    #
    # @!attribute [rw] currency_code
    #   The currency of the offering.
    #   @return [String]
    #
    # @!attribute [rw] duration
    #   The duration of the offering (in seconds).
    #   @return [Integer]
    #
    # @!attribute [rw] hourly_price
    #   The hourly price of the offering.
    #   @return [String]
    #
    # @!attribute [rw] instance_family
    #   The instance family of the offering.
    #   @return [String]
    #
    # @!attribute [rw] offering_id
    #   The ID of the offering.
    #   @return [String]
    #
    # @!attribute [rw] payment_option
    #   The available payment option.
    #   @return [String]
    #
    # @!attribute [rw] upfront_price
    #   The upfront price of the offering. Does not apply to No Upfront
    #   offerings.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HostOffering AWS API Documentation
    #
    class HostOffering < Struct.new(
      :currency_code,
      :duration,
      :hourly_price,
      :instance_family,
      :offering_id,
      :payment_option,
      :upfront_price)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the properties of a Dedicated Host.
    #
    # @!attribute [rw] cores
    #   The number of cores on the Dedicated Host.
    #   @return [Integer]
    #
    # @!attribute [rw] instance_type
    #   The instance type supported by the Dedicated Host. For example,
    #   `m5.large`. If the host supports multiple instance types, no
    #   **instanceType** is returned.
    #   @return [String]
    #
    # @!attribute [rw] instance_family
    #   The instance family supported by the Dedicated Host. For example,
    #   `m5`.
    #   @return [String]
    #
    # @!attribute [rw] sockets
    #   The number of sockets on the Dedicated Host.
    #   @return [Integer]
    #
    # @!attribute [rw] total_v_cpus
    #   The total number of vCPUs on the Dedicated Host.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HostProperties AWS API Documentation
    #
    class HostProperties < Struct.new(
      :cores,
      :instance_type,
      :instance_family,
      :sockets,
      :total_v_cpus)
      SENSITIVE = []
      include Aws::Structure
    end

    # Details about the Dedicated Host Reservation and associated Dedicated
    # Hosts.
    #
    # @!attribute [rw] count
    #   The number of Dedicated Hosts the reservation is associated with.
    #   @return [Integer]
    #
    # @!attribute [rw] currency_code
    #   The currency in which the `upfrontPrice` and `hourlyPrice` amounts
    #   are specified. At this time, the only supported currency is `USD`.
    #   @return [String]
    #
    # @!attribute [rw] duration
    #   The length of the reservation's term, specified in seconds. Can be
    #   `31536000 (1 year)` \| `94608000 (3 years)`.
    #   @return [Integer]
    #
    # @!attribute [rw] end
    #   The date and time that the reservation ends.
    #   @return [Time]
    #
    # @!attribute [rw] host_id_set
    #   The IDs of the Dedicated Hosts associated with the reservation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] host_reservation_id
    #   The ID of the reservation that specifies the associated Dedicated
    #   Hosts.
    #   @return [String]
    #
    # @!attribute [rw] hourly_price
    #   The hourly price of the reservation.
    #   @return [String]
    #
    # @!attribute [rw] instance_family
    #   The instance family of the Dedicated Host Reservation. The instance
    #   family on the Dedicated Host must be the same in order for it to
    #   benefit from the reservation.
    #   @return [String]
    #
    # @!attribute [rw] offering_id
    #   The ID of the reservation. This remains the same regardless of which
    #   Dedicated Hosts are associated with it.
    #   @return [String]
    #
    # @!attribute [rw] payment_option
    #   The payment option selected for this reservation.
    #   @return [String]
    #
    # @!attribute [rw] start
    #   The date and time that the reservation started.
    #   @return [Time]
    #
    # @!attribute [rw] state
    #   The state of the reservation.
    #   @return [String]
    #
    # @!attribute [rw] upfront_price
    #   The upfront price of the reservation.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the Dedicated Host Reservation.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/HostReservation AWS API Documentation
    #
    class HostReservation < Struct.new(
      :count,
      :currency_code,
      :duration,
      :end,
      :host_id_set,
      :host_reservation_id,
      :hourly_price,
      :instance_family,
      :offering_id,
      :payment_option,
      :start,
      :state,
      :upfront_price,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # The internet key exchange (IKE) version permitted for the VPN tunnel.
    #
    # @!attribute [rw] value
    #   The IKE version.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IKEVersionsListValue AWS API Documentation
    #
    class IKEVersionsListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The IKE version that is permitted for the VPN tunnel.
    #
    # @!attribute [rw] value
    #   The IKE version.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IKEVersionsRequestListValue AWS API Documentation
    #
    class IKEVersionsRequestListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IAM instance profile.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the instance profile.
    #   @return [String]
    #
    # @!attribute [rw] id
    #   The ID of the instance profile.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IamInstanceProfile AWS API Documentation
    #
    class IamInstanceProfile < Struct.new(
      :arn,
      :id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an association between an IAM instance profile and an
    # instance.
    #
    # @!attribute [rw] association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] iam_instance_profile
    #   The IAM instance profile.
    #   @return [Types::IamInstanceProfile]
    #
    # @!attribute [rw] state
    #   The state of the association.
    #   @return [String]
    #
    # @!attribute [rw] timestamp
    #   The time the IAM instance profile was associated with the instance.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IamInstanceProfileAssociation AWS API Documentation
    #
    class IamInstanceProfileAssociation < Struct.new(
      :association_id,
      :instance_id,
      :iam_instance_profile,
      :state,
      :timestamp)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IAM instance profile.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the instance profile.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the instance profile.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IamInstanceProfileSpecification AWS API Documentation
    #
    class IamInstanceProfileSpecification < Struct.new(
      :arn,
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the ICMP type and code.
    #
    # @!attribute [rw] code
    #   The ICMP code. A value of -1 means all codes for the specified ICMP
    #   type.
    #   @return [Integer]
    #
    # @!attribute [rw] type
    #   The ICMP type. A value of -1 means all types.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IcmpTypeCode AWS API Documentation
    #
    class IcmpTypeCode < Struct.new(
      :code,
      :type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the ID format for a resource.
    #
    # @!attribute [rw] deadline
    #   The date in UTC at which you are permanently switched over to using
    #   longer IDs. If a deadline is not yet available for this resource
    #   type, this field is not returned.
    #   @return [Time]
    #
    # @!attribute [rw] resource
    #   The type of resource.
    #   @return [String]
    #
    # @!attribute [rw] use_long_ids
    #   Indicates whether longer IDs (17-character IDs) are enabled for the
    #   resource.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IdFormat AWS API Documentation
    #
    class IdFormat < Struct.new(
      :deadline,
      :resource,
      :use_long_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an image.
    #
    # @!attribute [rw] platform_details
    #   The platform details associated with the billing code of the AMI.
    #   For more information, see [Understand AMI billing information][1] in
    #   the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html
    #   @return [String]
    #
    # @!attribute [rw] usage_operation
    #   The operation of the Amazon EC2 instance and the billing code that
    #   is associated with the AMI. `usageOperation` corresponds to the
    #   [lineitem/Operation][1] column on your Amazon Web Services Cost and
    #   Usage Report and in the [Amazon Web Services Price List API][2]. You
    #   can view these fields on the **Instances** or **AMIs** pages in the
    #   Amazon EC2 console, or in the responses that are returned by the
    #   [DescribeImages][3] command in the Amazon EC2 API, or the
    #   [describe-images][4] command in the CLI.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation
    #   [2]: https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html
    #   [4]: https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html
    #   @return [String]
    #
    # @!attribute [rw] block_device_mappings
    #   Any block device mapping entries.
    #   @return [Array<Types::BlockDeviceMapping>]
    #
    # @!attribute [rw] description
    #   The description of the AMI that was provided during image creation.
    #   @return [String]
    #
    # @!attribute [rw] ena_support
    #   Specifies whether enhanced networking with ENA is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] hypervisor
    #   The hypervisor type of the image. Only `xen` is supported. `ovm` is
    #   not supported.
    #   @return [String]
    #
    # @!attribute [rw] image_owner_alias
    #   The owner alias (`amazon` \| `aws-backup-vault` \|
    #   `aws-marketplace`).
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the AMI that was provided during image creation.
    #   @return [String]
    #
    # @!attribute [rw] root_device_name
    #   The device name of the root device volume (for example,
    #   `/dev/sda1`).
    #   @return [String]
    #
    # @!attribute [rw] root_device_type
    #   The type of root device used by the AMI. The AMI can use an Amazon
    #   EBS volume or an instance store volume.
    #   @return [String]
    #
    # @!attribute [rw] sriov_net_support
    #   Specifies whether enhanced networking with the Intel 82599 Virtual
    #   Function interface is enabled.
    #   @return [String]
    #
    # @!attribute [rw] state_reason
    #   The reason for the state change.
    #   @return [Types::StateReason]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the image.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] virtualization_type
    #   The type of virtualization of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] boot_mode
    #   The boot mode of the image. For more information, see [Instance
    #   launch behavior with Amazon EC2 boot modes][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html
    #   @return [String]
    #
    # @!attribute [rw] tpm_support
    #   If the image is configured for NitroTPM support, the value is
    #   `v2.0`. For more information, see [NitroTPM][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html
    #   @return [String]
    #
    # @!attribute [rw] deprecation_time
    #   The date and time to deprecate the AMI, in UTC, in the following
    #   format: *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z. If you specified a value
    #   for seconds, Amazon EC2 rounds the seconds to the nearest minute.
    #   @return [String]
    #
    # @!attribute [rw] imds_support
    #   If `v2.0`, it indicates that IMDSv2 is specified in the AMI.
    #   Instances launched from this AMI will have `HttpTokens`
    #   automatically set to `required` so that, by default, the instance
    #   requires that IMDSv2 is used when requesting instance metadata. In
    #   addition, `HttpPutResponseHopLimit` is set to `2`. For more
    #   information, see [Configure the AMI][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration
    #   @return [String]
    #
    # @!attribute [rw] source_instance_id
    #   The ID of the instance that the AMI was created from if the AMI was
    #   created using [CreateImage][1]. This field only appears if the AMI
    #   was created using CreateImage.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html
    #   @return [String]
    #
    # @!attribute [rw] deregistration_protection
    #   Indicates whether deregistration protection is enabled for the AMI.
    #   @return [String]
    #
    # @!attribute [rw] last_launched_time
    #   The date and time, in [ISO 8601 date-time format][1], when the AMI
    #   was last used to launch an EC2 instance. When the AMI is used to
    #   launch an instance, there is a 24-hour delay before that usage is
    #   reported.
    #
    #   <note markdown="1"> `lastLaunchedTime` data is available starting April 2017.
    #
    #    </note>
    #
    #
    #
    #   [1]: http://www.iso.org/iso/iso8601
    #   @return [String]
    #
    # @!attribute [rw] image_allowed
    #   If `true`, the AMI satisfies the criteria for Allowed AMIs and can
    #   be discovered and used in the account. If `false` and Allowed AMIs
    #   is set to `enabled`, the AMI can't be discovered or used in the
    #   account. If `false` and Allowed AMIs is set to `audit-mode`, the AMI
    #   can be discovered and used in the account.
    #
    #   For more information, see [Control the discovery and use of AMIs in
    #   Amazon EC2 with Allowed AMIs][1] in *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html
    #   @return [Boolean]
    #
    # @!attribute [rw] source_image_id
    #   The ID of the source AMI from which the AMI was created.
    #   @return [String]
    #
    # @!attribute [rw] source_image_region
    #   The Region of the source AMI.
    #   @return [String]
    #
    # @!attribute [rw] free_tier_eligible
    #   Indicates whether the image is eligible for Amazon Web Services Free
    #   Tier.
    #
    #   * If `true`, the AMI is eligible for Free Tier and can be used to
    #     launch instances under the Free Tier limits.
    #
    #   * If `false`, the AMI is not eligible for Free Tier.
    #   @return [Boolean]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] image_location
    #   The location of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the AMI. If the state is `available`, the image
    #   is successfully registered and can be used to launch an instance.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the image.
    #   @return [String]
    #
    # @!attribute [rw] creation_date
    #   The date and time the image was created.
    #   @return [String]
    #
    # @!attribute [rw] public
    #   Indicates whether the image has public launch permissions. The value
    #   is `true` if this image has public launch permissions or `false` if
    #   it has only implicit and explicit launch permissions.
    #   @return [Boolean]
    #
    # @!attribute [rw] product_codes
    #   Any product codes associated with the AMI.
    #   @return [Array<Types::ProductCode>]
    #
    # @!attribute [rw] architecture
    #   The architecture of the image.
    #   @return [String]
    #
    # @!attribute [rw] image_type
    #   The type of image.
    #   @return [String]
    #
    # @!attribute [rw] kernel_id
    #   The kernel associated with the image, if any. Only applicable for
    #   machine images.
    #   @return [String]
    #
    # @!attribute [rw] ramdisk_id
    #   The RAM disk associated with the image, if any. Only applicable for
    #   machine images.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   This value is set to `windows` for Windows AMIs; otherwise, it is
    #   blank.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Image AWS API Documentation
    #
    class Image < Struct.new(
      :platform_details,
      :usage_operation,
      :block_device_mappings,
      :description,
      :ena_support,
      :hypervisor,
      :image_owner_alias,
      :name,
      :root_device_name,
      :root_device_type,
      :sriov_net_support,
      :state_reason,
      :tags,
      :virtualization_type,
      :boot_mode,
      :tpm_support,
      :deprecation_time,
      :imds_support,
      :source_instance_id,
      :deregistration_protection,
      :last_launched_time,
      :image_allowed,
      :source_image_id,
      :source_image_region,
      :free_tier_eligible,
      :image_id,
      :image_location,
      :state,
      :owner_id,
      :creation_date,
      :public,
      :product_codes,
      :architecture,
      :image_type,
      :kernel_id,
      :ramdisk_id,
      :platform)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an image attribute.
    #
    # @!attribute [rw] description
    #   A description for the AMI.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] kernel_id
    #   The kernel ID.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] ramdisk_id
    #   The RAM disk ID.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] sriov_net_support
    #   Indicates whether enhanced networking with the Intel 82599 Virtual
    #   Function interface is enabled.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] boot_mode
    #   The boot mode.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] tpm_support
    #   If the image is configured for NitroTPM support, the value is
    #   `v2.0`.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] uefi_data
    #   Base64 representation of the non-volatile UEFI variable store. To
    #   retrieve the UEFI data, use the [GetInstanceUefiData][1] command.
    #   You can inspect and modify the UEFI data by using the
    #   [python-uefivars tool][2] on GitHub. For more information, see [UEFI
    #   Secure Boot for Amazon EC2 instances][3] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData
    #   [2]: https://github.com/awslabs/python-uefivars
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] last_launched_time
    #   The date and time, in [ISO 8601 date-time format][1], when the AMI
    #   was last used to launch an EC2 instance. When the AMI is used to
    #   launch an instance, there is a 24-hour delay before that usage is
    #   reported.
    #
    #   <note markdown="1"> `lastLaunchedTime` data is available starting April 2017.
    #
    #    </note>
    #
    #
    #
    #   [1]: http://www.iso.org/iso/iso8601
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] imds_support
    #   If `v2.0`, it indicates that IMDSv2 is specified in the AMI.
    #   Instances launched from this AMI will have `HttpTokens`
    #   automatically set to `required` so that, by default, the instance
    #   requires that IMDSv2 is used when requesting instance metadata. In
    #   addition, `HttpPutResponseHopLimit` is set to `2`. For more
    #   information, see [Configure the AMI][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] deregistration_protection
    #   Indicates whether deregistration protection is enabled for the AMI.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] launch_permissions
    #   The launch permissions.
    #   @return [Array<Types::LaunchPermission>]
    #
    # @!attribute [rw] product_codes
    #   The product codes.
    #   @return [Array<Types::ProductCode>]
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mapping entries.
    #   @return [Array<Types::BlockDeviceMapping>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageAttribute AWS API Documentation
    #
    class ImageAttribute < Struct.new(
      :description,
      :kernel_id,
      :ramdisk_id,
      :sriov_net_support,
      :boot_mode,
      :tpm_support,
      :uefi_data,
      :last_launched_time,
      :imds_support,
      :deregistration_protection,
      :image_id,
      :launch_permissions,
      :product_codes,
      :block_device_mappings)
      SENSITIVE = []
      include Aws::Structure
    end

    # The criteria that are evaluated to determine which AMIs are
    # discoverable and usable in your account for the specified Amazon Web
    # Services Region.
    #
    # For more information, see [How Allowed AMIs works][1] in the *Amazon
    # EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html#how-allowed-amis-works
    #
    # @!attribute [rw] image_providers
    #   The image providers whose images are allowed.
    #
    #   Possible values:
    #
    #   * `amazon`: Allow AMIs created by Amazon or verified providers.
    #
    #   * `aws-marketplace`: Allow AMIs created by verified providers in the
    #     Amazon Web Services Marketplace.
    #
    #   * `aws-backup-vault`: Allow AMIs created by Amazon Web Services
    #     Backup.
    #
    #   * 12-digit account ID: Allow AMIs created by this account. One or
    #     more account IDs can be specified.
    #
    #   * `none`: Allow AMIs created by your own account only.
    #
    #   Maximum: 200 values
    #   @return [Array<String>]
    #
    # @!attribute [rw] marketplace_product_codes
    #   The Amazon Web Services Marketplace product codes for allowed
    #   images.
    #
    #   Length: 1-25 characters
    #
    #   Valid characters: Letters (`A–Z, a–z`) and numbers (`0–9`)
    #
    #   Maximum: 50 values
    #   @return [Array<String>]
    #
    # @!attribute [rw] image_names
    #   The names of allowed images. Names can include wildcards (`?` and
    #   `*`).
    #
    #   Length: 1–128 characters. With `?`, the minimum is 3 characters.
    #
    #   Valid characters:
    #
    #   * Letters: `A–Z, a–z`
    #
    #   * Numbers: `0–9`
    #
    #   * Special characters: `( ) [ ] . / - ' @ _ * ?`
    #
    #   * Spaces
    #
    #   Maximum: 50 values
    #   @return [Array<String>]
    #
    # @!attribute [rw] deprecation_time_condition
    #   The maximum period since deprecation for allowed images.
    #   @return [Types::DeprecationTimeCondition]
    #
    # @!attribute [rw] creation_date_condition
    #   The maximum age for allowed images.
    #   @return [Types::CreationDateCondition]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageCriterion AWS API Documentation
    #
    class ImageCriterion < Struct.new(
      :image_providers,
      :marketplace_product_codes,
      :image_names,
      :deprecation_time_condition,
      :creation_date_condition)
      SENSITIVE = []
      include Aws::Structure
    end

    # The criteria that are evaluated to determine which AMIs are
    # discoverable and usable in your account for the specified Amazon Web
    # Services Region.
    #
    # The `ImageCriteria` can include up to:
    #
    # * 10 `ImageCriterion`
    #
    # ^
    #
    # Each `ImageCriterion` can include up to:
    #
    # * 200 values for `ImageProviders`
    #
    # * 50 values for `ImageNames`
    #
    # * 50 values for `MarketplaceProductCodes`
    #
    # For more information, see [How Allowed AMIs works][1] in the *Amazon
    # EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html#how-allowed-amis-works
    #
    # @!attribute [rw] image_providers
    #   The image providers whose images are allowed.
    #
    #   Possible values:
    #
    #   * `amazon`: Allow AMIs created by Amazon or verified providers.
    #
    #   * `aws-marketplace`: Allow AMIs created by verified providers in the
    #     Amazon Web Services Marketplace.
    #
    #   * `aws-backup-vault`: Allow AMIs created by Amazon Web Services
    #     Backup.
    #
    #   * 12-digit account ID: Allow AMIs created by the specified accounts.
    #     One or more account IDs can be specified.
    #
    #   * `none`: Allow AMIs created by your own account only. When `none`
    #     is specified, no other values can be specified.
    #
    #   Maximum: 200 values
    #   @return [Array<String>]
    #
    # @!attribute [rw] marketplace_product_codes
    #   The Amazon Web Services Marketplace product codes for allowed
    #   images.
    #
    #   Length: 1-25 characters
    #
    #   Valid characters: Letters (`A–Z, a–z`) and numbers (`0–9`)
    #
    #   Maximum: 50 values
    #   @return [Array<String>]
    #
    # @!attribute [rw] image_names
    #   The names of allowed images. Names can include wildcards (`?` and
    #   `*`).
    #
    #   Length: 1–128 characters. With `?`, the minimum is 3 characters.
    #
    #   Valid characters:
    #
    #   * Letters: `A–Z, a–z`
    #
    #   * Numbers: `0–9`
    #
    #   * Special characters: `( ) [ ] . / - ' @ _ * ?`
    #
    #   * Spaces
    #
    #   Maximum: 50 values
    #   @return [Array<String>]
    #
    # @!attribute [rw] deprecation_time_condition
    #   The maximum period since deprecation for allowed images.
    #   @return [Types::DeprecationTimeConditionRequest]
    #
    # @!attribute [rw] creation_date_condition
    #   The maximum age for allowed images.
    #   @return [Types::CreationDateConditionRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageCriterionRequest AWS API Documentation
    #
    class ImageCriterionRequest < Struct.new(
      :image_providers,
      :marketplace_product_codes,
      :image_names,
      :deprecation_time_condition,
      :creation_date_condition)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the disk container object for an import image task.
    #
    # @!attribute [rw] description
    #   The description of the disk image.
    #   @return [String]
    #
    # @!attribute [rw] device_name
    #   The block device mapping for the disk.
    #   @return [String]
    #
    # @!attribute [rw] format
    #   The format of the disk image being imported.
    #
    #   Valid values: `OVA` \| `VHD` \| `VHDX` \| `VMDK` \| `RAW`
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the EBS snapshot to be used for importing the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] url
    #   The URL to the Amazon S3-based disk image being imported. The URL
    #   can either be a https URL (https://..) or an Amazon S3 URL (s3://..)
    #   @return [String]
    #
    # @!attribute [rw] user_bucket
    #   The S3 bucket for the disk image.
    #   @return [Types::UserBucket]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageDiskContainer AWS API Documentation
    #
    class ImageDiskContainer < Struct.new(
      :description,
      :device_name,
      :format,
      :snapshot_id,
      :url,
      :user_bucket)
      SENSITIVE = [:url]
      include Aws::Structure
    end

    # Information about the AMI.
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the AMI.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the AMI. If the state is `available`, the AMI
    #   is successfully registered and can be used to launch an instance.
    #   @return [String]
    #
    # @!attribute [rw] image_owner_alias
    #   The alias of the AMI owner.
    #
    #   Valid values: `amazon` \| `aws-backup-vault` \| `aws-marketplace`
    #   @return [String]
    #
    # @!attribute [rw] creation_date
    #   The date and time the AMI was created.
    #   @return [String]
    #
    # @!attribute [rw] deprecation_time
    #   The deprecation date and time of the AMI, in UTC, in the following
    #   format: *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z.
    #   @return [String]
    #
    # @!attribute [rw] image_allowed
    #   If `true`, the AMI satisfies the criteria for Allowed AMIs and can
    #   be discovered and used in the account. If `false`, the AMI can't be
    #   discovered or used in the account.
    #
    #   For more information, see [Control the discovery and use of AMIs in
    #   Amazon EC2 with Allowed AMIs][1] in *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html
    #   @return [Boolean]
    #
    # @!attribute [rw] is_public
    #   Indicates whether the AMI has public launch permissions. A value of
    #   `true` means this AMI has public launch permissions, while `false`
    #   means it has only implicit (AMI owner) or explicit (shared with your
    #   account) launch permissions.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageMetadata AWS API Documentation
    #
    class ImageMetadata < Struct.new(
      :image_id,
      :name,
      :owner_id,
      :state,
      :image_owner_alias,
      :creation_date,
      :deprecation_time,
      :image_allowed,
      :is_public)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about an AMI that is currently in the Recycle Bin.
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] recycle_bin_enter_time
    #   The date and time when the AMI entered the Recycle Bin.
    #   @return [Time]
    #
    # @!attribute [rw] recycle_bin_exit_time
    #   The date and time when the AMI is to be permanently deleted from the
    #   Recycle Bin.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageRecycleBinInfo AWS API Documentation
    #
    class ImageRecycleBinInfo < Struct.new(
      :image_id,
      :name,
      :description,
      :recycle_bin_enter_time,
      :recycle_bin_exit_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # A resource that is referencing an image.
    #
    # @!attribute [rw] image_id
    #   The ID of the referenced image.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of resource referencing the image.
    #   @return [String]
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the resource referencing the
    #   image.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageReference AWS API Documentation
    #
    class ImageReference < Struct.new(
      :image_id,
      :resource_type,
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # The configuration and status of an image usage report.
    #
    # @!attribute [rw] image_id
    #   The ID of the image that was specified when the report was created.
    #   @return [String]
    #
    # @!attribute [rw] report_id
    #   The ID of the report.
    #   @return [String]
    #
    # @!attribute [rw] resource_types
    #   The resource types that were specified when the report was created.
    #   @return [Array<Types::ImageUsageResourceType>]
    #
    # @!attribute [rw] account_ids
    #   The IDs of the Amazon Web Services accounts that were specified when
    #   the report was created.
    #   @return [Array<String>]
    #
    # @!attribute [rw] state
    #   The current state of the report. Possible values:
    #
    #   * `available` - The report is available to view.
    #
    #   * `pending` - The report is being created and not available to view.
    #
    #   * `error` - The report could not be created.
    #   @return [String]
    #
    # @!attribute [rw] state_reason
    #   Provides additional details when the report is in an `error` state.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The date and time when the report was created.
    #   @return [Time]
    #
    # @!attribute [rw] expiration_time
    #   The date and time when Amazon EC2 will delete the report (30 days
    #   after the report was created).
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the report.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageUsageReport AWS API Documentation
    #
    class ImageUsageReport < Struct.new(
      :image_id,
      :report_id,
      :resource_types,
      :account_ids,
      :state,
      :state_reason,
      :creation_time,
      :expiration_time,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # A single entry in an image usage report, detailing how an image is
    # being used by a specific Amazon Web Services account and resource
    # type.
    #
    # @!attribute [rw] resource_type
    #   The type of resource (`ec2:Instance` or `ec2:LaunchTemplate`).
    #   @return [String]
    #
    # @!attribute [rw] report_id
    #   The ID of the report.
    #   @return [String]
    #
    # @!attribute [rw] usage_count
    #   The number of times resources of this type reference this image in
    #   the account.
    #   @return [Integer]
    #
    # @!attribute [rw] account_id
    #   The ID of the account that uses the image.
    #   @return [String]
    #
    # @!attribute [rw] image_id
    #   The ID of the image.
    #   @return [String]
    #
    # @!attribute [rw] report_creation_time
    #   The date and time the report creation was initiated.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageUsageReportEntry AWS API Documentation
    #
    class ImageUsageReportEntry < Struct.new(
      :resource_type,
      :report_id,
      :usage_count,
      :account_id,
      :image_id,
      :report_creation_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # A resource type to include in the report. Associated options can also
    # be specified if the resource type is a launch template.
    #
    # @!attribute [rw] resource_type
    #   The resource type.
    #
    #   Valid values: `ec2:Instance` \| `ec2:LaunchTemplate`
    #   @return [String]
    #
    # @!attribute [rw] resource_type_options
    #   The options that affect the scope of the report. Valid only when
    #   `ResourceType` is `ec2:LaunchTemplate`.
    #   @return [Array<Types::ImageUsageResourceTypeOption>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageUsageResourceType AWS API Documentation
    #
    class ImageUsageResourceType < Struct.new(
      :resource_type,
      :resource_type_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options that affect the scope of the report.
    #
    # @!attribute [rw] option_name
    #   The name of the option.
    #   @return [String]
    #
    # @!attribute [rw] option_values
    #   The number of launch template versions to check.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageUsageResourceTypeOption AWS API Documentation
    #
    class ImageUsageResourceTypeOption < Struct.new(
      :option_name,
      :option_values)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options that affect the scope of the report.
    #
    # @!attribute [rw] option_name
    #   The name of the option.
    #
    #   Valid value: `version-depth` - The number of launch template
    #   versions to check.
    #   @return [String]
    #
    # @!attribute [rw] option_values
    #   A value for the specified option.
    #
    #   Valid values: Integers between `1` and `10000`
    #
    #   Default: `20`
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageUsageResourceTypeOptionRequest AWS API Documentation
    #
    class ImageUsageResourceTypeOptionRequest < Struct.new(
      :option_name,
      :option_values)
      SENSITIVE = []
      include Aws::Structure
    end

    # A resource type to include in the report. Associated options can also
    # be specified if the resource type is a launch template.
    #
    # @!attribute [rw] resource_type
    #   The resource type.
    #
    #   Valid values: `ec2:Instance` \| `ec2:LaunchTemplate`
    #   @return [String]
    #
    # @!attribute [rw] resource_type_options
    #   The options that affect the scope of the report. Valid only when
    #   `ResourceType` is `ec2:LaunchTemplate`.
    #   @return [Array<Types::ImageUsageResourceTypeOptionRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImageUsageResourceTypeRequest AWS API Documentation
    #
    class ImageUsageResourceTypeRequest < Struct.new(
      :resource_type,
      :resource_type_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint to which the client certificate
    #   revocation list applies.
    #   @return [String]
    #
    # @!attribute [rw] certificate_revocation_list
    #   The client certificate revocation list file. For more information,
    #   see [Generate a Client Certificate Revocation List][1] in the
    #   *Client VPN Administrator Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-certificates.html#cvpn-working-certificates-generate
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportClientVpnClientCertificateRevocationListRequest AWS API Documentation
    #
    class ImportClientVpnClientCertificateRevocationListRequest < Struct.new(
      :client_vpn_endpoint_id,
      :certificate_revocation_list,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportClientVpnClientCertificateRevocationListResult AWS API Documentation
    #
    class ImportClientVpnClientCertificateRevocationListResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # The request information of license configurations.
    #
    # @!attribute [rw] license_configuration_arn
    #   The ARN of a license configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImageLicenseConfigurationRequest AWS API Documentation
    #
    class ImportImageLicenseConfigurationRequest < Struct.new(
      :license_configuration_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # The response information for license configurations.
    #
    # @!attribute [rw] license_configuration_arn
    #   The ARN of a license configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImageLicenseConfigurationResponse AWS API Documentation
    #
    class ImportImageLicenseConfigurationResponse < Struct.new(
      :license_configuration_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] architecture
    #   The architecture of the virtual machine.
    #
    #   Valid values: `i386` \| `x86_64`
    #   @return [String]
    #
    # @!attribute [rw] client_data
    #   The client-specific data.
    #   @return [Types::ClientData]
    #
    # @!attribute [rw] client_token
    #   The token to enable idempotency for VM import requests.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description string for the import image task.
    #   @return [String]
    #
    # @!attribute [rw] disk_containers
    #   Information about the disk containers.
    #   @return [Array<Types::ImageDiskContainer>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] encrypted
    #   Specifies whether the destination AMI of the imported image should
    #   be encrypted. The default KMS key for EBS is used unless you specify
    #   a non-default KMS key using `KmsKeyId`. For more information, see
    #   [Amazon EBS Encryption][1] in the *Amazon Elastic Compute Cloud User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html
    #   @return [Boolean]
    #
    # @!attribute [rw] hypervisor
    #   The target hypervisor platform.
    #
    #   Valid values: `xen`
    #   @return [String]
    #
    # @!attribute [rw] kms_key_id
    #   An identifier for the symmetric KMS key to use when creating the
    #   encrypted AMI. This parameter is only required if you want to use a
    #   non-default KMS key; if this parameter is not specified, the default
    #   KMS key for EBS is used. If a `KmsKeyId` is specified, the
    #   `Encrypted` flag must also be set.
    #
    #   The KMS key identifier may be provided in any of the following
    #   formats:
    #
    #   * Key ID
    #
    #   * Key alias
    #
    #   * ARN using key ID. The ID ARN contains the `arn:aws:kms` namespace,
    #     followed by the Region of the key, the Amazon Web Services account
    #     ID of the key owner, the `key` namespace, and then the key ID. For
    #     example,
    #     arn:aws:kms:*us-east-1*:*012345678910*:key/*abcd1234-a123-456a-a12b-a123b4cd56ef*.
    #
    #   * ARN using key alias. The alias ARN contains the `arn:aws:kms`
    #     namespace, followed by the Region of the key, the Amazon Web
    #     Services account ID of the key owner, the `alias` namespace, and
    #     then the key alias. For example,
    #     arn:aws:kms:*us-east-1*:*012345678910*:alias/*ExampleAlias*.
    #
    #   Amazon Web Services parses `KmsKeyId` asynchronously, meaning that
    #   the action you call may appear to complete even though you provided
    #   an invalid identifier. This action will eventually report failure.
    #
    #   The specified KMS key must exist in the Region that the AMI is being
    #   copied to.
    #
    #   Amazon EBS does not support asymmetric KMS keys.
    #   @return [String]
    #
    # @!attribute [rw] license_type
    #   The license type to be used for the Amazon Machine Image (AMI) after
    #   importing.
    #
    #   Specify `AWS` to replace the source-system license with an Amazon
    #   Web Services license or `BYOL` to retain the source-system license.
    #   Leaving this parameter undefined is the same as choosing `AWS` when
    #   importing a Windows Server operating system, and the same as
    #   choosing `BYOL` when importing a Windows client operating system
    #   (such as Windows 10) or a Linux operating system.
    #
    #   To use `BYOL`, you must have existing licenses with rights to use
    #   these licenses in a third party cloud, such as Amazon Web Services.
    #   For more information, see [Prerequisites][1] in the VM Import/Export
    #   User Guide.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The operating system of the virtual machine. If you import a VM that
    #   is compatible with Unified Extensible Firmware Interface (UEFI)
    #   using an EBS snapshot, you must specify a value for the platform.
    #
    #   Valid values: `Windows` \| `Linux`
    #   @return [String]
    #
    # @!attribute [rw] role_name
    #   The name of the role to use when not using the default role,
    #   'vmimport'.
    #   @return [String]
    #
    # @!attribute [rw] license_specifications
    #   The ARNs of the license configurations.
    #   @return [Array<Types::ImportImageLicenseConfigurationRequest>]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the import image task during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] usage_operation
    #   The usage operation value. For more information, see [Licensing
    #   options][1] in the *VM Import/Export User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#prerequisites
    #   @return [String]
    #
    # @!attribute [rw] boot_mode
    #   The boot mode of the virtual machine.
    #
    #   <note markdown="1"> The `uefi-preferred` boot mode isn't supported for importing
    #   images. For more information, see [Boot modes][1] in the *VM
    #   Import/Export User Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vm-import/latest/userguide/prerequisites.html#vmimport-boot-modes
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImageRequest AWS API Documentation
    #
    class ImportImageRequest < Struct.new(
      :architecture,
      :client_data,
      :client_token,
      :description,
      :disk_containers,
      :dry_run,
      :encrypted,
      :hypervisor,
      :kms_key_id,
      :license_type,
      :platform,
      :role_name,
      :license_specifications,
      :tag_specifications,
      :usage_operation,
      :boot_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] architecture
    #   The architecture of the virtual machine.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the import task.
    #   @return [String]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the AMI is encrypted.
    #   @return [Boolean]
    #
    # @!attribute [rw] hypervisor
    #   The target hypervisor of the import task.
    #   @return [String]
    #
    # @!attribute [rw] image_id
    #   The ID of the Amazon Machine Image (AMI) created by the import task.
    #   @return [String]
    #
    # @!attribute [rw] import_task_id
    #   The task ID of the import image task.
    #   @return [String]
    #
    # @!attribute [rw] kms_key_id
    #   The identifier for the symmetric KMS key that was used to create the
    #   encrypted AMI.
    #   @return [String]
    #
    # @!attribute [rw] license_type
    #   The license type of the virtual machine.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The operating system of the virtual machine.
    #   @return [String]
    #
    # @!attribute [rw] progress
    #   The progress of the task.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_details
    #   Information about the snapshots.
    #   @return [Array<Types::SnapshotDetail>]
    #
    # @!attribute [rw] status
    #   A brief status of the task.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   A detailed status message of the import task.
    #   @return [String]
    #
    # @!attribute [rw] license_specifications
    #   The ARNs of the license configurations.
    #   @return [Array<Types::ImportImageLicenseConfigurationResponse>]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the import image task.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] usage_operation
    #   The usage operation value.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImageResult AWS API Documentation
    #
    class ImportImageResult < Struct.new(
      :architecture,
      :description,
      :encrypted,
      :hypervisor,
      :image_id,
      :import_task_id,
      :kms_key_id,
      :license_type,
      :platform,
      :progress,
      :snapshot_details,
      :status,
      :status_message,
      :license_specifications,
      :tags,
      :usage_operation)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an import image task.
    #
    # @!attribute [rw] architecture
    #   The architecture of the virtual machine.
    #
    #   Valid values: `i386` \| `x86_64` \| `arm64`
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the import task.
    #   @return [String]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the image is encrypted.
    #   @return [Boolean]
    #
    # @!attribute [rw] hypervisor
    #   The target hypervisor for the import task.
    #
    #   Valid values: `xen`
    #   @return [String]
    #
    # @!attribute [rw] image_id
    #   The ID of the Amazon Machine Image (AMI) of the imported virtual
    #   machine.
    #   @return [String]
    #
    # @!attribute [rw] import_task_id
    #   The ID of the import image task.
    #   @return [String]
    #
    # @!attribute [rw] kms_key_id
    #   The identifier for the KMS key that was used to create the encrypted
    #   image.
    #   @return [String]
    #
    # @!attribute [rw] license_type
    #   The license type of the virtual machine.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The description string for the import image task.
    #   @return [String]
    #
    # @!attribute [rw] progress
    #   The percentage of progress of the import image task.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_details
    #   Information about the snapshots.
    #   @return [Array<Types::SnapshotDetail>]
    #
    # @!attribute [rw] status
    #   A brief status for the import image task.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   A descriptive status message for the import image task.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags for the import image task.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] license_specifications
    #   The ARNs of the license configurations that are associated with the
    #   import image task.
    #   @return [Array<Types::ImportImageLicenseConfigurationResponse>]
    #
    # @!attribute [rw] usage_operation
    #   The usage operation value.
    #   @return [String]
    #
    # @!attribute [rw] boot_mode
    #   The boot mode of the virtual machine.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportImageTask AWS API Documentation
    #
    class ImportImageTask < Struct.new(
      :architecture,
      :description,
      :encrypted,
      :hypervisor,
      :image_id,
      :import_task_id,
      :kms_key_id,
      :license_type,
      :platform,
      :progress,
      :snapshot_details,
      :status,
      :status_message,
      :tags,
      :license_specifications,
      :usage_operation,
      :boot_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the launch specification for VM import.
    #
    # @!attribute [rw] architecture
    #   The architecture of the instance.
    #   @return [String]
    #
    # @!attribute [rw] group_names
    #   The security group names.
    #   @return [Array<String>]
    #
    # @!attribute [rw] group_ids
    #   The security group IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] additional_info
    #   Reserved.
    #   @return [String]
    #
    # @!attribute [rw] user_data
    #   The Base64-encoded user data to make available to the instance.
    #   @return [Types::UserData]
    #
    # @!attribute [rw] instance_type
    #   The instance type. For more information about the instance types
    #   that you can import, see [Instance Types][1] in the VM Import/Export
    #   User Guide.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#vmimport-instance-types
    #   @return [String]
    #
    # @!attribute [rw] placement
    #   The placement information for the instance.
    #   @return [Types::Placement]
    #
    # @!attribute [rw] monitoring
    #   Indicates whether monitoring is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] subnet_id
    #   \[EC2-VPC\] The ID of the subnet in which to launch the instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_initiated_shutdown_behavior
    #   Indicates whether an instance stops or terminates when you initiate
    #   shutdown from the instance (using the operating system command for
    #   system shutdown).
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   \[EC2-VPC\] An available IP address from the IP address range of the
    #   subnet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceLaunchSpecification AWS API Documentation
    #
    class ImportInstanceLaunchSpecification < Struct.new(
      :architecture,
      :group_names,
      :group_ids,
      :additional_info,
      :user_data,
      :instance_type,
      :placement,
      :monitoring,
      :subnet_id,
      :instance_initiated_shutdown_behavior,
      :private_ip_address)
      SENSITIVE = [:user_data]
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   A description for the instance being imported.
    #   @return [String]
    #
    # @!attribute [rw] launch_specification
    #   The launch specification.
    #   @return [Types::ImportInstanceLaunchSpecification]
    #
    # @!attribute [rw] disk_images
    #   The disk image.
    #   @return [Array<Types::DiskImage>]
    #
    # @!attribute [rw] platform
    #   The instance operating system.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceRequest AWS API Documentation
    #
    class ImportInstanceRequest < Struct.new(
      :dry_run,
      :description,
      :launch_specification,
      :disk_images,
      :platform)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] conversion_task
    #   Information about the conversion task.
    #   @return [Types::ConversionTask]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceResult AWS API Documentation
    #
    class ImportInstanceResult < Struct.new(
      :conversion_task)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an import instance task.
    #
    # @!attribute [rw] description
    #   A description of the task.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The instance operating system.
    #   @return [String]
    #
    # @!attribute [rw] volumes
    #   The volumes.
    #   @return [Array<Types::ImportInstanceVolumeDetailItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceTaskDetails AWS API Documentation
    #
    class ImportInstanceTaskDetails < Struct.new(
      :description,
      :instance_id,
      :platform,
      :volumes)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an import volume task.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone where the resulting instance will reside.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone where the resulting instance will
    #   reside.
    #   @return [String]
    #
    # @!attribute [rw] bytes_converted
    #   The number of bytes converted so far.
    #   @return [Integer]
    #
    # @!attribute [rw] description
    #   A description of the task.
    #   @return [String]
    #
    # @!attribute [rw] image
    #   The image.
    #   @return [Types::DiskImageDescription]
    #
    # @!attribute [rw] status
    #   The status of the import of this particular disk image.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The status information or errors related to the disk image.
    #   @return [String]
    #
    # @!attribute [rw] volume
    #   The volume.
    #   @return [Types::DiskImageVolumeDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportInstanceVolumeDetailItem AWS API Documentation
    #
    class ImportInstanceVolumeDetailItem < Struct.new(
      :availability_zone,
      :availability_zone_id,
      :bytes_converted,
      :description,
      :image,
      :status,
      :status_message,
      :volume)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] tag_specifications
    #   The tags to apply to the imported key pair.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] key_name
    #   A unique name for the key pair.
    #   @return [String]
    #
    # @!attribute [rw] public_key_material
    #   The public key.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPairRequest AWS API Documentation
    #
    class ImportKeyPairRequest < Struct.new(
      :tag_specifications,
      :dry_run,
      :key_name,
      :public_key_material)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] key_fingerprint
    #   * For RSA key pairs, the key fingerprint is the MD5 public key
    #     fingerprint as specified in section 4 of RFC 4716.
    #
    #   * For ED25519 key pairs, the key fingerprint is the base64-encoded
    #     SHA-256 digest, which is the default for OpenSSH, starting with
    #     [OpenSSH 6.8][1].
    #
    #
    #
    #   [1]: http://www.openssh.com/txt/release-6.8
    #   @return [String]
    #
    # @!attribute [rw] key_name
    #   The key pair name that you provided.
    #   @return [String]
    #
    # @!attribute [rw] key_pair_id
    #   The ID of the resulting key pair.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags applied to the imported key pair.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportKeyPairResult AWS API Documentation
    #
    class ImportKeyPairResult < Struct.new(
      :key_fingerprint,
      :key_name,
      :key_pair_id,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_data
    #   The client-specific data.
    #   @return [Types::ClientData]
    #
    # @!attribute [rw] client_token
    #   Token to enable idempotency for VM import requests.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description string for the import snapshot task.
    #   @return [String]
    #
    # @!attribute [rw] disk_container
    #   Information about the disk container.
    #   @return [Types::SnapshotDiskContainer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] encrypted
    #   Specifies whether the destination snapshot of the imported image
    #   should be encrypted. The default KMS key for EBS is used unless you
    #   specify a non-default KMS key using `KmsKeyId`. For more
    #   information, see [Amazon EBS Encryption][1] in the *Amazon Elastic
    #   Compute Cloud User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html
    #   @return [Boolean]
    #
    # @!attribute [rw] kms_key_id
    #   An identifier for the symmetric KMS key to use when creating the
    #   encrypted snapshot. This parameter is only required if you want to
    #   use a non-default KMS key; if this parameter is not specified, the
    #   default KMS key for EBS is used. If a `KmsKeyId` is specified, the
    #   `Encrypted` flag must also be set.
    #
    #   The KMS key identifier may be provided in any of the following
    #   formats:
    #
    #   * Key ID
    #
    #   * Key alias
    #
    #   * ARN using key ID. The ID ARN contains the `arn:aws:kms` namespace,
    #     followed by the Region of the key, the Amazon Web Services account
    #     ID of the key owner, the `key` namespace, and then the key ID. For
    #     example,
    #     arn:aws:kms:*us-east-1*:*012345678910*:key/*abcd1234-a123-456a-a12b-a123b4cd56ef*.
    #
    #   * ARN using key alias. The alias ARN contains the `arn:aws:kms`
    #     namespace, followed by the Region of the key, the Amazon Web
    #     Services account ID of the key owner, the `alias` namespace, and
    #     then the key alias. For example,
    #     arn:aws:kms:*us-east-1*:*012345678910*:alias/*ExampleAlias*.
    #
    #   Amazon Web Services parses `KmsKeyId` asynchronously, meaning that
    #   the action you call may appear to complete even though you provided
    #   an invalid identifier. This action will eventually report failure.
    #
    #   The specified KMS key must exist in the Region that the snapshot is
    #   being copied to.
    #
    #   Amazon EBS does not support asymmetric KMS keys.
    #   @return [String]
    #
    # @!attribute [rw] role_name
    #   The name of the role to use when not using the default role,
    #   'vmimport'.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the import snapshot task during creation.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshotRequest AWS API Documentation
    #
    class ImportSnapshotRequest < Struct.new(
      :client_data,
      :client_token,
      :description,
      :disk_container,
      :dry_run,
      :encrypted,
      :kms_key_id,
      :role_name,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] description
    #   A description of the import snapshot task.
    #   @return [String]
    #
    # @!attribute [rw] import_task_id
    #   The ID of the import snapshot task.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_task_detail
    #   Information about the import snapshot task.
    #   @return [Types::SnapshotTaskDetail]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the import snapshot task.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshotResult AWS API Documentation
    #
    class ImportSnapshotResult < Struct.new(
      :description,
      :import_task_id,
      :snapshot_task_detail,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an import snapshot task.
    #
    # @!attribute [rw] description
    #   A description of the import snapshot task.
    #   @return [String]
    #
    # @!attribute [rw] import_task_id
    #   The ID of the import snapshot task.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_task_detail
    #   Describes an import snapshot task.
    #   @return [Types::SnapshotTaskDetail]
    #
    # @!attribute [rw] tags
    #   The tags for the import snapshot task.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportSnapshotTask AWS API Documentation
    #
    class ImportSnapshotTask < Struct.new(
      :description,
      :import_task_id,
      :snapshot_task_detail,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone for the resulting EBS volume.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` must be specified,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone for the resulting EBS volume.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` must be specified,
    #   but not both.
    #   @return [String]
    #
    # @!attribute [rw] image
    #   The disk image.
    #   @return [Types::DiskImageDetail]
    #
    # @!attribute [rw] description
    #   A description of the volume.
    #   @return [String]
    #
    # @!attribute [rw] volume
    #   The volume size.
    #   @return [Types::VolumeDetail]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolumeRequest AWS API Documentation
    #
    class ImportVolumeRequest < Struct.new(
      :availability_zone_id,
      :dry_run,
      :availability_zone,
      :image,
      :description,
      :volume)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] conversion_task
    #   Information about the conversion task.
    #   @return [Types::ConversionTask]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolumeResult AWS API Documentation
    #
    class ImportVolumeResult < Struct.new(
      :conversion_task)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an import volume task.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone where the resulting volume will reside.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone where the resulting volume will
    #   reside.
    #   @return [String]
    #
    # @!attribute [rw] bytes_converted
    #   The number of bytes converted so far.
    #   @return [Integer]
    #
    # @!attribute [rw] description
    #   The description you provided when starting the import volume task.
    #   @return [String]
    #
    # @!attribute [rw] image
    #   The image.
    #   @return [Types::DiskImageDescription]
    #
    # @!attribute [rw] volume
    #   The volume.
    #   @return [Types::DiskImageVolumeDescription]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ImportVolumeTaskDetails AWS API Documentation
    #
    class ImportVolumeTaskDetails < Struct.new(
      :availability_zone,
      :availability_zone_id,
      :bytes_converted,
      :description,
      :image,
      :volume)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #  </note>
    #
    # Describes the Inference accelerators for the instance type.
    #
    # @!attribute [rw] accelerators
    #   Describes the Inference accelerators for the instance type.
    #   @return [Array<Types::InferenceDeviceInfo>]
    #
    # @!attribute [rw] total_inference_memory_in_mi_b
    #   The total size of the memory for the inference accelerators for the
    #   instance type, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InferenceAcceleratorInfo AWS API Documentation
    #
    class InferenceAcceleratorInfo < Struct.new(
      :accelerators,
      :total_inference_memory_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #  </note>
    #
    # Describes the Inference accelerators for the instance type.
    #
    # @!attribute [rw] count
    #   The number of Inference accelerators for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] name
    #   The name of the Inference accelerator.
    #   @return [String]
    #
    # @!attribute [rw] manufacturer
    #   The manufacturer of the Inference accelerator.
    #   @return [String]
    #
    # @!attribute [rw] memory_info
    #   Describes the memory available to the inference accelerator.
    #   @return [Types::InferenceDeviceMemoryInfo]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InferenceDeviceInfo AWS API Documentation
    #
    class InferenceDeviceInfo < Struct.new(
      :count,
      :name,
      :manufacturer,
      :memory_info)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #  </note>
    #
    # Describes the memory available to the inference accelerator.
    #
    # @!attribute [rw] size_in_mi_b
    #   The size of the memory available to the inference accelerator, in
    #   MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InferenceDeviceMemoryInfo AWS API Documentation
    #
    class InferenceDeviceMemoryInfo < Struct.new(
      :size_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the volume initialization. For more information, see
    # [Initialize Amazon EBS volumes][1].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html
    #
    # @!attribute [rw] initialization_type
    #   The method used for volume initialization. Possible values include:
    #
    #   * `default` - Volume initialized using the default volume
    #     initialization rate or fast snapshot restore.
    #
    #   * `provisioned-rate` - Volume initialized using an Amazon EBS
    #     Provisioned Rate for Volume Initialization.
    #   @return [String]
    #
    # @!attribute [rw] progress
    #   The current volume initialization progress as a percentage (0-100).
    #   Returns `100` when volume initialization has completed.
    #   @return [Integer]
    #
    # @!attribute [rw] estimated_time_to_complete_in_seconds
    #   The estimated remaining time, in seconds, for volume initialization
    #   to complete. Returns `0` when volume initialization has completed.
    #
    #   Only available for volumes created with Amazon EBS Provisioned Rate
    #   for Volume Initialization.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InitializationStatusDetails AWS API Documentation
    #
    class InitializationStatusDetails < Struct.new(
      :initialization_type,
      :progress,
      :estimated_time_to_complete_in_seconds)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an instance.
    #
    # @!attribute [rw] architecture
    #   The architecture of the image.
    #   @return [String]
    #
    # @!attribute [rw] block_device_mappings
    #   Any block device mapping entries for the instance.
    #   @return [Array<Types::InstanceBlockDeviceMapping>]
    #
    # @!attribute [rw] client_token
    #   The idempotency token you provided when you launched the instance,
    #   if applicable.
    #   @return [String]
    #
    # @!attribute [rw] ebs_optimized
    #   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 I/O performance.
    #   This optimization isn't available with all instance types.
    #   Additional usage charges apply when using an EBS Optimized instance.
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_support
    #   Specifies whether enhanced networking with ENA is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] hypervisor
    #   The hypervisor type of the instance. The value `xen` is used for
    #   both Xen and Nitro hypervisors.
    #   @return [String]
    #
    # @!attribute [rw] iam_instance_profile
    #   The IAM instance profile associated with the instance, if
    #   applicable.
    #   @return [Types::IamInstanceProfile]
    #
    # @!attribute [rw] instance_lifecycle
    #   Indicates whether this is a Spot Instance or a Scheduled Instance.
    #   @return [String]
    #
    # @!attribute [rw] elastic_gpu_associations
    #   Deprecated.
    #
    #   <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #    </note>
    #   @return [Array<Types::ElasticGpuAssociation>]
    #
    # @!attribute [rw] elastic_inference_accelerator_associations
    #   Deprecated
    #
    #   <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #    </note>
    #   @return [Array<Types::ElasticInferenceAcceleratorAssociation>]
    #
    # @!attribute [rw] network_interfaces
    #   The network interfaces for the instance.
    #   @return [Array<Types::InstanceNetworkInterface>]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost.
    #   @return [String]
    #
    # @!attribute [rw] root_device_name
    #   The device name of the root device volume (for example,
    #   `/dev/sda1`).
    #   @return [String]
    #
    # @!attribute [rw] root_device_type
    #   The root device type used by the AMI. The AMI can use an EBS volume
    #   or an instance store volume.
    #   @return [String]
    #
    # @!attribute [rw] security_groups
    #   The security groups for the instance.
    #   @return [Array<Types::GroupIdentifier>]
    #
    # @!attribute [rw] source_dest_check
    #   Indicates whether source/destination checking is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_instance_request_id
    #   If the request is a Spot Instance request, the ID of the request.
    #   @return [String]
    #
    # @!attribute [rw] sriov_net_support
    #   Specifies whether enhanced networking with the Intel 82599 Virtual
    #   Function interface is enabled.
    #   @return [String]
    #
    # @!attribute [rw] state_reason
    #   The reason for the most recent state transition.
    #   @return [Types::StateReason]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the instance.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] virtualization_type
    #   The virtualization type of the instance.
    #   @return [String]
    #
    # @!attribute [rw] cpu_options
    #   The CPU options for the instance.
    #   @return [Types::CpuOptions]
    #
    # @!attribute [rw] capacity_block_id
    #   The ID of the Capacity Block.
    #
    #   <note markdown="1"> For P5 instances, a Capacity Block ID refers to a group of
    #   instances. For Trn2u instances, a capacity block ID refers to an EC2
    #   UltraServer.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_specification
    #   Information about the Capacity Reservation targeting option.
    #   @return [Types::CapacityReservationSpecificationResponse]
    #
    # @!attribute [rw] hibernation_options
    #   Indicates whether the instance is enabled for hibernation.
    #   @return [Types::HibernationOptions]
    #
    # @!attribute [rw] licenses
    #   The license configurations for the instance.
    #   @return [Array<Types::LicenseConfiguration>]
    #
    # @!attribute [rw] metadata_options
    #   The metadata options for the instance.
    #   @return [Types::InstanceMetadataOptionsResponse]
    #
    # @!attribute [rw] enclave_options
    #   Indicates whether the instance is enabled for Amazon Web Services
    #   Nitro Enclaves.
    #   @return [Types::EnclaveOptions]
    #
    # @!attribute [rw] boot_mode
    #   The boot mode that was specified by the AMI. If the value is
    #   `uefi-preferred`, the AMI supports both UEFI and Legacy BIOS. The
    #   `currentInstanceBootMode` parameter is the boot mode that is used to
    #   boot the instance at launch or start.
    #
    #   <note markdown="1"> The operating system contained in the AMI must be configured to
    #   support the specified boot mode.
    #
    #    </note>
    #
    #   For more information, see [Boot modes][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html
    #   @return [String]
    #
    # @!attribute [rw] platform_details
    #   The platform details value for the instance. For more information,
    #   see [AMI billing information fields][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html
    #   @return [String]
    #
    # @!attribute [rw] usage_operation
    #   The usage operation value for the instance. For more information,
    #   see [AMI billing information fields][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html
    #   @return [String]
    #
    # @!attribute [rw] usage_operation_update_time
    #   The time that the usage operation was last updated.
    #   @return [Time]
    #
    # @!attribute [rw] private_dns_name_options
    #   The options for the instance hostname.
    #   @return [Types::PrivateDnsNameOptionsResponse]
    #
    # @!attribute [rw] ipv_6_address
    #   The IPv6 address assigned to the instance.
    #   @return [String]
    #
    # @!attribute [rw] tpm_support
    #   If the instance is configured for NitroTPM support, the value is
    #   `v2.0`. For more information, see [NitroTPM][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html
    #   @return [String]
    #
    # @!attribute [rw] maintenance_options
    #   Provides information on the recovery and maintenance options of your
    #   instance.
    #   @return [Types::InstanceMaintenanceOptions]
    #
    # @!attribute [rw] current_instance_boot_mode
    #   The boot mode that is used to boot the instance at launch or start.
    #   For more information, see [Boot modes][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html
    #   @return [String]
    #
    # @!attribute [rw] network_performance_options
    #   Contains settings for the network performance options for your
    #   instance.
    #   @return [Types::InstanceNetworkPerformanceOptions]
    #
    # @!attribute [rw] operator
    #   The service provider that manages the instance.
    #   @return [Types::OperatorResponse]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI used to launch the instance.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the instance.
    #   @return [Types::InstanceState]
    #
    # @!attribute [rw] private_dns_name
    #   \[IPv4 only\] The private DNS hostname name assigned to the
    #   instance. This DNS hostname can only be used inside the Amazon EC2
    #   network. This name is not available until the instance enters the
    #   `running` state.
    #
    #   The Amazon-provided DNS server resolves Amazon-provided private DNS
    #   hostnames if you've enabled DNS resolution and DNS hostnames in
    #   your VPC. If you are not using the Amazon-provided DNS server in
    #   your VPC, your custom domain name servers must resolve the hostname
    #   as appropriate.
    #   @return [String]
    #
    # @!attribute [rw] public_dns_name
    #   The public DNS name assigned to the instance. This name is not
    #   available until the instance enters the `running` state. This name
    #   is only available if you've enabled DNS hostnames for your VPC. The
    #   format of this name depends on the [public hostname type][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hostname-types.html#public-hostnames
    #   @return [String]
    #
    # @!attribute [rw] state_transition_reason
    #   The reason for the most recent state transition. This might be an
    #   empty string.
    #   @return [String]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair, if this instance was launched with an
    #   associated key pair.
    #   @return [String]
    #
    # @!attribute [rw] ami_launch_index
    #   The AMI launch index, which can be used to find this instance in the
    #   launch group.
    #   @return [Integer]
    #
    # @!attribute [rw] product_codes
    #   The product codes attached to this instance, if applicable.
    #   @return [Array<Types::ProductCode>]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] launch_time
    #   The time that the instance was last launched. To determine the time
    #   that instance was first launched, see the attachment time for the
    #   primary network interface.
    #   @return [Time]
    #
    # @!attribute [rw] placement
    #   The location where the instance launched, if applicable.
    #   @return [Types::Placement]
    #
    # @!attribute [rw] kernel_id
    #   The kernel associated with this instance, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] ramdisk_id
    #   The RAM disk associated with this instance, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The platform. This value is `windows` for Windows instances;
    #   otherwise, it is empty.
    #   @return [String]
    #
    # @!attribute [rw] monitoring
    #   The monitoring for the instance.
    #   @return [Types::Monitoring]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which the instance is running.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC in which the instance is running.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The private IPv4 address assigned to the instance.
    #   @return [String]
    #
    # @!attribute [rw] public_ip_address
    #   The public IPv4 address, or the Carrier IP address assigned to the
    #   instance, if applicable.
    #
    #   A Carrier IP address only applies to an instance launched in a
    #   subnet associated with a Wavelength Zone.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Instance AWS API Documentation
    #
    class Instance < Struct.new(
      :architecture,
      :block_device_mappings,
      :client_token,
      :ebs_optimized,
      :ena_support,
      :hypervisor,
      :iam_instance_profile,
      :instance_lifecycle,
      :elastic_gpu_associations,
      :elastic_inference_accelerator_associations,
      :network_interfaces,
      :outpost_arn,
      :root_device_name,
      :root_device_type,
      :security_groups,
      :source_dest_check,
      :spot_instance_request_id,
      :sriov_net_support,
      :state_reason,
      :tags,
      :virtualization_type,
      :cpu_options,
      :capacity_block_id,
      :capacity_reservation_id,
      :capacity_reservation_specification,
      :hibernation_options,
      :licenses,
      :metadata_options,
      :enclave_options,
      :boot_mode,
      :platform_details,
      :usage_operation,
      :usage_operation_update_time,
      :private_dns_name_options,
      :ipv_6_address,
      :tpm_support,
      :maintenance_options,
      :current_instance_boot_mode,
      :network_performance_options,
      :operator,
      :instance_id,
      :image_id,
      :state,
      :private_dns_name,
      :public_dns_name,
      :state_transition_reason,
      :key_name,
      :ami_launch_index,
      :product_codes,
      :instance_type,
      :launch_time,
      :placement,
      :kernel_id,
      :ramdisk_id,
      :platform,
      :monitoring,
      :subnet_id,
      :vpc_id,
      :private_ip_address,
      :public_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # ENA Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
    # technology to increase the maximum bandwidth used per stream and
    # minimize tail latency of network traffic between EC2 instances. With
    # ENA Express, you can communicate between two EC2 instances in the same
    # subnet within the same account, or in different accounts. Both sending
    # and receiving instances must have ENA Express enabled.
    #
    # To improve the reliability of network packet delivery, ENA Express
    # reorders network packets on the receiving end by default. However,
    # some UDP-based applications are designed to handle network packets
    # that are out of order to reduce the overhead for packet delivery at
    # the network layer. When ENA Express is enabled, you can specify
    # whether UDP network traffic uses it.
    #
    # @!attribute [rw] ena_srd_enabled
    #   Indicates whether ENA Express is enabled for the network interface.
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_srd_udp_specification
    #   Configures ENA Express for UDP network traffic.
    #   @return [Types::InstanceAttachmentEnaSrdUdpSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceAttachmentEnaSrdSpecification AWS API Documentation
    #
    class InstanceAttachmentEnaSrdSpecification < Struct.new(
      :ena_srd_enabled,
      :ena_srd_udp_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # ENA Express is compatible with both TCP and UDP transport protocols.
    # When it's enabled, TCP traffic automatically uses it. However, some
    # UDP-based applications are designed to handle network packets that are
    # out of order, without a need for retransmission, such as live video
    # broadcasting or other near-real-time applications. For UDP traffic,
    # you can specify whether to use ENA Express, based on your application
    # environment needs.
    #
    # @!attribute [rw] ena_srd_udp_enabled
    #   Indicates whether UDP traffic to and from the instance uses ENA
    #   Express. To specify this setting, you must first enable ENA Express.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceAttachmentEnaSrdUdpSpecification AWS API Documentation
    #
    class InstanceAttachmentEnaSrdUdpSpecification < Struct.new(
      :ena_srd_udp_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an instance attribute.
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mapping of the instance.
    #   @return [Array<Types::InstanceBlockDeviceMapping>]
    #
    # @!attribute [rw] disable_api_termination
    #   Indicates whether termination protection is enabled. If the value is
    #   `true`, you can't terminate the instance using the Amazon EC2
    #   console, command line tools, or API.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] ena_support
    #   Indicates whether enhanced networking with ENA is enabled.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] enclave_options
    #   Indicates whether the instance is enabled for Amazon Web Services
    #   Nitro Enclaves.
    #   @return [Types::EnclaveOptions]
    #
    # @!attribute [rw] ebs_optimized
    #   Indicates whether the instance is optimized for Amazon EBS I/O.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_initiated_shutdown_behavior
    #   Indicates whether an instance stops or terminates when you initiate
    #   shutdown from the instance (using the operating system command for
    #   system shutdown).
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] kernel_id
    #   The kernel ID.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] product_codes
    #   The product codes.
    #   @return [Array<Types::ProductCode>]
    #
    # @!attribute [rw] ramdisk_id
    #   The RAM disk ID.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] root_device_name
    #   The device name of the root device volume (for example,
    #   `/dev/sda1`).
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] source_dest_check
    #   Indicates whether source/destination checks are enabled.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] sriov_net_support
    #   Indicates whether enhanced networking with the Intel 82599 Virtual
    #   Function interface is enabled.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] user_data
    #   The user data.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] disable_api_stop
    #   Indicates whether stop protection is enabled for the instance.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] groups
    #   The security groups associated with the instance.
    #   @return [Array<Types::GroupIdentifier>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceAttribute AWS API Documentation
    #
    class InstanceAttribute < Struct.new(
      :block_device_mappings,
      :disable_api_termination,
      :ena_support,
      :enclave_options,
      :ebs_optimized,
      :instance_id,
      :instance_initiated_shutdown_behavior,
      :instance_type,
      :kernel_id,
      :product_codes,
      :ramdisk_id,
      :root_device_name,
      :source_dest_check,
      :sriov_net_support,
      :user_data,
      :disable_api_stop,
      :groups)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device mapping.
    #
    # @!attribute [rw] device_name
    #   The device name.
    #   @return [String]
    #
    # @!attribute [rw] ebs
    #   Parameters used to automatically set up EBS volumes when the
    #   instance is launched.
    #   @return [Types::EbsInstanceBlockDevice]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceBlockDeviceMapping AWS API Documentation
    #
    class InstanceBlockDeviceMapping < Struct.new(
      :device_name,
      :ebs)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device mapping entry.
    #
    # @!attribute [rw] device_name
    #   The device name. For available device names, see [Device names for
    #   volumes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html
    #   @return [String]
    #
    # @!attribute [rw] ebs
    #   Parameters used to automatically set up EBS volumes when the
    #   instance is launched.
    #   @return [Types::EbsInstanceBlockDeviceSpecification]
    #
    # @!attribute [rw] virtual_name
    #   The virtual device name.
    #   @return [String]
    #
    # @!attribute [rw] no_device
    #   Suppresses the specified device included in the block device
    #   mapping.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceBlockDeviceMappingSpecification AWS API Documentation
    #
    class InstanceBlockDeviceMappingSpecification < Struct.new(
      :device_name,
      :ebs,
      :virtual_name,
      :no_device)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the number of instances that can be launched onto
    # the Dedicated Host.
    #
    # @!attribute [rw] available_capacity
    #   The number of instances that can be launched onto the Dedicated Host
    #   based on the host's available capacity.
    #   @return [Integer]
    #
    # @!attribute [rw] instance_type
    #   The instance type supported by the Dedicated Host.
    #   @return [String]
    #
    # @!attribute [rw] total_capacity
    #   The total number of instances that can be launched onto the
    #   Dedicated Host if there are no instances running on it.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceCapacity AWS API Documentation
    #
    class InstanceCapacity < Struct.new(
      :available_capacity,
      :instance_type,
      :total_capacity)
      SENSITIVE = []
      include Aws::Structure
    end

    # The DNS names of the endpoint.
    #
    # @!attribute [rw] dns_name
    #   The DNS name of the EC2 Instance Connect Endpoint.
    #   @return [String]
    #
    # @!attribute [rw] fips_dns_name
    #   The Federal Information Processing Standards (FIPS) compliant DNS
    #   name of the EC2 Instance Connect Endpoint.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceConnectEndpointDnsNames AWS API Documentation
    #
    class InstanceConnectEndpointDnsNames < Struct.new(
      :dns_name,
      :fips_dns_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # The public DNS names of the endpoint, including IPv4-only and
    # dualstack DNS names.
    #
    # @!attribute [rw] ipv_4
    #   The IPv4-only DNS name of the EC2 Instance Connect Endpoint.
    #   @return [Types::InstanceConnectEndpointDnsNames]
    #
    # @!attribute [rw] dualstack
    #   The dualstack DNS name of the EC2 Instance Connect Endpoint. A
    #   dualstack DNS name supports connections from both IPv4 and IPv6
    #   clients.
    #   @return [Types::InstanceConnectEndpointDnsNames]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceConnectEndpointPublicDnsNames AWS API Documentation
    #
    class InstanceConnectEndpointPublicDnsNames < Struct.new(
      :ipv_4,
      :dualstack)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Reserved Instance listing state.
    #
    # @!attribute [rw] instance_count
    #   The number of listed Reserved Instances in the state specified by
    #   the `state`.
    #   @return [Integer]
    #
    # @!attribute [rw] state
    #   The states of the listed Reserved Instances.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceCount AWS API Documentation
    #
    class InstanceCount < Struct.new(
      :instance_count,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the credit option for CPU usage of a burstable performance
    # instance.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] cpu_credits
    #   The credit option for CPU usage of the instance.
    #
    #   Valid values: `standard` \| `unlimited`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceCreditSpecification AWS API Documentation
    #
    class InstanceCreditSpecification < Struct.new(
      :instance_id,
      :cpu_credits)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the credit option for CPU usage of a burstable performance
    # instance.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] cpu_credits
    #   The credit option for CPU usage of the instance.
    #
    #   Valid values: `standard` \| `unlimited`
    #
    #   T3 instances with `host` tenancy do not support the `unlimited` CPU
    #   credit option.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceCreditSpecificationRequest AWS API Documentation
    #
    class InstanceCreditSpecificationRequest < Struct.new(
      :instance_id,
      :cpu_credits)
      SENSITIVE = []
      include Aws::Structure
    end

    # The event window.
    #
    # @!attribute [rw] instance_event_window_id
    #   The ID of the event window.
    #   @return [String]
    #
    # @!attribute [rw] time_ranges
    #   One or more time ranges defined for the event window.
    #   @return [Array<Types::InstanceEventWindowTimeRange>]
    #
    # @!attribute [rw] name
    #   The name of the event window.
    #   @return [String]
    #
    # @!attribute [rw] cron_expression
    #   The cron expression defined for the event window.
    #   @return [String]
    #
    # @!attribute [rw] association_target
    #   One or more targets associated with the event window.
    #   @return [Types::InstanceEventWindowAssociationTarget]
    #
    # @!attribute [rw] state
    #   The current state of the event window.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The instance tags associated with the event window.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceEventWindow AWS API Documentation
    #
    class InstanceEventWindow < Struct.new(
      :instance_event_window_id,
      :time_ranges,
      :name,
      :cron_expression,
      :association_target,
      :state,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # One or more targets associated with the specified event window. Only
    # one *type* of target (instance ID, instance tag, or Dedicated Host ID)
    # can be associated with an event window.
    #
    # @!attribute [rw] instance_ids
    #   The IDs of the instances to associate with the event window. If the
    #   instance is on a Dedicated Host, you can't specify the Instance ID
    #   parameter; you must use the Dedicated Host ID parameter.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_tags
    #   The instance tags to associate with the event window. Any instances
    #   associated with the tags will be associated with the event window.
    #
    #   Note that while you can't create tag keys beginning with `aws:`,
    #   you can specify existing Amazon Web Services managed tag keys (with
    #   the `aws:` prefix) when specifying them as targets to associate with
    #   the event window.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] dedicated_host_ids
    #   The IDs of the Dedicated Hosts to associate with the event window.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceEventWindowAssociationRequest AWS API Documentation
    #
    class InstanceEventWindowAssociationRequest < Struct.new(
      :instance_ids,
      :instance_tags,
      :dedicated_host_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # One or more targets associated with the event window.
    #
    # @!attribute [rw] instance_ids
    #   The IDs of the instances associated with the event window.
    #   @return [Array<String>]
    #
    # @!attribute [rw] tags
    #   The instance tags associated with the event window. Any instances
    #   associated with the tags will be associated with the event window.
    #
    #   Note that while you can't create tag keys beginning with `aws:`,
    #   you can specify existing Amazon Web Services managed tag keys (with
    #   the `aws:` prefix) when specifying them as targets to associate with
    #   the event window.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] dedicated_host_ids
    #   The IDs of the Dedicated Hosts associated with the event window.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceEventWindowAssociationTarget AWS API Documentation
    #
    class InstanceEventWindowAssociationTarget < Struct.new(
      :instance_ids,
      :tags,
      :dedicated_host_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # The targets to disassociate from the specified event window.
    #
    # @!attribute [rw] instance_ids
    #   The IDs of the instances to disassociate from the event window.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_tags
    #   The instance tags to disassociate from the event window. Any
    #   instances associated with the tags will be disassociated from the
    #   event window.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] dedicated_host_ids
    #   The IDs of the Dedicated Hosts to disassociate from the event
    #   window.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceEventWindowDisassociationRequest AWS API Documentation
    #
    class InstanceEventWindowDisassociationRequest < Struct.new(
      :instance_ids,
      :instance_tags,
      :dedicated_host_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # The state of the event window.
    #
    # @!attribute [rw] instance_event_window_id
    #   The ID of the event window.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the event window.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceEventWindowStateChange AWS API Documentation
    #
    class InstanceEventWindowStateChange < Struct.new(
      :instance_event_window_id,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # The start day and time and the end day and time of the time range, in
    # UTC.
    #
    # @!attribute [rw] start_week_day
    #   The day on which the time range begins.
    #   @return [String]
    #
    # @!attribute [rw] start_hour
    #   The hour when the time range begins.
    #   @return [Integer]
    #
    # @!attribute [rw] end_week_day
    #   The day on which the time range ends.
    #   @return [String]
    #
    # @!attribute [rw] end_hour
    #   The hour when the time range ends.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceEventWindowTimeRange AWS API Documentation
    #
    class InstanceEventWindowTimeRange < Struct.new(
      :start_week_day,
      :start_hour,
      :end_week_day,
      :end_hour)
      SENSITIVE = []
      include Aws::Structure
    end

    # The start day and time and the end day and time of the time range, in
    # UTC.
    #
    # @!attribute [rw] start_week_day
    #   The day on which the time range begins.
    #   @return [String]
    #
    # @!attribute [rw] start_hour
    #   The hour when the time range begins.
    #   @return [Integer]
    #
    # @!attribute [rw] end_week_day
    #   The day on which the time range ends.
    #   @return [String]
    #
    # @!attribute [rw] end_hour
    #   The hour when the time range ends.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceEventWindowTimeRangeRequest AWS API Documentation
    #
    class InstanceEventWindowTimeRangeRequest < Struct.new(
      :start_week_day,
      :start_hour,
      :end_week_day,
      :end_hour)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an instance to export.
    #
    # @!attribute [rw] instance_id
    #   The ID of the resource being exported.
    #   @return [String]
    #
    # @!attribute [rw] target_environment
    #   The target virtualization environment.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceExportDetails AWS API Documentation
    #
    class InstanceExportDetails < Struct.new(
      :instance_id,
      :target_environment)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the default credit option for CPU usage of a burstable
    # performance instance family.
    #
    # @!attribute [rw] instance_family
    #   The instance family.
    #   @return [String]
    #
    # @!attribute [rw] cpu_credits
    #   The default credit option for CPU usage of the instance family.
    #   Valid values are `standard` and `unlimited`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceFamilyCreditSpecification AWS API Documentation
    #
    class InstanceFamilyCreditSpecification < Struct.new(
      :instance_family,
      :cpu_credits)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the instance and the AMI used to launch the
    # instance.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] launch_time
    #   The time the instance was launched.
    #   @return [Time]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone or Local Zone of the instance.
    #   @return [String]
    #
    # @!attribute [rw] zone_id
    #   The ID of the Availability Zone or Local Zone of the instance.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the instance.
    #   @return [Types::InstanceState]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the instance.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the instance.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] image_metadata
    #   Information about the AMI used to launch the instance.
    #   @return [Types::ImageMetadata]
    #
    # @!attribute [rw] operator
    #   The entity that manages the instance.
    #   @return [Types::OperatorResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceImageMetadata AWS API Documentation
    #
    class InstanceImageMetadata < Struct.new(
      :instance_id,
      :instance_type,
      :launch_time,
      :availability_zone,
      :zone_id,
      :state,
      :owner_id,
      :tags,
      :image_metadata,
      :operator)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about an IPv4 prefix.
    #
    # @!attribute [rw] ipv_4_prefix
    #   One or more IPv4 prefixes assigned to the network interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceIpv4Prefix AWS API Documentation
    #
    class InstanceIpv4Prefix < Struct.new(
      :ipv_4_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv6 address.
    #
    # @!attribute [rw] ipv_6_address
    #   The IPv6 address.
    #   @return [String]
    #
    # @!attribute [rw] is_primary_ipv_6
    #   Determines if an IPv6 address associated with a network interface is
    #   the primary IPv6 address. 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. For more information, see [RunInstances][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceIpv6Address AWS API Documentation
    #
    class InstanceIpv6Address < Struct.new(
      :ipv_6_address,
      :is_primary_ipv_6)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv6 address.
    #
    # @!attribute [rw] ipv_6_address
    #   The IPv6 address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceIpv6AddressRequest AWS API Documentation
    #
    class InstanceIpv6AddressRequest < Struct.new(
      :ipv_6_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about an IPv6 prefix.
    #
    # @!attribute [rw] ipv_6_prefix
    #   One or more IPv6 prefixes assigned to the network interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceIpv6Prefix AWS API Documentation
    #
    class InstanceIpv6Prefix < Struct.new(
      :ipv_6_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # The maintenance options for the instance.
    #
    # @!attribute [rw] auto_recovery
    #   Provides information on the current automatic recovery behavior of
    #   your instance.
    #   @return [String]
    #
    # @!attribute [rw] reboot_migration
    #   Specifies whether to attempt reboot migration during a
    #   user-initiated reboot of an instance that has a scheduled
    #   `system-reboot` event:
    #
    #   * `default` - Amazon EC2 attempts to migrate the instance to new
    #     hardware (reboot migration). If successful, the `system-reboot`
    #     event is cleared. If unsuccessful, an in-place reboot occurs and
    #     the event remains scheduled.
    #
    #   * `disabled` - Amazon EC2 keeps the instance on the same hardware
    #     (in-place reboot). The `system-reboot` event remains scheduled.
    #
    #   This setting only applies to supported instances that have a
    #   scheduled reboot event. For more information, see [Enable or disable
    #   reboot migration][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceMaintenanceOptions AWS API Documentation
    #
    class InstanceMaintenanceOptions < Struct.new(
      :auto_recovery,
      :reboot_migration)
      SENSITIVE = []
      include Aws::Structure
    end

    # The maintenance options for the instance.
    #
    # @!attribute [rw] auto_recovery
    #   Disables the automatic recovery behavior of your instance or sets it
    #   to default. For more information, see [Simplified automatic
    #   recovery][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceMaintenanceOptionsRequest AWS API Documentation
    #
    class InstanceMaintenanceOptionsRequest < Struct.new(
      :auto_recovery)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the market (purchasing) option for the instances.
    #
    # @!attribute [rw] market_type
    #   The market type.
    #   @return [String]
    #
    # @!attribute [rw] spot_options
    #   The options for Spot Instances.
    #   @return [Types::SpotMarketOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceMarketOptionsRequest AWS API Documentation
    #
    class InstanceMarketOptionsRequest < Struct.new(
      :market_type,
      :spot_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # The default instance metadata service (IMDS) settings that were set at
    # the account level in the specified Amazon Web Services  Region.
    #
    # @!attribute [rw] http_tokens
    #   Indicates whether IMDSv2 is required.
    #
    #   * `optional` – IMDSv2 is optional, which means that you can use
    #     either IMDSv2 or IMDSv1.
    #
    #   * `required` – IMDSv2 is required, which means that IMDSv1 is
    #     disabled, and you must use IMDSv2.
    #   @return [String]
    #
    # @!attribute [rw] http_put_response_hop_limit
    #   The maximum number of hops that the metadata token can travel.
    #   @return [Integer]
    #
    # @!attribute [rw] http_endpoint
    #   Indicates whether the IMDS endpoint for an instance is enabled or
    #   disabled. When disabled, the instance metadata can't be accessed.
    #   @return [String]
    #
    # @!attribute [rw] instance_metadata_tags
    #   Indicates whether access to instance tags from the instance metadata
    #   is enabled or disabled. For more information, see [Work with
    #   instance tags using the instance metadata][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS
    #   @return [String]
    #
    # @!attribute [rw] managed_by
    #   The entity that manages the IMDS default settings. Possible values
    #   include:
    #
    #   * `account` - The IMDS default settings are managed by the account.
    #
    #   * `declarative-policy` - The IMDS default settings are managed by a
    #     declarative policy and can't be modified by the account.
    #   @return [String]
    #
    # @!attribute [rw] managed_exception_message
    #   The customized exception message that is specified in the
    #   declarative policy.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceMetadataDefaultsResponse AWS API Documentation
    #
    class InstanceMetadataDefaultsResponse < Struct.new(
      :http_tokens,
      :http_put_response_hop_limit,
      :http_endpoint,
      :instance_metadata_tags,
      :managed_by,
      :managed_exception_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The metadata options for the instance.
    #
    # @!attribute [rw] http_tokens
    #   Indicates whether IMDSv2 is required.
    #
    #   * `optional` - IMDSv2 is optional, which means that you can use
    #     either IMDSv2 or IMDSv1.
    #
    #   * `required` - IMDSv2 is required, which means that IMDSv1 is
    #     disabled, and you must use IMDSv2.
    #
    #   Default:
    #
    #   * If the value of `ImdsSupport` for the Amazon Machine Image (AMI)
    #     for your instance is `v2.0` and the account level default is set
    #     to `no-preference`, the default is `required`.
    #
    #   * If the value of `ImdsSupport` for the Amazon Machine Image (AMI)
    #     for your instance is `v2.0`, but the account level default is set
    #     to `V1 or V2`, the default is `optional`.
    #
    #   The default value can also be affected by other combinations of
    #   parameters. For more information, see [Order of precedence for
    #   instance metadata options][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html#instance-metadata-options-order-of-precedence
    #   @return [String]
    #
    # @!attribute [rw] http_put_response_hop_limit
    #   The maximum number of hops that the metadata token can travel.
    #
    #   Possible values: Integers from 1 to 64
    #   @return [Integer]
    #
    # @!attribute [rw] http_endpoint
    #   Enables or disables the HTTP metadata endpoint on your instances.
    #
    #   If you specify a value of `disabled`, you cannot access your
    #   instance metadata.
    #
    #   Default: `enabled`
    #   @return [String]
    #
    # @!attribute [rw] http_protocol_ipv_6
    #   Enables or disables the IPv6 endpoint for the instance metadata
    #   service.
    #
    #   Default: `disabled`
    #   @return [String]
    #
    # @!attribute [rw] instance_metadata_tags
    #   Set to `enabled` to allow access to instance tags from the instance
    #   metadata. Set to `disabled` to turn off access to instance tags from
    #   the instance metadata. For more information, see [Work with instance
    #   tags using the instance metadata][1].
    #
    #   Default: `disabled`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceMetadataOptionsRequest AWS API Documentation
    #
    class InstanceMetadataOptionsRequest < Struct.new(
      :http_tokens,
      :http_put_response_hop_limit,
      :http_endpoint,
      :http_protocol_ipv_6,
      :instance_metadata_tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # The metadata options for the instance.
    #
    # @!attribute [rw] state
    #   The state of the metadata option changes.
    #
    #   `pending` - The metadata options are being updated and the instance
    #   is not ready to process metadata traffic with the new selection.
    #
    #   `applied` - The metadata options have been successfully applied on
    #   the instance.
    #   @return [String]
    #
    # @!attribute [rw] http_tokens
    #   Indicates whether IMDSv2 is required.
    #
    #   * `optional` - IMDSv2 is optional, which means that you can use
    #     either IMDSv2 or IMDSv1.
    #
    #   * `required` - IMDSv2 is required, which means that IMDSv1 is
    #     disabled, and you must use IMDSv2.
    #   @return [String]
    #
    # @!attribute [rw] http_put_response_hop_limit
    #   The maximum number of hops that the metadata token can travel.
    #
    #   Possible values: Integers from `1` to `64`
    #   @return [Integer]
    #
    # @!attribute [rw] http_endpoint
    #   Indicates whether the HTTP metadata endpoint on your instances is
    #   enabled or disabled.
    #
    #   If the value is `disabled`, you cannot access your instance
    #   metadata.
    #   @return [String]
    #
    # @!attribute [rw] http_protocol_ipv_6
    #   Indicates whether the IPv6 endpoint for the instance metadata
    #   service is enabled or disabled.
    #
    #   Default: `disabled`
    #   @return [String]
    #
    # @!attribute [rw] instance_metadata_tags
    #   Indicates whether access to instance tags from the instance metadata
    #   is enabled or disabled. For more information, see [Work with
    #   instance tags using the instance metadata][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceMetadataOptionsResponse AWS API Documentation
    #
    class InstanceMetadataOptionsResponse < Struct.new(
      :state,
      :http_tokens,
      :http_put_response_hop_limit,
      :http_endpoint,
      :http_protocol_ipv_6,
      :instance_metadata_tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the monitoring of an instance.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] monitoring
    #   The monitoring for the instance.
    #   @return [Types::Monitoring]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceMonitoring AWS API Documentation
    #
    class InstanceMonitoring < Struct.new(
      :instance_id,
      :monitoring)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network interface.
    #
    # @!attribute [rw] association
    #   The association information for an Elastic IPv4 associated with the
    #   network interface.
    #   @return [Types::InstanceNetworkInterfaceAssociation]
    #
    # @!attribute [rw] attachment
    #   The network interface attachment.
    #   @return [Types::InstanceNetworkInterfaceAttachment]
    #
    # @!attribute [rw] description
    #   The description.
    #   @return [String]
    #
    # @!attribute [rw] groups
    #   The security groups.
    #   @return [Array<Types::GroupIdentifier>]
    #
    # @!attribute [rw] ipv_6_addresses
    #   The IPv6 addresses associated with the network interface.
    #   @return [Array<Types::InstanceIpv6Address>]
    #
    # @!attribute [rw] mac_address
    #   The MAC address.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that created the network
    #   interface.
    #   @return [String]
    #
    # @!attribute [rw] private_dns_name
    #   The private DNS name.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The IPv4 address of the network interface within the subnet.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_addresses
    #   The private IPv4 addresses associated with the network interface.
    #   @return [Array<Types::InstancePrivateIpAddress>]
    #
    # @!attribute [rw] source_dest_check
    #   Indicates whether source/destination checking is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] status
    #   The status of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] interface_type
    #   The type of network interface.
    #
    #   Valid values: `interface` \| `efa` \| `efa-only` \| `evs` \| `trunk`
    #   @return [String]
    #
    # @!attribute [rw] ipv_4_prefixes
    #   The IPv4 delegated prefixes that are assigned to the network
    #   interface.
    #   @return [Array<Types::InstanceIpv4Prefix>]
    #
    # @!attribute [rw] ipv_6_prefixes
    #   The IPv6 delegated prefixes that are assigned to the network
    #   interface.
    #   @return [Array<Types::InstanceIpv6Prefix>]
    #
    # @!attribute [rw] connection_tracking_configuration
    #   A security group connection tracking configuration that enables you
    #   to set the timeout for connection tracking on an Elastic network
    #   interface. For more information, see [Connection tracking
    #   timeouts][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts
    #   @return [Types::ConnectionTrackingSpecificationResponse]
    #
    # @!attribute [rw] operator
    #   The service provider that manages the network interface.
    #   @return [Types::OperatorResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkInterface AWS API Documentation
    #
    class InstanceNetworkInterface < Struct.new(
      :association,
      :attachment,
      :description,
      :groups,
      :ipv_6_addresses,
      :mac_address,
      :network_interface_id,
      :owner_id,
      :private_dns_name,
      :private_ip_address,
      :private_ip_addresses,
      :source_dest_check,
      :status,
      :subnet_id,
      :vpc_id,
      :interface_type,
      :ipv_4_prefixes,
      :ipv_6_prefixes,
      :connection_tracking_configuration,
      :operator)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes association information for an Elastic IP address (IPv4).
    #
    # @!attribute [rw] carrier_ip
    #   The carrier IP address associated with the network interface.
    #   @return [String]
    #
    # @!attribute [rw] customer_owned_ip
    #   The customer-owned IP address associated with the network interface.
    #   @return [String]
    #
    # @!attribute [rw] ip_owner_id
    #   The ID of the owner of the Elastic IP address.
    #   @return [String]
    #
    # @!attribute [rw] public_dns_name
    #   The public DNS name.
    #   @return [String]
    #
    # @!attribute [rw] public_ip
    #   The public IP address or Elastic IP address bound to the network
    #   interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkInterfaceAssociation AWS API Documentation
    #
    class InstanceNetworkInterfaceAssociation < Struct.new(
      :carrier_ip,
      :customer_owned_ip,
      :ip_owner_id,
      :public_dns_name,
      :public_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network interface attachment.
    #
    # @!attribute [rw] attach_time
    #   The time stamp when the attachment initiated.
    #   @return [Time]
    #
    # @!attribute [rw] attachment_id
    #   The ID of the network interface attachment.
    #   @return [String]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the network interface is deleted when the instance
    #   is terminated.
    #   @return [Boolean]
    #
    # @!attribute [rw] device_index
    #   The index of the device on the instance for the network interface
    #   attachment.
    #   @return [Integer]
    #
    # @!attribute [rw] status
    #   The attachment state.
    #   @return [String]
    #
    # @!attribute [rw] network_card_index
    #   The index of the network card.
    #   @return [Integer]
    #
    # @!attribute [rw] ena_srd_specification
    #   Contains the ENA Express settings for the network interface that's
    #   attached to the instance.
    #   @return [Types::InstanceAttachmentEnaSrdSpecification]
    #
    # @!attribute [rw] ena_queue_count
    #   The number of ENA queues created with the instance.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkInterfaceAttachment AWS API Documentation
    #
    class InstanceNetworkInterfaceAttachment < Struct.new(
      :attach_time,
      :attachment_id,
      :delete_on_termination,
      :device_index,
      :status,
      :network_card_index,
      :ena_srd_specification,
      :ena_queue_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network interface.
    #
    # @!attribute [rw] associate_public_ip_address
    #   Indicates whether to assign a public IPv4 address to an instance you
    #   launch in a VPC. The public IP 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 `true`.
    #
    #   Amazon Web Services charges for all public IPv4 addresses, including
    #   public IPv4 addresses associated with running instances and Elastic
    #   IP addresses. For more information, see the *Public IPv4 Address*
    #   tab on the [Amazon VPC pricing page][1].
    #
    #
    #
    #   [1]: http://aws.amazon.com/vpc/pricing/
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_on_termination
    #   If set to `true`, the interface is deleted when the instance is
    #   terminated. You can specify `true` only if creating a new network
    #   interface when launching an instance.
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   The description of the network interface. Applies only if creating a
    #   network interface when launching an instance.
    #   @return [String]
    #
    # @!attribute [rw] device_index
    #   The position of the network interface in the attachment order. A
    #   primary network interface has a device index of 0.
    #
    #   If you specify a network interface when launching an instance, you
    #   must specify the device index.
    #   @return [Integer]
    #
    # @!attribute [rw] groups
    #   The IDs of the security groups for the network interface. Applies
    #   only if creating a network interface when launching an instance.
    #   @return [Array<String>]
    #
    # @!attribute [rw] ipv_6_address_count
    #   A number of IPv6 addresses to assign to the network interface.
    #   Amazon EC2 chooses the IPv6 addresses from the range of the 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.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_addresses
    #   The IPv6 addresses to assign to the 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.
    #   @return [Array<Types::InstanceIpv6Address>]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #
    #   If you are creating a Spot Fleet, omit this parameter because you
    #   can’t specify a network interface ID in a launch specification.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The private IPv4 address of the network interface. Applies only if
    #   creating a network interface when launching an instance. You cannot
    #   specify this option if you're launching more than one instance in a
    #   [RunInstances][1] request.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [String]
    #
    # @!attribute [rw] private_ip_addresses
    #   The private IPv4 addresses to assign to the network interface. Only
    #   one private IPv4 address can be designated as primary. You cannot
    #   specify this option if you're launching more than one instance in a
    #   [RunInstances][1] request.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [Array<Types::PrivateIpAddressSpecification>]
    #
    # @!attribute [rw] secondary_private_ip_address_count
    #   The number of secondary private IPv4 addresses. You can’t specify
    #   this parameter and also specify a secondary private IP address using
    #   the `PrivateIpAddress` parameter.
    #   @return [Integer]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet associated with the network interface. Applies
    #   only if creating a network interface when launching an instance.
    #   @return [String]
    #
    # @!attribute [rw] associate_carrier_ip_address
    #   Indicates whether to assign a carrier IP address to the network
    #   interface.
    #
    #   You can only assign a carrier IP address to a network interface that
    #   is in a subnet in a Wavelength Zone. For more information about
    #   carrier IP addresses, see [Carrier IP address][1] in the *Amazon Web
    #   Services Wavelength Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip
    #   @return [Boolean]
    #
    # @!attribute [rw] interface_type
    #   The type of network interface.
    #
    #   If you specify `efa-only`, do not assign any IP addresses to the
    #   network interface. EFA-only network interfaces do not support IP
    #   addresses.
    #
    #   Valid values: `interface` \| `efa` \| `efa-only`
    #   @return [String]
    #
    # @!attribute [rw] network_card_index
    #   The index of the network card. Some instance types support multiple
    #   network cards. The primary network interface must be assigned to
    #   network card index 0. The default is network card index 0.
    #
    #   If you are using [RequestSpotInstances][1] to create Spot Instances,
    #   omit this parameter because you can’t specify the network card index
    #   when using this API. To specify the network card index, use
    #   [RunInstances][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_4_prefixes
    #   The IPv4 delegated prefixes to be assigned to the network interface.
    #   You cannot use this option if you use the `Ipv4PrefixCount` option.
    #   @return [Array<Types::Ipv4PrefixSpecificationRequest>]
    #
    # @!attribute [rw] ipv_4_prefix_count
    #   The number of IPv4 delegated prefixes to be automatically assigned
    #   to the network interface. You cannot use this option if you use the
    #   `Ipv4Prefix` option.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_prefixes
    #   The IPv6 delegated prefixes to be assigned to the network interface.
    #   You cannot use this option if you use the `Ipv6PrefixCount` option.
    #   @return [Array<Types::Ipv6PrefixSpecificationRequest>]
    #
    # @!attribute [rw] ipv_6_prefix_count
    #   The number of IPv6 delegated prefixes to be automatically assigned
    #   to the network interface. You cannot use this option if you use the
    #   `Ipv6Prefix` option.
    #   @return [Integer]
    #
    # @!attribute [rw] primary_ipv_6
    #   The primary IPv6 address of the network interface. 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. For more information about
    #   primary IPv6 addresses, see [RunInstances][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_srd_specification
    #   Specifies the ENA Express settings for the network interface that's
    #   attached to the instance.
    #   @return [Types::EnaSrdSpecificationRequest]
    #
    # @!attribute [rw] connection_tracking_specification
    #   A security group connection tracking specification that enables you
    #   to set the timeout for connection tracking on an Elastic network
    #   interface. For more information, see [Connection tracking
    #   timeouts][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts
    #   @return [Types::ConnectionTrackingSpecificationRequest]
    #
    # @!attribute [rw] ena_queue_count
    #   The number of ENA queues to be created with the instance.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkInterfaceSpecification AWS API Documentation
    #
    class InstanceNetworkInterfaceSpecification < Struct.new(
      :associate_public_ip_address,
      :delete_on_termination,
      :description,
      :device_index,
      :groups,
      :ipv_6_address_count,
      :ipv_6_addresses,
      :network_interface_id,
      :private_ip_address,
      :private_ip_addresses,
      :secondary_private_ip_address_count,
      :subnet_id,
      :associate_carrier_ip_address,
      :interface_type,
      :network_card_index,
      :ipv_4_prefixes,
      :ipv_4_prefix_count,
      :ipv_6_prefixes,
      :ipv_6_prefix_count,
      :primary_ipv_6,
      :ena_srd_specification,
      :connection_tracking_specification,
      :ena_queue_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # With network performance options, you can adjust your bandwidth
    # preferences to meet the needs of the workload that runs on your
    # instance.
    #
    # @!attribute [rw] bandwidth_weighting
    #   When you configure network bandwidth weighting, you can boost your
    #   baseline bandwidth for either networking or EBS by up to 25%. The
    #   total available baseline bandwidth for your instance remains the
    #   same. The default option uses the standard bandwidth configuration
    #   for your instance type.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkPerformanceOptions AWS API Documentation
    #
    class InstanceNetworkPerformanceOptions < Struct.new(
      :bandwidth_weighting)
      SENSITIVE = []
      include Aws::Structure
    end

    # Configure network performance options for your instance that are
    # geared towards performance improvements based on the workload that it
    # runs.
    #
    # @!attribute [rw] bandwidth_weighting
    #   Specify the bandwidth weighting option to boost the associated type
    #   of baseline bandwidth, as follows:
    #
    #   default
    #
    #   : This option uses the standard bandwidth configuration for your
    #     instance type.
    #
    #   vpc-1
    #
    #   : This option boosts your networking baseline bandwidth and reduces
    #     your EBS baseline bandwidth.
    #
    #   ebs-1
    #
    #   : This option boosts your EBS baseline bandwidth and reduces your
    #     networking baseline bandwidth.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceNetworkPerformanceOptionsRequest AWS API Documentation
    #
    class InstanceNetworkPerformanceOptionsRequest < Struct.new(
      :bandwidth_weighting)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a private IPv4 address.
    #
    # @!attribute [rw] association
    #   The association information for an Elastic IP address for the
    #   network interface.
    #   @return [Types::InstanceNetworkInterfaceAssociation]
    #
    # @!attribute [rw] primary
    #   Indicates whether this IPv4 address is the primary private IP
    #   address of the network interface.
    #   @return [Boolean]
    #
    # @!attribute [rw] private_dns_name
    #   The private IPv4 DNS name.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The private IPv4 address of the network interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstancePrivateIpAddress AWS API Documentation
    #
    class InstancePrivateIpAddress < Struct.new(
      :association,
      :primary,
      :private_dns_name,
      :private_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # The attributes for the instance types. When you specify instance
    # attributes, Amazon EC2 will identify instance types with these
    # attributes.
    #
    # You must specify `VCpuCount` and `MemoryMiB`. All other attributes are
    # optional. Any unspecified optional attribute is set to its default.
    #
    # When you specify multiple attributes, you get instance types that
    # satisfy all of the specified attributes. If you specify multiple
    # values for an attribute, you get instance types that satisfy any of
    # the specified values.
    #
    # To limit the list of instance types from which Amazon EC2 can identify
    # matching instance types, you can use one of the following parameters,
    # but not both in the same request:
    #
    # * `AllowedInstanceTypes` - The instance types to include in the list.
    #   All other instance types are ignored, even if they match your
    #   specified attributes.
    #
    # * `ExcludedInstanceTypes` - The instance types to exclude from the
    #   list, even if they match your specified attributes.
    #
    # <note markdown="1"> If you specify `InstanceRequirements`, you can't specify
    # `InstanceType`.
    #
    #  Attribute-based instance type selection is only supported when using
    # Auto Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If
    # you plan to use the launch template in the [launch instance wizard][1]
    # or with the [RunInstances API][2], you can't specify
    # `InstanceRequirements`.
    #
    #  </note>
    #
    # For more information, see [Create mixed instances group using
    # attribute-based instance type selection][3] in the *Amazon EC2 Auto
    # Scaling User Guide*, and also [Specify attributes for instance type
    # selection for EC2 Fleet or Spot Fleet][4] and [Spot placement
    # score][5] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html
    # [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    # [3]: https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-mixed-instances-group-attribute-based-instance-type-selection.html
    # [4]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html
    # [5]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html
    #
    # @!attribute [rw] v_cpu_count
    #   The minimum and maximum number of vCPUs.
    #   @return [Types::VCpuCountRange]
    #
    # @!attribute [rw] memory_mi_b
    #   The minimum and maximum amount of memory, in MiB.
    #   @return [Types::MemoryMiB]
    #
    # @!attribute [rw] cpu_manufacturers
    #   The CPU manufacturers to include.
    #
    #   * For instance types with Intel CPUs, specify `intel`.
    #
    #   * For instance types with AMD CPUs, specify `amd`.
    #
    #   * For instance types with Amazon Web Services CPUs, specify
    #     `amazon-web-services`.
    #
    #   * For instance types with Apple CPUs, specify `apple`.
    #
    #   <note markdown="1"> Don't confuse the CPU manufacturer with the CPU architecture.
    #   Instances will be launched with a compatible CPU architecture based
    #   on the Amazon Machine Image (AMI) that you specify in your launch
    #   template.
    #
    #    </note>
    #
    #   Default: Any manufacturer
    #   @return [Array<String>]
    #
    # @!attribute [rw] memory_gi_b_per_v_cpu
    #   The minimum and maximum amount of memory per vCPU, in GiB.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::MemoryGiBPerVCpu]
    #
    # @!attribute [rw] excluded_instance_types
    #   The instance types to exclude.
    #
    #   You can use strings with one or more wild cards, represented by an
    #   asterisk (`*`), to exclude an instance type, size, or generation.
    #   The following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`,
    #   `*3*`.
    #
    #   For example, if you specify `c5*`,Amazon EC2 will exclude the entire
    #   C5 instance family, which includes all C5a and C5n instance types.
    #   If you specify `m5a.*`, Amazon EC2 will exclude all the M5a instance
    #   types, but not the M5n instance types.
    #
    #   <note markdown="1"> If you specify `ExcludedInstanceTypes`, you can't specify
    #   `AllowedInstanceTypes`.
    #
    #    </note>
    #
    #   Default: No excluded instance types
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_generations
    #   Indicates whether current or previous generation instance types are
    #   included. The current generation instance types are recommended for
    #   use. Current generation instance types are typically the latest two
    #   to three generations in each instance family. For more information,
    #   see [Instance types][1] in the *Amazon EC2 User Guide*.
    #
    #   For current generation instance types, specify `current`.
    #
    #   For previous generation instance types, specify `previous`.
    #
    #   Default: Current and previous generation instance types
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] spot_max_price_percentage_over_lowest_price
    #   \[Price protection\] The price protection threshold for Spot
    #   Instances, as a percentage higher than an identified Spot price. The
    #   identified Spot price is the Spot price of the lowest priced current
    #   generation C, M, or R instance type with your specified attributes.
    #   If no current generation C, M, or R instance type matches your
    #   attributes, then the identified Spot price is from the lowest priced
    #   current generation instance types, and failing that, from the lowest
    #   priced previous generation instance types that match your
    #   attributes. When Amazon EC2 selects instance types with your
    #   attributes, it will exclude instance types whose Spot price exceeds
    #   your specified threshold.
    #
    #   The parameter accepts an integer, which Amazon EC2 interprets as a
    #   percentage.
    #
    #   If you set `TargetCapacityUnitType` to `vcpu` or `memory-mib`, the
    #   price protection threshold is applied based on the per-vCPU or
    #   per-memory price instead of the per-instance price.
    #
    #   This parameter is not supported for [GetSpotPlacementScores][1] and
    #   [GetInstanceTypesFromInstanceRequirements][2].
    #
    #   <note markdown="1"> Only one of `SpotMaxPricePercentageOverLowestPrice` or
    #   `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice` can be specified.
    #   If you don't specify either, Amazon EC2 will automatically apply
    #   optimal price protection to consistently select from a wide range of
    #   instance types. To indicate no price protection threshold for Spot
    #   Instances, meaning you want to consider all instance types that
    #   match your attributes, include one of these parameters and specify a
    #   high value, such as `999999`.
    #
    #    </note>
    #
    #   Default: `100`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html
    #   @return [Integer]
    #
    # @!attribute [rw] on_demand_max_price_percentage_over_lowest_price
    #   \[Price protection\] The price protection threshold for On-Demand
    #   Instances, as a percentage higher than an identified On-Demand
    #   price. The identified On-Demand price is the price of the lowest
    #   priced current generation C, M, or R instance type with your
    #   specified attributes. When Amazon EC2 selects instance types with
    #   your attributes, it will exclude instance types whose price exceeds
    #   your specified threshold.
    #
    #   The parameter accepts an integer, which Amazon EC2 interprets as a
    #   percentage.
    #
    #   To turn off price protection, specify a high value, such as
    #   `999999`.
    #
    #   This parameter is not supported for [GetSpotPlacementScores][1] and
    #   [GetInstanceTypesFromInstanceRequirements][2].
    #
    #   <note markdown="1"> If you set `TargetCapacityUnitType` to `vcpu` or `memory-mib`, the
    #   price protection threshold is applied based on the per-vCPU or
    #   per-memory price instead of the per-instance price.
    #
    #    </note>
    #
    #   Default: `20`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html
    #   @return [Integer]
    #
    # @!attribute [rw] bare_metal
    #   Indicates whether bare metal instance types must be included,
    #   excluded, or required.
    #
    #   * To include bare metal instance types, specify `included`.
    #
    #   * To require only bare metal instance types, specify `required`.
    #
    #   * To exclude bare metal instance types, specify `excluded`.
    #
    #   Default: `excluded`
    #   @return [String]
    #
    # @!attribute [rw] burstable_performance
    #   Indicates whether burstable performance T instance types are
    #   included, excluded, or required. For more information, see
    #   [Burstable performance instances][1].
    #
    #   * To include burstable performance instance types, specify
    #     `included`.
    #
    #   * To require only burstable performance instance types, specify
    #     `required`.
    #
    #   * To exclude burstable performance instance types, specify
    #     `excluded`.
    #
    #   Default: `excluded`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html
    #   @return [String]
    #
    # @!attribute [rw] require_hibernate_support
    #   Indicates whether instance types must support hibernation for
    #   On-Demand Instances.
    #
    #   This parameter is not supported for [GetSpotPlacementScores][1].
    #
    #   Default: `false`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_count
    #   The minimum and maximum number of network interfaces.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::NetworkInterfaceCount]
    #
    # @!attribute [rw] local_storage
    #   Indicates whether instance types with instance store volumes are
    #   included, excluded, or required. For more information, [Amazon EC2
    #   instance store][1] in the *Amazon EC2 User Guide*.
    #
    #   * To include instance types with instance store volumes, specify
    #     `included`.
    #
    #   * To require only instance types with instance store volumes,
    #     specify `required`.
    #
    #   * To exclude instance types with instance store volumes, specify
    #     `excluded`.
    #
    #   Default: `included`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html
    #   @return [String]
    #
    # @!attribute [rw] local_storage_types
    #   The type of local storage that is required.
    #
    #   * For instance types with hard disk drive (HDD) storage, specify
    #     `hdd`.
    #
    #   * For instance types with solid state drive (SSD) storage, specify
    #     `ssd`.
    #
    #   Default: `hdd` and `ssd`
    #   @return [Array<String>]
    #
    # @!attribute [rw] total_local_storage_gb
    #   The minimum and maximum amount of total local storage, in GB.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::TotalLocalStorageGB]
    #
    # @!attribute [rw] baseline_ebs_bandwidth_mbps
    #   The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps.
    #   For more information, see [Amazon EBS–optimized instances][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #   Default: No minimum or maximum limits
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html
    #   @return [Types::BaselineEbsBandwidthMbps]
    #
    # @!attribute [rw] accelerator_types
    #   The accelerator types that must be on the instance type.
    #
    #   * For instance types with FPGA accelerators, specify `fpga`.
    #
    #   * For instance types with GPU accelerators, specify `gpu`.
    #
    #   * For instance types with Inference accelerators, specify
    #     `inference`.
    #
    #   Default: Any accelerator type
    #   @return [Array<String>]
    #
    # @!attribute [rw] accelerator_count
    #   The minimum and maximum number of accelerators (GPUs, FPGAs, or
    #   Amazon Web Services Inferentia chips) on an instance.
    #
    #   To exclude accelerator-enabled instance types, set `Max` to `0`.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::AcceleratorCount]
    #
    # @!attribute [rw] accelerator_manufacturers
    #   Indicates whether instance types must have accelerators by specific
    #   manufacturers.
    #
    #   * For instance types with Amazon Web Services devices, specify
    #     `amazon-web-services`.
    #
    #   * For instance types with AMD devices, specify `amd`.
    #
    #   * For instance types with Habana devices, specify `habana`.
    #
    #   * For instance types with NVIDIA devices, specify `nvidia`.
    #
    #   * For instance types with Xilinx devices, specify `xilinx`.
    #
    #   Default: Any manufacturer
    #   @return [Array<String>]
    #
    # @!attribute [rw] accelerator_names
    #   The accelerators that must be on the instance type.
    #
    #   * For instance types with NVIDIA A10G GPUs, specify `a10g`.
    #
    #   * For instance types with NVIDIA A100 GPUs, specify `a100`.
    #
    #   * For instance types with NVIDIA H100 GPUs, specify `h100`.
    #
    #   * For instance types with Amazon Web Services Inferentia chips,
    #     specify `inferentia`.
    #
    #   * For instance types with NVIDIA GRID K520 GPUs, specify `k520`.
    #
    #   * For instance types with NVIDIA K80 GPUs, specify `k80`.
    #
    #   * For instance types with NVIDIA M60 GPUs, specify `m60`.
    #
    #   * For instance types with AMD Radeon Pro V520 GPUs, specify
    #     `radeon-pro-v520`.
    #
    #   * For instance types with NVIDIA T4 GPUs, specify `t4`.
    #
    #   * For instance types with NVIDIA T4G GPUs, specify `t4g`.
    #
    #   * For instance types with Xilinx VU9P FPGAs, specify `vu9p`.
    #
    #   * For instance types with NVIDIA V100 GPUs, specify `v100`.
    #
    #   Default: Any accelerator
    #   @return [Array<String>]
    #
    # @!attribute [rw] accelerator_total_memory_mi_b
    #   The minimum and maximum amount of total accelerator memory, in MiB.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::AcceleratorTotalMemoryMiB]
    #
    # @!attribute [rw] network_bandwidth_gbps
    #   The minimum and maximum amount of network bandwidth, in gigabits per
    #   second (Gbps).
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::NetworkBandwidthGbps]
    #
    # @!attribute [rw] allowed_instance_types
    #   The instance types to apply your specified attributes against. All
    #   other instance types are ignored, even if they match your specified
    #   attributes.
    #
    #   You can use strings with one or more wild cards, represented by an
    #   asterisk (`*`), to allow an instance type, size, or generation. The
    #   following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`.
    #
    #   For example, if you specify `c5*`,Amazon EC2 will allow the entire
    #   C5 instance family, which includes all C5a and C5n instance types.
    #   If you specify `m5a.*`, Amazon EC2 will allow all the M5a instance
    #   types, but not the M5n instance types.
    #
    #   <note markdown="1"> If you specify `AllowedInstanceTypes`, you can't specify
    #   `ExcludedInstanceTypes`.
    #
    #    </note>
    #
    #   Default: All instance types
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_spot_price_as_percentage_of_optimal_on_demand_price
    #   \[Price protection\] The price protection threshold for Spot
    #   Instances, as a percentage of an identified On-Demand price. The
    #   identified On-Demand price is the price of the lowest priced current
    #   generation C, M, or R instance type with your specified attributes.
    #   If no current generation C, M, or R instance type matches your
    #   attributes, then the identified price is from the lowest priced
    #   current generation instance types, and failing that, from the lowest
    #   priced previous generation instance types that match your
    #   attributes. When Amazon EC2 selects instance types with your
    #   attributes, it will exclude instance types whose price exceeds your
    #   specified threshold.
    #
    #   The parameter accepts an integer, which Amazon EC2 interprets as a
    #   percentage.
    #
    #   If you set `TargetCapacityUnitType` to `vcpu` or `memory-mib`, the
    #   price protection threshold is based on the per vCPU or per memory
    #   price instead of the per instance price.
    #
    #   <note markdown="1"> Only one of `SpotMaxPricePercentageOverLowestPrice` or
    #   `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice` can be specified.
    #   If you don't specify either, Amazon EC2 will automatically apply
    #   optimal price protection to consistently select from a wide range of
    #   instance types. To indicate no price protection threshold for Spot
    #   Instances, meaning you want to consider all instance types that
    #   match your attributes, include one of these parameters and specify a
    #   high value, such as `999999`.
    #
    #    </note>
    #   @return [Integer]
    #
    # @!attribute [rw] baseline_performance_factors
    #   The baseline performance to consider, using an instance family as a
    #   baseline reference. The instance family establishes the lowest
    #   acceptable level of performance. Amazon EC2 uses this baseline to
    #   guide instance type selection, but there is no guarantee that the
    #   selected instance types will always exceed the baseline for every
    #   application. Currently, this parameter only supports CPU performance
    #   as a baseline performance factor. For more information, see
    #   [Performance protection][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-abis-performance-protection
    #   @return [Types::BaselinePerformanceFactors]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceRequirements AWS API Documentation
    #
    class InstanceRequirements < Struct.new(
      :v_cpu_count,
      :memory_mi_b,
      :cpu_manufacturers,
      :memory_gi_b_per_v_cpu,
      :excluded_instance_types,
      :instance_generations,
      :spot_max_price_percentage_over_lowest_price,
      :on_demand_max_price_percentage_over_lowest_price,
      :bare_metal,
      :burstable_performance,
      :require_hibernate_support,
      :network_interface_count,
      :local_storage,
      :local_storage_types,
      :total_local_storage_gb,
      :baseline_ebs_bandwidth_mbps,
      :accelerator_types,
      :accelerator_count,
      :accelerator_manufacturers,
      :accelerator_names,
      :accelerator_total_memory_mi_b,
      :network_bandwidth_gbps,
      :allowed_instance_types,
      :max_spot_price_as_percentage_of_optimal_on_demand_price,
      :baseline_performance_factors)
      SENSITIVE = []
      include Aws::Structure
    end

    # The attributes for the instance types. When you specify instance
    # attributes, Amazon EC2 will identify instance types with these
    # attributes.
    #
    # You must specify `VCpuCount` and `MemoryMiB`. All other attributes are
    # optional. Any unspecified optional attribute is set to its default.
    #
    # When you specify multiple attributes, you get instance types that
    # satisfy all of the specified attributes. If you specify multiple
    # values for an attribute, you get instance types that satisfy any of
    # the specified values.
    #
    # To limit the list of instance types from which Amazon EC2 can identify
    # matching instance types, you can use one of the following parameters,
    # but not both in the same request:
    #
    # * `AllowedInstanceTypes` - The instance types to include in the list.
    #   All other instance types are ignored, even if they match your
    #   specified attributes.
    #
    # * `ExcludedInstanceTypes` - The instance types to exclude from the
    #   list, even if they match your specified attributes.
    #
    # <note markdown="1"> If you specify `InstanceRequirements`, you can't specify
    # `InstanceType`.
    #
    #  Attribute-based instance type selection is only supported when using
    # Auto Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If
    # you plan to use the launch template in the [launch instance
    # wizard][1], or with the [RunInstances][2] API or
    # [AWS::EC2::Instance][3] Amazon Web Services CloudFormation resource,
    # you can't specify `InstanceRequirements`.
    #
    #  </note>
    #
    # For more information, see [Specify attributes for instance type
    # selection for EC2 Fleet or Spot Fleet][4] and [Spot placement
    # score][5] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html
    # [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    # [3]: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html
    # [4]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html
    # [5]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html
    #
    # @!attribute [rw] v_cpu_count
    #   The minimum and maximum number of vCPUs.
    #   @return [Types::VCpuCountRangeRequest]
    #
    # @!attribute [rw] memory_mi_b
    #   The minimum and maximum amount of memory, in MiB.
    #   @return [Types::MemoryMiBRequest]
    #
    # @!attribute [rw] cpu_manufacturers
    #   The CPU manufacturers to include.
    #
    #   * For instance types with Intel CPUs, specify `intel`.
    #
    #   * For instance types with AMD CPUs, specify `amd`.
    #
    #   * For instance types with Amazon Web Services CPUs, specify
    #     `amazon-web-services`.
    #
    #   * For instance types with Apple CPUs, specify `apple`.
    #
    #   <note markdown="1"> Don't confuse the CPU manufacturer with the CPU architecture.
    #   Instances will be launched with a compatible CPU architecture based
    #   on the Amazon Machine Image (AMI) that you specify in your launch
    #   template.
    #
    #    </note>
    #
    #   Default: Any manufacturer
    #   @return [Array<String>]
    #
    # @!attribute [rw] memory_gi_b_per_v_cpu
    #   The minimum and maximum amount of memory per vCPU, in GiB.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::MemoryGiBPerVCpuRequest]
    #
    # @!attribute [rw] excluded_instance_types
    #   The instance types to exclude.
    #
    #   You can use strings with one or more wild cards, represented by an
    #   asterisk (`*`), to exclude an instance family, type, size, or
    #   generation. The following are examples: `m5.8xlarge`, `c5*.*`,
    #   `m5a.*`, `r*`, `*3*`.
    #
    #   For example, if you specify `c5*`,Amazon EC2 will exclude the entire
    #   C5 instance family, which includes all C5a and C5n instance types.
    #   If you specify `m5a.*`, Amazon EC2 will exclude all the M5a instance
    #   types, but not the M5n instance types.
    #
    #   <note markdown="1"> If you specify `ExcludedInstanceTypes`, you can't specify
    #   `AllowedInstanceTypes`.
    #
    #    </note>
    #
    #   Default: No excluded instance types
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_generations
    #   Indicates whether current or previous generation instance types are
    #   included. The current generation instance types are recommended for
    #   use. Current generation instance types are typically the latest two
    #   to three generations in each instance family. For more information,
    #   see [Instance types][1] in the *Amazon EC2 User Guide*.
    #
    #   For current generation instance types, specify `current`.
    #
    #   For previous generation instance types, specify `previous`.
    #
    #   Default: Current and previous generation instance types
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] spot_max_price_percentage_over_lowest_price
    #   \[Price protection\] The price protection threshold for Spot
    #   Instances, as a percentage higher than an identified Spot price. The
    #   identified Spot price is the Spot price of the lowest priced current
    #   generation C, M, or R instance type with your specified attributes.
    #   If no current generation C, M, or R instance type matches your
    #   attributes, then the identified Spot price is from the lowest priced
    #   current generation instance types, and failing that, from the lowest
    #   priced previous generation instance types that match your
    #   attributes. When Amazon EC2 selects instance types with your
    #   attributes, it will exclude instance types whose Spot price exceeds
    #   your specified threshold.
    #
    #   The parameter accepts an integer, which Amazon EC2 interprets as a
    #   percentage.
    #
    #   If you set `TargetCapacityUnitType` to `vcpu` or `memory-mib`, the
    #   price protection threshold is applied based on the per-vCPU or
    #   per-memory price instead of the per-instance price.
    #
    #   This parameter is not supported for [GetSpotPlacementScores][1] and
    #   [GetInstanceTypesFromInstanceRequirements][2].
    #
    #   <note markdown="1"> Only one of `SpotMaxPricePercentageOverLowestPrice` or
    #   `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice` can be specified.
    #   If you don't specify either, Amazon EC2 will automatically apply
    #   optimal price protection to consistently select from a wide range of
    #   instance types. To indicate no price protection threshold for Spot
    #   Instances, meaning you want to consider all instance types that
    #   match your attributes, include one of these parameters and specify a
    #   high value, such as `999999`.
    #
    #    </note>
    #
    #   Default: `100`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html
    #   @return [Integer]
    #
    # @!attribute [rw] on_demand_max_price_percentage_over_lowest_price
    #   \[Price protection\] The price protection threshold for On-Demand
    #   Instances, as a percentage higher than an identified On-Demand
    #   price. The identified On-Demand price is the price of the lowest
    #   priced current generation C, M, or R instance type with your
    #   specified attributes. When Amazon EC2 selects instance types with
    #   your attributes, it will exclude instance types whose price exceeds
    #   your specified threshold.
    #
    #   The parameter accepts an integer, which Amazon EC2 interprets as a
    #   percentage.
    #
    #   To indicate no price protection threshold, specify a high value,
    #   such as `999999`.
    #
    #   This parameter is not supported for [GetSpotPlacementScores][1] and
    #   [GetInstanceTypesFromInstanceRequirements][2].
    #
    #   <note markdown="1"> If you set `TargetCapacityUnitType` to `vcpu` or `memory-mib`, the
    #   price protection threshold is applied based on the per-vCPU or
    #   per-memory price instead of the per-instance price.
    #
    #    </note>
    #
    #   Default: `20`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html
    #   @return [Integer]
    #
    # @!attribute [rw] bare_metal
    #   Indicates whether bare metal instance types must be included,
    #   excluded, or required.
    #
    #   * To include bare metal instance types, specify `included`.
    #
    #   * To require only bare metal instance types, specify `required`.
    #
    #   * To exclude bare metal instance types, specify `excluded`.
    #
    #   Default: `excluded`
    #   @return [String]
    #
    # @!attribute [rw] burstable_performance
    #   Indicates whether burstable performance T instance types are
    #   included, excluded, or required. For more information, see
    #   [Burstable performance instances][1].
    #
    #   * To include burstable performance instance types, specify
    #     `included`.
    #
    #   * To require only burstable performance instance types, specify
    #     `required`.
    #
    #   * To exclude burstable performance instance types, specify
    #     `excluded`.
    #
    #   Default: `excluded`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html
    #   @return [String]
    #
    # @!attribute [rw] require_hibernate_support
    #   Indicates whether instance types must support hibernation for
    #   On-Demand Instances.
    #
    #   This parameter is not supported for [GetSpotPlacementScores][1].
    #
    #   Default: `false`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_count
    #   The minimum and maximum number of network interfaces.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::NetworkInterfaceCountRequest]
    #
    # @!attribute [rw] local_storage
    #   Indicates whether instance types with instance store volumes are
    #   included, excluded, or required. For more information, [Amazon EC2
    #   instance store][1] in the *Amazon EC2 User Guide*.
    #
    #   * To include instance types with instance store volumes, specify
    #     `included`.
    #
    #   * To require only instance types with instance store volumes,
    #     specify `required`.
    #
    #   * To exclude instance types with instance store volumes, specify
    #     `excluded`.
    #
    #   Default: `included`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html
    #   @return [String]
    #
    # @!attribute [rw] local_storage_types
    #   The type of local storage that is required.
    #
    #   * For instance types with hard disk drive (HDD) storage, specify
    #     `hdd`.
    #
    #   * For instance types with solid state drive (SSD) storage, specify
    #     `ssd`.
    #
    #   Default: `hdd` and `ssd`
    #   @return [Array<String>]
    #
    # @!attribute [rw] total_local_storage_gb
    #   The minimum and maximum amount of total local storage, in GB.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::TotalLocalStorageGBRequest]
    #
    # @!attribute [rw] baseline_ebs_bandwidth_mbps
    #   The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps.
    #   For more information, see [Amazon EBS–optimized instances][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #   Default: No minimum or maximum limits
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html
    #   @return [Types::BaselineEbsBandwidthMbpsRequest]
    #
    # @!attribute [rw] accelerator_types
    #   The accelerator types that must be on the instance type.
    #
    #   * For instance types with FPGA accelerators, specify `fpga`.
    #
    #   * For instance types with GPU accelerators, specify `gpu`.
    #
    #   * For instance types with Inference accelerators, specify
    #     `inference`.
    #
    #   Default: Any accelerator type
    #   @return [Array<String>]
    #
    # @!attribute [rw] accelerator_count
    #   The minimum and maximum number of accelerators (GPUs, FPGAs, or
    #   Amazon Web Services Inferentia chips) on an instance.
    #
    #   To exclude accelerator-enabled instance types, set `Max` to `0`.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::AcceleratorCountRequest]
    #
    # @!attribute [rw] accelerator_manufacturers
    #   Indicates whether instance types must have accelerators by specific
    #   manufacturers.
    #
    #   * For instance types with Amazon Web Services devices, specify
    #     `amazon-web-services`.
    #
    #   * For instance types with AMD devices, specify `amd`.
    #
    #   * For instance types with Habana devices, specify `habana`.
    #
    #   * For instance types with NVIDIA devices, specify `nvidia`.
    #
    #   * For instance types with Xilinx devices, specify `xilinx`.
    #
    #   Default: Any manufacturer
    #   @return [Array<String>]
    #
    # @!attribute [rw] accelerator_names
    #   The accelerators that must be on the instance type.
    #
    #   * For instance types with NVIDIA A10G GPUs, specify `a10g`.
    #
    #   * For instance types with NVIDIA A100 GPUs, specify `a100`.
    #
    #   * For instance types with NVIDIA H100 GPUs, specify `h100`.
    #
    #   * For instance types with Amazon Web Services Inferentia chips,
    #     specify `inferentia`.
    #
    #   * For instance types with NVIDIA GRID K520 GPUs, specify `k520`.
    #
    #   * For instance types with NVIDIA K80 GPUs, specify `k80`.
    #
    #   * For instance types with NVIDIA M60 GPUs, specify `m60`.
    #
    #   * For instance types with AMD Radeon Pro V520 GPUs, specify
    #     `radeon-pro-v520`.
    #
    #   * For instance types with NVIDIA T4 GPUs, specify `t4`.
    #
    #   * For instance types with NVIDIA T4G GPUs, specify `t4g`.
    #
    #   * For instance types with Xilinx VU9P FPGAs, specify `vu9p`.
    #
    #   * For instance types with NVIDIA V100 GPUs, specify `v100`.
    #
    #   Default: Any accelerator
    #   @return [Array<String>]
    #
    # @!attribute [rw] accelerator_total_memory_mi_b
    #   The minimum and maximum amount of total accelerator memory, in MiB.
    #
    #   Default: No minimum or maximum limits
    #   @return [Types::AcceleratorTotalMemoryMiBRequest]
    #
    # @!attribute [rw] network_bandwidth_gbps
    #   The minimum and maximum amount of baseline network bandwidth, in
    #   gigabits per second (Gbps). For more information, see [Amazon EC2
    #   instance network bandwidth][1] in the *Amazon EC2 User Guide*.
    #
    #   Default: No minimum or maximum limits
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html
    #   @return [Types::NetworkBandwidthGbpsRequest]
    #
    # @!attribute [rw] allowed_instance_types
    #   The instance types to apply your specified attributes against. All
    #   other instance types are ignored, even if they match your specified
    #   attributes.
    #
    #   You can use strings with one or more wild cards, represented by an
    #   asterisk (`*`), to allow an instance type, size, or generation. The
    #   following are examples: `m5.8xlarge`, `c5*.*`, `m5a.*`, `r*`, `*3*`.
    #
    #   For example, if you specify `c5*`,Amazon EC2 will allow the entire
    #   C5 instance family, which includes all C5a and C5n instance types.
    #   If you specify `m5a.*`, Amazon EC2 will allow all the M5a instance
    #   types, but not the M5n instance types.
    #
    #   <note markdown="1"> If you specify `AllowedInstanceTypes`, you can't specify
    #   `ExcludedInstanceTypes`.
    #
    #    </note>
    #
    #   Default: All instance types
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_spot_price_as_percentage_of_optimal_on_demand_price
    #   \[Price protection\] The price protection threshold for Spot
    #   Instances, as a percentage of an identified On-Demand price. The
    #   identified On-Demand price is the price of the lowest priced current
    #   generation C, M, or R instance type with your specified attributes.
    #   If no current generation C, M, or R instance type matches your
    #   attributes, then the identified price is from the lowest priced
    #   current generation instance types, and failing that, from the lowest
    #   priced previous generation instance types that match your
    #   attributes. When Amazon EC2 selects instance types with your
    #   attributes, it will exclude instance types whose price exceeds your
    #   specified threshold.
    #
    #   The parameter accepts an integer, which Amazon EC2 interprets as a
    #   percentage.
    #
    #   If you set `TargetCapacityUnitType` to `vcpu` or `memory-mib`, the
    #   price protection threshold is based on the per vCPU or per memory
    #   price instead of the per instance price.
    #
    #   <note markdown="1"> Only one of `SpotMaxPricePercentageOverLowestPrice` or
    #   `MaxSpotPriceAsPercentageOfOptimalOnDemandPrice` can be specified.
    #   If you don't specify either, Amazon EC2 will automatically apply
    #   optimal price protection to consistently select from a wide range of
    #   instance types. To indicate no price protection threshold for Spot
    #   Instances, meaning you want to consider all instance types that
    #   match your attributes, include one of these parameters and specify a
    #   high value, such as `999999`.
    #
    #    </note>
    #   @return [Integer]
    #
    # @!attribute [rw] baseline_performance_factors
    #   The baseline performance to consider, using an instance family as a
    #   baseline reference. The instance family establishes the lowest
    #   acceptable level of performance. Amazon EC2 uses this baseline to
    #   guide instance type selection, but there is no guarantee that the
    #   selected instance types will always exceed the baseline for every
    #   application. Currently, this parameter only supports CPU performance
    #   as a baseline performance factor. For more information, see
    #   [Performance protection][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-abis-performance-protection
    #   @return [Types::BaselinePerformanceFactorsRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceRequirementsRequest AWS API Documentation
    #
    class InstanceRequirementsRequest < Struct.new(
      :v_cpu_count,
      :memory_mi_b,
      :cpu_manufacturers,
      :memory_gi_b_per_v_cpu,
      :excluded_instance_types,
      :instance_generations,
      :spot_max_price_percentage_over_lowest_price,
      :on_demand_max_price_percentage_over_lowest_price,
      :bare_metal,
      :burstable_performance,
      :require_hibernate_support,
      :network_interface_count,
      :local_storage,
      :local_storage_types,
      :total_local_storage_gb,
      :baseline_ebs_bandwidth_mbps,
      :accelerator_types,
      :accelerator_count,
      :accelerator_manufacturers,
      :accelerator_names,
      :accelerator_total_memory_mi_b,
      :network_bandwidth_gbps,
      :allowed_instance_types,
      :max_spot_price_as_percentage_of_optimal_on_demand_price,
      :baseline_performance_factors)
      SENSITIVE = []
      include Aws::Structure
    end

    # The architecture type, virtualization type, and other attributes for
    # the instance types. When you specify instance attributes, Amazon EC2
    # will identify instance types with those attributes.
    #
    # If you specify `InstanceRequirementsWithMetadataRequest`, you can't
    # specify `InstanceTypes`.
    #
    # @!attribute [rw] architecture_types
    #   The architecture type.
    #   @return [Array<String>]
    #
    # @!attribute [rw] virtualization_types
    #   The virtualization type.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_requirements
    #   The attributes for the instance types. When you specify instance
    #   attributes, Amazon EC2 will identify instance types with those
    #   attributes.
    #   @return [Types::InstanceRequirementsRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceRequirementsWithMetadataRequest AWS API Documentation
    #
    class InstanceRequirementsWithMetadataRequest < Struct.new(
      :architecture_types,
      :virtualization_types,
      :instance_requirements)
      SENSITIVE = []
      include Aws::Structure
    end

    # The instance details to specify which volumes should be snapshotted.
    #
    # @!attribute [rw] instance_id
    #   The instance to specify which volumes should be snapshotted.
    #   @return [String]
    #
    # @!attribute [rw] exclude_boot_volume
    #   Excludes the root volume from being snapshotted.
    #   @return [Boolean]
    #
    # @!attribute [rw] exclude_data_volume_ids
    #   The IDs of the data (non-root) volumes to exclude from the
    #   multi-volume snapshot set. If you specify the ID of the root volume,
    #   the request fails. To exclude the root volume, use
    #   **ExcludeBootVolume**.
    #
    #   You can specify up to 40 volume IDs per request.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceSpecification AWS API Documentation
    #
    class InstanceSpecification < Struct.new(
      :instance_id,
      :exclude_boot_volume,
      :exclude_data_volume_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the current state of an instance.
    #
    # @!attribute [rw] code
    #   The state of the instance as a 16-bit unsigned integer.
    #
    #   The high byte is all of the bits between 2^8 and (2^16)-1, which
    #   equals decimal values between 256 and 65,535. These numerical values
    #   are used for internal purposes and should be ignored.
    #
    #   The low byte is all of the bits between 2^0 and (2^8)-1, which
    #   equals decimal values between 0 and 255.
    #
    #   The valid values for instance-state-code will all be in the range of
    #   the low byte and they are:
    #
    #   * `0` : `pending`
    #
    #   * `16` : `running`
    #
    #   * `32` : `shutting-down`
    #
    #   * `48` : `terminated`
    #
    #   * `64` : `stopping`
    #
    #   * `80` : `stopped`
    #
    #   You can ignore the high byte value by zeroing out all of the bits
    #   above 2^8 or 256 in decimal.
    #   @return [Integer]
    #
    # @!attribute [rw] name
    #   The current state of the instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceState AWS API Documentation
    #
    class InstanceState < Struct.new(
      :code,
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an instance state change.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] current_state
    #   The current state of the instance.
    #   @return [Types::InstanceState]
    #
    # @!attribute [rw] previous_state
    #   The previous state of the instance.
    #   @return [Types::InstanceState]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStateChange AWS API Documentation
    #
    class InstanceStateChange < Struct.new(
      :instance_id,
      :current_state,
      :previous_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the status of an instance.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the instance.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone of the instance.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost.
    #   @return [String]
    #
    # @!attribute [rw] operator
    #   The service provider that manages the instance.
    #   @return [Types::OperatorResponse]
    #
    # @!attribute [rw] events
    #   Any scheduled events associated with the instance.
    #   @return [Array<Types::InstanceStatusEvent>]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_state
    #   The intended state of the instance. DescribeInstanceStatus requires
    #   that an instance be in the `running` state.
    #   @return [Types::InstanceState]
    #
    # @!attribute [rw] instance_status
    #   Reports impaired functionality that stems from issues internal to
    #   the instance, such as impaired reachability.
    #   @return [Types::InstanceStatusSummary]
    #
    # @!attribute [rw] system_status
    #   Reports impaired functionality that stems from issues related to the
    #   systems that support an instance, such as hardware failures and
    #   network connectivity problems.
    #   @return [Types::InstanceStatusSummary]
    #
    # @!attribute [rw] attached_ebs_status
    #   Reports impaired functionality that stems from an attached Amazon
    #   EBS volume that is unreachable and unable to complete I/O
    #   operations.
    #   @return [Types::EbsStatusSummary]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStatus AWS API Documentation
    #
    class InstanceStatus < Struct.new(
      :availability_zone,
      :availability_zone_id,
      :outpost_arn,
      :operator,
      :events,
      :instance_id,
      :instance_state,
      :instance_status,
      :system_status,
      :attached_ebs_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the instance status.
    #
    # @!attribute [rw] impaired_since
    #   The time when a status check failed. For an instance that was
    #   launched and impaired, this is the time when the instance was
    #   launched.
    #   @return [Time]
    #
    # @!attribute [rw] name
    #   The type of instance status.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStatusDetails AWS API Documentation
    #
    class InstanceStatusDetails < Struct.new(
      :impaired_since,
      :name,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a scheduled event for an instance.
    #
    # @!attribute [rw] instance_event_id
    #   The ID of the event.
    #   @return [String]
    #
    # @!attribute [rw] code
    #   The event code.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the event.
    #
    #   After a scheduled event is completed, it can still be described for
    #   up to a week. If the event has been completed, this description
    #   starts with the following text: \[Completed\].
    #   @return [String]
    #
    # @!attribute [rw] not_after
    #   The latest scheduled end time for the event.
    #   @return [Time]
    #
    # @!attribute [rw] not_before
    #   The earliest scheduled start time for the event.
    #   @return [Time]
    #
    # @!attribute [rw] not_before_deadline
    #   The deadline for starting the event.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStatusEvent AWS API Documentation
    #
    class InstanceStatusEvent < Struct.new(
      :instance_event_id,
      :code,
      :description,
      :not_after,
      :not_before,
      :not_before_deadline)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the status of an instance.
    #
    # @!attribute [rw] details
    #   The system instance health or application instance health.
    #   @return [Array<Types::InstanceStatusDetails>]
    #
    # @!attribute [rw] status
    #   The status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStatusSummary AWS API Documentation
    #
    class InstanceStatusSummary < Struct.new(
      :details,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the instance store features that are supported by the
    # instance type.
    #
    # @!attribute [rw] total_size_in_gb
    #   The total size of the disks, in GB.
    #   @return [Integer]
    #
    # @!attribute [rw] disks
    #   Describes the disks that are available for the instance type.
    #   @return [Array<Types::DiskInfo>]
    #
    # @!attribute [rw] nvme_support
    #   Indicates whether non-volatile memory express (NVMe) is supported.
    #   @return [String]
    #
    # @!attribute [rw] encryption_support
    #   Indicates whether data is encrypted at rest.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceStorageInfo AWS API Documentation
    #
    class InstanceStorageInfo < Struct.new(
      :total_size_in_gb,
      :disks,
      :nvme_support,
      :encryption_support)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the registered tag keys for the current Region.
    #
    # @!attribute [rw] instance_tag_keys
    #   The registered tag keys.
    #   @return [Array<String>]
    #
    # @!attribute [rw] include_all_tags_of_instance
    #   Indicates wheter all tag keys in the current Region are registered
    #   to appear in scheduled event notifications. `true` indicates that
    #   all tag keys in the current Region are registered.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceTagNotificationAttribute AWS API Documentation
    #
    class InstanceTagNotificationAttribute < Struct.new(
      :instance_tag_keys,
      :include_all_tags_of_instance)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the instance topology.
    #
    # @!attribute [rw] instance_id
    #   The instance ID.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the placement group that the instance is in.
    #   @return [String]
    #
    # @!attribute [rw] network_nodes
    #   The network nodes. The nodes are hashed based on your account.
    #   Instances from different accounts running under the same server will
    #   return a different hashed list of strings.
    #   @return [Array<String>]
    #
    # @!attribute [rw] availability_zone
    #   The name of the Availability Zone or Local Zone that the instance is
    #   in.
    #   @return [String]
    #
    # @!attribute [rw] zone_id
    #   The ID of the Availability Zone or Local Zone that the instance is
    #   in.
    #   @return [String]
    #
    # @!attribute [rw] capacity_block_id
    #   The ID of the Capacity Block. This parameter is only supported for
    #   Ultraserver instances and identifies instances within the
    #   Ultraserver domain.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceTopology AWS API Documentation
    #
    class InstanceTopology < Struct.new(
      :instance_id,
      :instance_type,
      :group_name,
      :network_nodes,
      :availability_zone,
      :zone_id,
      :capacity_block_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the instance type.
    #
    # @!attribute [rw] instance_type
    #   The instance type. For more information, see [Instance types][1] in
    #   the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
    #   @return [String]
    #
    # @!attribute [rw] current_generation
    #   Indicates whether the instance type is current generation.
    #   @return [Boolean]
    #
    # @!attribute [rw] free_tier_eligible
    #   Indicates whether the instance type is eligible for the free tier.
    #   @return [Boolean]
    #
    # @!attribute [rw] supported_usage_classes
    #   Indicates whether the instance type is offered for spot, On-Demand,
    #   or Capacity Blocks.
    #   @return [Array<String>]
    #
    # @!attribute [rw] supported_root_device_types
    #   The supported root device types.
    #   @return [Array<String>]
    #
    # @!attribute [rw] supported_virtualization_types
    #   The supported virtualization types.
    #   @return [Array<String>]
    #
    # @!attribute [rw] bare_metal
    #   Indicates whether the instance is a bare metal instance type.
    #   @return [Boolean]
    #
    # @!attribute [rw] hypervisor
    #   The hypervisor for the instance type.
    #   @return [String]
    #
    # @!attribute [rw] processor_info
    #   Describes the processor.
    #   @return [Types::ProcessorInfo]
    #
    # @!attribute [rw] v_cpu_info
    #   Describes the vCPU configurations for the instance type.
    #   @return [Types::VCpuInfo]
    #
    # @!attribute [rw] memory_info
    #   Describes the memory for the instance type.
    #   @return [Types::MemoryInfo]
    #
    # @!attribute [rw] instance_storage_supported
    #   Indicates whether instance storage is supported.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_storage_info
    #   Describes the instance storage for the instance type.
    #   @return [Types::InstanceStorageInfo]
    #
    # @!attribute [rw] ebs_info
    #   Describes the Amazon EBS settings for the instance type.
    #   @return [Types::EbsInfo]
    #
    # @!attribute [rw] network_info
    #   Describes the network settings for the instance type.
    #   @return [Types::NetworkInfo]
    #
    # @!attribute [rw] gpu_info
    #   Describes the GPU accelerator settings for the instance type.
    #   @return [Types::GpuInfo]
    #
    # @!attribute [rw] fpga_info
    #   Describes the FPGA accelerator settings for the instance type.
    #   @return [Types::FpgaInfo]
    #
    # @!attribute [rw] placement_group_info
    #   Describes the placement group settings for the instance type.
    #   @return [Types::PlacementGroupInfo]
    #
    # @!attribute [rw] inference_accelerator_info
    #   Describes the Inference accelerator settings for the instance type.
    #   @return [Types::InferenceAcceleratorInfo]
    #
    # @!attribute [rw] hibernation_supported
    #   Indicates whether On-Demand hibernation is supported.
    #   @return [Boolean]
    #
    # @!attribute [rw] burstable_performance_supported
    #   Indicates whether the instance type is a burstable performance T
    #   instance type. For more information, see [Burstable performance
    #   instances][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html
    #   @return [Boolean]
    #
    # @!attribute [rw] dedicated_hosts_supported
    #   Indicates whether Dedicated Hosts are supported on the instance
    #   type.
    #   @return [Boolean]
    #
    # @!attribute [rw] auto_recovery_supported
    #   Indicates whether Amazon CloudWatch action based recovery is
    #   supported.
    #   @return [Boolean]
    #
    # @!attribute [rw] supported_boot_modes
    #   The supported boot modes. For more information, see [Boot modes][1]
    #   in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] nitro_enclaves_support
    #   Indicates whether Nitro Enclaves is supported.
    #   @return [String]
    #
    # @!attribute [rw] nitro_tpm_support
    #   Indicates whether NitroTPM is supported.
    #   @return [String]
    #
    # @!attribute [rw] nitro_tpm_info
    #   Describes the supported NitroTPM versions for the instance type.
    #   @return [Types::NitroTpmInfo]
    #
    # @!attribute [rw] media_accelerator_info
    #   Describes the media accelerator settings for the instance type.
    #   @return [Types::MediaAcceleratorInfo]
    #
    # @!attribute [rw] neuron_info
    #   Describes the Neuron accelerator settings for the instance type.
    #   @return [Types::NeuronInfo]
    #
    # @!attribute [rw] phc_support
    #   Indicates whether a local Precision Time Protocol (PTP) hardware
    #   clock (PHC) is supported.
    #   @return [String]
    #
    # @!attribute [rw] reboot_migration_support
    #   Indicates whether reboot migration during a user-initiated reboot is
    #   supported for instances that have a scheduled `system-reboot` event.
    #   For more information, see [Enable or disable reboot migration][1] in
    #   the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceTypeInfo AWS API Documentation
    #
    class InstanceTypeInfo < Struct.new(
      :instance_type,
      :current_generation,
      :free_tier_eligible,
      :supported_usage_classes,
      :supported_root_device_types,
      :supported_virtualization_types,
      :bare_metal,
      :hypervisor,
      :processor_info,
      :v_cpu_info,
      :memory_info,
      :instance_storage_supported,
      :instance_storage_info,
      :ebs_info,
      :network_info,
      :gpu_info,
      :fpga_info,
      :placement_group_info,
      :inference_accelerator_info,
      :hibernation_supported,
      :burstable_performance_supported,
      :dedicated_hosts_supported,
      :auto_recovery_supported,
      :supported_boot_modes,
      :nitro_enclaves_support,
      :nitro_tpm_support,
      :nitro_tpm_info,
      :media_accelerator_info,
      :neuron_info,
      :phc_support,
      :reboot_migration_support)
      SENSITIVE = []
      include Aws::Structure
    end

    # The list of instance types with the specified instance attributes.
    #
    # @!attribute [rw] instance_type
    #   The matching instance type.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceTypeInfoFromInstanceRequirements AWS API Documentation
    #
    class InstanceTypeInfoFromInstanceRequirements < Struct.new(
      :instance_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # The instance types offered.
    #
    # @!attribute [rw] instance_type
    #   The instance type. For more information, see [Instance types][1] in
    #   the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
    #   @return [String]
    #
    # @!attribute [rw] location_type
    #   The location type.
    #   @return [String]
    #
    # @!attribute [rw] location
    #   The identifier for the location. This depends on the location type.
    #   For example, if the location type is `region`, the location is the
    #   Region code (for example, `us-east-2`.)
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceTypeOffering AWS API Documentation
    #
    class InstanceTypeOffering < Struct.new(
      :instance_type,
      :location_type,
      :location)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the Capacity Reservation usage.
    #
    # @!attribute [rw] account_id
    #   The ID of the Amazon Web Services account that is making use of the
    #   Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] used_instance_count
    #   The number of instances the Amazon Web Services account currently
    #   has in the Capacity Reservation.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InstanceUsage AWS API Documentation
    #
    class InstanceUsage < Struct.new(
      :account_id,
      :used_instance_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes service integrations with VPC Flow logs.
    #
    # @!attribute [rw] athena_integrations
    #   Information about the integration with Amazon Athena.
    #   @return [Array<Types::AthenaIntegration>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IntegrateServices AWS API Documentation
    #
    class IntegrateServices < Struct.new(
      :athena_integrations)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an internet gateway.
    #
    # @!attribute [rw] attachments
    #   Any VPCs attached to the internet gateway.
    #   @return [Array<Types::InternetGatewayAttachment>]
    #
    # @!attribute [rw] internet_gateway_id
    #   The ID of the internet gateway.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the internet
    #   gateway.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the internet gateway.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InternetGateway AWS API Documentation
    #
    class InternetGateway < Struct.new(
      :attachments,
      :internet_gateway_id,
      :owner_id,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the attachment of a VPC to an internet gateway or an
    # egress-only internet gateway.
    #
    # @!attribute [rw] state
    #   The current state of the attachment. For an internet gateway, the
    #   state is `available` when attached to a VPC; otherwise, this value
    #   is not returned.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/InternetGatewayAttachment AWS API Documentation
    #
    class InternetGatewayAttachment < Struct.new(
      :state,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the permissions for a security group rule.
    #
    # @!attribute [rw] ip_protocol
    #   The IP protocol name (`tcp`, `udp`, `icmp`, `icmpv6`) or number (see
    #   [Protocol Numbers][1]).
    #
    #   Use `-1` to specify all protocols. When authorizing security group
    #   rules, specifying `-1` or a protocol number other than `tcp`, `udp`,
    #   `icmp`, or `icmpv6` allows traffic on all ports, regardless of any
    #   port range you specify. For `tcp`, `udp`, and `icmp`, you must
    #   specify a port range. For `icmpv6`, the port range is optional; if
    #   you omit the port range, traffic for all types and codes is allowed.
    #
    #
    #
    #   [1]: http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
    #   @return [String]
    #
    # @!attribute [rw] from_port
    #   If the protocol is TCP or UDP, this is the start of the port range.
    #   If the protocol is ICMP or ICMPv6, this is the ICMP type or -1 (all
    #   ICMP types).
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   If the protocol is TCP or UDP, this is the end of the port range. If
    #   the protocol is ICMP or ICMPv6, this is the ICMP code or -1 (all
    #   ICMP codes). If the start port is -1 (all ICMP types), then the end
    #   port must be -1 (all ICMP codes).
    #   @return [Integer]
    #
    # @!attribute [rw] user_id_group_pairs
    #   The security group and Amazon Web Services account ID pairs.
    #   @return [Array<Types::UserIdGroupPair>]
    #
    # @!attribute [rw] ip_ranges
    #   The IPv4 address ranges.
    #   @return [Array<Types::IpRange>]
    #
    # @!attribute [rw] ipv_6_ranges
    #   The IPv6 address ranges.
    #   @return [Array<Types::Ipv6Range>]
    #
    # @!attribute [rw] prefix_list_ids
    #   The prefix list IDs.
    #   @return [Array<Types::PrefixListId>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpPermission AWS API Documentation
    #
    class IpPermission < Struct.new(
      :ip_protocol,
      :from_port,
      :to_port,
      :user_id_group_pairs,
      :ip_ranges,
      :ipv_6_ranges,
      :prefix_list_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv4 address range.
    #
    # @!attribute [rw] description
    #   A description for the security group rule that references this IPv4
    #   address range.
    #
    #   Constraints: Up to 255 characters in length. Allowed characters are
    #   a-z, A-Z, 0-9, spaces, and .\_-:/()#,@\[\]+=&amp;;\{}!$*
    #   @return [String]
    #
    # @!attribute [rw] cidr_ip
    #   The IPv4 address range. You can either specify a CIDR block or a
    #   source security group, not both. To specify a single IPv4 address,
    #   use the /32 prefix length.
    #
    #   <note markdown="1"> Amazon Web Services [canonicalizes][1] IPv4 and IPv6 CIDRs. For
    #   example, if you specify 100.68.0.18/18 for the CIDR block, Amazon
    #   Web Services canonicalizes the CIDR block to 100.68.0.0/18. Any
    #   subsequent DescribeSecurityGroups and DescribeSecurityGroupRules
    #   calls will return the canonicalized form of the CIDR block.
    #   Additionally, if you attempt to add another rule with the
    #   non-canonical form of the CIDR (such as 100.68.0.18/18) and there is
    #   already a rule for the canonicalized form of the CIDR block (such as
    #   100.68.0.0/18), the API throws an duplicate rule error.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://en.wikipedia.org/wiki/Canonicalization
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpRange AWS API Documentation
    #
    class IpRange < Struct.new(
      :description,
      :cidr_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # IPAM is a VPC feature that you can use to automate your IP address
    # management workflows including assigning, tracking, troubleshooting,
    # and auditing IP addresses across Amazon Web Services Regions and
    # accounts throughout your Amazon Web Services Organization. For more
    # information, see [What is IPAM?][1] in the *Amazon VPC IPAM User
    # Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html
    #
    # @!attribute [rw] owner_id
    #   The Amazon Web Services account ID of the owner of the IPAM.
    #   @return [String]
    #
    # @!attribute [rw] ipam_id
    #   The ID of the IPAM.
    #   @return [String]
    #
    # @!attribute [rw] ipam_arn
    #   The Amazon Resource Name (ARN) of the IPAM.
    #   @return [String]
    #
    # @!attribute [rw] ipam_region
    #   The Amazon Web Services Region of the IPAM.
    #   @return [String]
    #
    # @!attribute [rw] public_default_scope_id
    #   The ID of the IPAM's default public scope.
    #   @return [String]
    #
    # @!attribute [rw] private_default_scope_id
    #   The ID of the IPAM's default private scope.
    #   @return [String]
    #
    # @!attribute [rw] scope_count
    #   The number of scopes in the IPAM. The scope quota is 5. For more
    #   information on quotas, see [Quotas in IPAM][1] in the *Amazon VPC
    #   IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html
    #   @return [Integer]
    #
    # @!attribute [rw] description
    #   The description for the IPAM.
    #   @return [String]
    #
    # @!attribute [rw] operating_regions
    #   The operating Regions for an IPAM. Operating Regions are Amazon Web
    #   Services Regions where the IPAM is allowed to manage IP address
    #   CIDRs. IPAM only discovers and monitors resources in the Amazon Web
    #   Services Regions you select as operating Regions.
    #
    #   For more information about operating Regions, see [Create an
    #   IPAM][1] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html
    #   @return [Array<Types::IpamOperatingRegion>]
    #
    # @!attribute [rw] state
    #   The state of the IPAM.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The key/value combination of a tag assigned to the resource. Use the
    #   tag key in the filter name and the tag value as the filter value.
    #   For example, to find all resources that have a tag with the key
    #   `Owner` and the value `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] default_resource_discovery_id
    #   The IPAM's default resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] default_resource_discovery_association_id
    #   The IPAM's default resource discovery association ID.
    #   @return [String]
    #
    # @!attribute [rw] resource_discovery_association_count
    #   The IPAM's resource discovery association count.
    #   @return [Integer]
    #
    # @!attribute [rw] state_message
    #   The state message.
    #   @return [String]
    #
    # @!attribute [rw] tier
    #   IPAM is offered in a Free Tier and an Advanced Tier. For more
    #   information about the features available in each tier and the costs
    #   associated with the tiers, see [Amazon VPC pricing &gt; IPAM
    #   tab][1].
    #
    #
    #
    #   [1]: http://aws.amazon.com/vpc/pricing/
    #   @return [String]
    #
    # @!attribute [rw] enable_private_gua
    #   Enable this option to use your own GUA ranges as private IPv6
    #   addresses. This option is disabled by default.
    #   @return [Boolean]
    #
    # @!attribute [rw] metered_account
    #   A metered account is an Amazon Web Services account that is charged
    #   for active IP addresses managed in IPAM. For more information, see
    #   [Enable cost distribution][1] in the *Amazon VPC IPAM User Guide*.
    #
    #   Possible values:
    #
    #   * `ipam-owner` (default): The Amazon Web Services account which owns
    #     the IPAM is charged for all active IP addresses managed in IPAM.
    #
    #   * `resource-owner`: The Amazon Web Services account that owns the IP
    #     address is charged for the active IP address.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/ipam-enable-cost-distro.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipam AWS API Documentation
    #
    class Ipam < Struct.new(
      :owner_id,
      :ipam_id,
      :ipam_arn,
      :ipam_region,
      :public_default_scope_id,
      :private_default_scope_id,
      :scope_count,
      :description,
      :operating_regions,
      :state,
      :tags,
      :default_resource_discovery_id,
      :default_resource_discovery_association_id,
      :resource_discovery_association_count,
      :state_message,
      :tier,
      :enable_private_gua,
      :metered_account)
      SENSITIVE = []
      include Aws::Structure
    end

    # The historical record of a CIDR within an IPAM scope. For more
    # information, see [View the history of IP addresses][1] in the *Amazon
    # VPC IPAM User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/ipam/view-history-cidr-ipam.html
    #
    # @!attribute [rw] resource_owner_id
    #   The ID of the resource owner.
    #   @return [String]
    #
    # @!attribute [rw] resource_region
    #   The Amazon Web Services Region of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_cidr
    #   The CIDR of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_name
    #   The name of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_compliance_status
    #   The compliance status of a resource. For more information on
    #   compliance statuses, see [Monitor CIDR usage by resource][1] in the
    #   *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] resource_overlap_status
    #   The overlap status of an IPAM resource. The overlap status tells you
    #   if the CIDR for a resource overlaps with another CIDR in the scope.
    #   For more information on overlap statuses, see [Monitor CIDR usage by
    #   resource][1] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The VPC ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] sampled_start_time
    #   Sampled start time of the resource-to-CIDR association within the
    #   IPAM scope. Changes are picked up in periodic snapshots, so the
    #   start time may have occurred before this specific time.
    #   @return [Time]
    #
    # @!attribute [rw] sampled_end_time
    #   Sampled end time of the resource-to-CIDR association within the IPAM
    #   scope. Changes are picked up in periodic snapshots, so the end time
    #   may have occurred before this specific time.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamAddressHistoryRecord AWS API Documentation
    #
    class IpamAddressHistoryRecord < Struct.new(
      :resource_owner_id,
      :resource_region,
      :resource_type,
      :resource_id,
      :resource_cidr,
      :resource_name,
      :resource_compliance_status,
      :resource_overlap_status,
      :vpc_id,
      :sampled_start_time,
      :sampled_end_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # A signed document that proves that you are authorized to bring the
    # specified IP address range to Amazon using BYOIP.
    #
    # @!attribute [rw] message
    #   The plain-text authorization message for the prefix and account.
    #   @return [String]
    #
    # @!attribute [rw] signature
    #   The signed authorization message for the prefix and account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamCidrAuthorizationContext AWS API Documentation
    #
    class IpamCidrAuthorizationContext < Struct.new(
      :message,
      :signature)
      SENSITIVE = []
      include Aws::Structure
    end

    # An IPAM discovered account. A discovered account is an Amazon Web
    # Services account that is monitored under a resource discovery. If you
    # have integrated IPAM with Amazon Web Services Organizations, all
    # accounts in the organization are discovered accounts.
    #
    # @!attribute [rw] account_id
    #   The account ID.
    #   @return [String]
    #
    # @!attribute [rw] discovery_region
    #   The Amazon Web Services Region that the account information is
    #   returned from. An account can be discovered in multiple regions and
    #   will have a separate discovered account for each Region.
    #   @return [String]
    #
    # @!attribute [rw] failure_reason
    #   The resource discovery failure reason.
    #   @return [Types::IpamDiscoveryFailureReason]
    #
    # @!attribute [rw] last_attempted_discovery_time
    #   The last attempted resource discovery time.
    #   @return [Time]
    #
    # @!attribute [rw] last_successful_discovery_time
    #   The last successful resource discovery time.
    #   @return [Time]
    #
    # @!attribute [rw] organizational_unit_id
    #   The ID of an Organizational Unit in Amazon Web Services
    #   Organizations.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamDiscoveredAccount AWS API Documentation
    #
    class IpamDiscoveredAccount < Struct.new(
      :account_id,
      :discovery_region,
      :failure_reason,
      :last_attempted_discovery_time,
      :last_successful_discovery_time,
      :organizational_unit_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # A public IP Address discovered by IPAM.
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   The resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] address_region
    #   The Region of the resource the IP address is assigned to.
    #   @return [String]
    #
    # @!attribute [rw] address
    #   The IP address.
    #   @return [String]
    #
    # @!attribute [rw] address_owner_id
    #   The ID of the owner of the resource the IP address is assigned to.
    #   @return [String]
    #
    # @!attribute [rw] address_allocation_id
    #   The allocation ID of the resource the IP address is assigned to.
    #   @return [String]
    #
    # @!attribute [rw] association_status
    #   The association status.
    #   @return [String]
    #
    # @!attribute [rw] address_type
    #   The IP address type.
    #   @return [String]
    #
    # @!attribute [rw] service
    #   The Amazon Web Services service associated with the IP address.
    #   @return [String]
    #
    # @!attribute [rw] service_resource
    #   The resource ARN or ID.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC that the resource with the assigned IP address is
    #   in.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet that the resource with the assigned IP address
    #   is in.
    #   @return [String]
    #
    # @!attribute [rw] public_ipv_4_pool_id
    #   The ID of the public IPv4 pool that the resource with the assigned
    #   IP address is from.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The network interface ID of the resource with the assigned IP
    #   address.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_description
    #   The description of the network interface that IP address is assigned
    #   to.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The instance ID of the instance the assigned IP address is assigned
    #   to.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Tags associated with the IP address.
    #   @return [Types::IpamPublicAddressTags]
    #
    # @!attribute [rw] network_border_group
    #   The Availability Zone (AZ) or Local Zone (LZ) network border group
    #   that the resource that the IP address is assigned to is in. Defaults
    #   to an AZ network border group. For more information on available
    #   Local Zones, see [Local Zone availability][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#byoip-zone-avail
    #   @return [String]
    #
    # @!attribute [rw] security_groups
    #   Security groups associated with the resource that the IP address is
    #   assigned to.
    #   @return [Array<Types::IpamPublicAddressSecurityGroup>]
    #
    # @!attribute [rw] sample_time
    #   The last successful resource discovery time.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamDiscoveredPublicAddress AWS API Documentation
    #
    class IpamDiscoveredPublicAddress < Struct.new(
      :ipam_resource_discovery_id,
      :address_region,
      :address,
      :address_owner_id,
      :address_allocation_id,
      :association_status,
      :address_type,
      :service,
      :service_resource,
      :vpc_id,
      :subnet_id,
      :public_ipv_4_pool_id,
      :network_interface_id,
      :network_interface_description,
      :instance_id,
      :tags,
      :network_border_group,
      :security_groups,
      :sample_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # An IPAM discovered resource CIDR. A discovered resource is a resource
    # CIDR monitored under a resource discovery. The following resources can
    # be discovered: VPCs, Public IPv4 pools, VPC subnets, and Elastic IP
    # addresses. The discovered resource CIDR is the IP address range in
    # CIDR notation that is associated with the resource.
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   The resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] resource_region
    #   The resource Region.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The resource ID.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner_id
    #   The resource owner ID.
    #   @return [String]
    #
    # @!attribute [rw] resource_cidr
    #   The resource CIDR.
    #   @return [String]
    #
    # @!attribute [rw] ip_source
    #   The source that allocated the IP address space. `byoip` or `amazon`
    #   indicates public IP address space allocated by Amazon or space that
    #   you have allocated with Bring your own IP (BYOIP). `none` indicates
    #   private space.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type.
    #   @return [String]
    #
    # @!attribute [rw] resource_tags
    #   The resource tags.
    #   @return [Array<Types::IpamResourceTag>]
    #
    # @!attribute [rw] ip_usage
    #   The percentage of IP address space in use. To convert the decimal to
    #   a percentage, multiply the decimal by 100. Note the following:
    #
    #   * For resources that are VPCs, this is the percentage of IP address
    #     space in the VPC that's taken up by subnet CIDRs.
    #
    #   * For resources that are subnets, if the subnet has an IPv4 CIDR
    #     provisioned to it, this is the percentage of IPv4 address space in
    #     the subnet that's in use. If the subnet has an IPv6 CIDR
    #     provisioned to it, the percentage of IPv6 address space in use is
    #     not represented. The percentage of IPv6 address space in use
    #     cannot currently be calculated.
    #
    #   * For resources that are public IPv4 pools, this is the percentage
    #     of IP address space in the pool that's been allocated to Elastic
    #     IP addresses (EIPs).
    #   @return [Float]
    #
    # @!attribute [rw] vpc_id
    #   The VPC ID.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The subnet ID.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_attachment_status
    #   For elastic network interfaces, this is the status of whether or not
    #   the elastic network interface is attached.
    #   @return [String]
    #
    # @!attribute [rw] sample_time
    #   The last successful resource discovery time.
    #   @return [Time]
    #
    # @!attribute [rw] availability_zone_id
    #   The Availability Zone ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamDiscoveredResourceCidr AWS API Documentation
    #
    class IpamDiscoveredResourceCidr < Struct.new(
      :ipam_resource_discovery_id,
      :resource_region,
      :resource_id,
      :resource_owner_id,
      :resource_cidr,
      :ip_source,
      :resource_type,
      :resource_tags,
      :ip_usage,
      :vpc_id,
      :subnet_id,
      :network_interface_attachment_status,
      :sample_time,
      :availability_zone_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # The discovery failure reason.
    #
    # @!attribute [rw] code
    #   The discovery failure code.
    #
    #   * `assume-role-failure` - IPAM could not assume the Amazon Web
    #     Services IAM service-linked role. This could be because of any of
    #     the following:
    #
    #     * SLR has not been created yet and IPAM is still creating it.
    #
    #     * You have opted-out of the IPAM home Region.
    #
    #     * Account you are using as your IPAM account has been suspended.
    #   * `throttling-failure` - IPAM account is already using the allotted
    #     transactions per second and IPAM is receiving a throttling error
    #     when assuming the Amazon Web Services IAM SLR.
    #
    #   * `unauthorized-failure` - Amazon Web Services account making the
    #     request is not authorized. For more information, see
    #     [AuthFailure][1] in the *Amazon Elastic Compute Cloud API
    #     Reference*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The discovery failure message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamDiscoveryFailureReason AWS API Documentation
    #
    class IpamDiscoveryFailureReason < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # A verification token is an Amazon Web Services-generated random value
    # that you can use to prove ownership of an external resource. For
    # example, you can use a verification token to validate that you control
    # a public IP address range when you bring an IP address range to Amazon
    # Web Services (BYOIP).
    #
    # @!attribute [rw] ipam_external_resource_verification_token_id
    #   The ID of the token.
    #   @return [String]
    #
    # @!attribute [rw] ipam_external_resource_verification_token_arn
    #   Token ARN.
    #   @return [String]
    #
    # @!attribute [rw] ipam_id
    #   The ID of the IPAM that created the token.
    #   @return [String]
    #
    # @!attribute [rw] ipam_arn
    #   ARN of the IPAM that created the token.
    #   @return [String]
    #
    # @!attribute [rw] ipam_region
    #   Region of the IPAM that created the token.
    #   @return [String]
    #
    # @!attribute [rw] token_value
    #   Token value.
    #   @return [String]
    #
    # @!attribute [rw] token_name
    #   Token name.
    #   @return [String]
    #
    # @!attribute [rw] not_after
    #   Token expiration.
    #   @return [Time]
    #
    # @!attribute [rw] status
    #   Token status.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Token tags.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] state
    #   Token state.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamExternalResourceVerificationToken AWS API Documentation
    #
    class IpamExternalResourceVerificationToken < Struct.new(
      :ipam_external_resource_verification_token_id,
      :ipam_external_resource_verification_token_arn,
      :ipam_id,
      :ipam_arn,
      :ipam_region,
      :token_value,
      :token_name,
      :not_after,
      :status,
      :tags,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # The operating Regions for an IPAM. Operating Regions are Amazon Web
    # Services Regions where the IPAM is allowed to manage IP address CIDRs.
    # IPAM only discovers and monitors resources in the Amazon Web Services
    # Regions you select as operating Regions.
    #
    # For more information about operating Regions, see [Create an IPAM][1]
    # in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html
    #
    # @!attribute [rw] region_name
    #   The name of the operating Region.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamOperatingRegion AWS API Documentation
    #
    class IpamOperatingRegion < Struct.new(
      :region_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # If your IPAM is integrated with Amazon Web Services Organizations and
    # you add an organizational unit (OU) exclusion, IPAM will not manage
    # the IP addresses in accounts in that OU exclusion.
    #
    # @!attribute [rw] organizations_entity_path
    #   An Amazon Web Services Organizations entity path. For more
    #   information on the entity path, see [Understand the Amazon Web
    #   Services Organizations entity path][1] in the *Amazon Web Services
    #   Identity and Access Management User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_last-accessed-view-data-orgs.html#access_policies_access-advisor-viewing-orgs-entity-path
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamOrganizationalUnitExclusion AWS API Documentation
    #
    class IpamOrganizationalUnitExclusion < Struct.new(
      :organizations_entity_path)
      SENSITIVE = []
      include Aws::Structure
    end

    # In IPAM, a pool is a collection of contiguous IP addresses CIDRs.
    # Pools enable you to organize your IP addresses according to your
    # routing and security needs. For example, if you have separate routing
    # and security needs for development and production applications, you
    # can create a pool for each.
    #
    # @!attribute [rw] owner_id
    #   The Amazon Web Services account ID of the owner of the IPAM pool.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the IPAM pool.
    #   @return [String]
    #
    # @!attribute [rw] source_ipam_pool_id
    #   The ID of the source IPAM pool. You can use this option to create an
    #   IPAM pool within an existing source pool.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_arn
    #   The Amazon Resource Name (ARN) of the IPAM pool.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scope_arn
    #   The ARN of the scope of the IPAM pool.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scope_type
    #   In IPAM, a scope is the highest-level container within IPAM. An IPAM
    #   contains two default scopes. Each scope represents the IP space for
    #   a single network. The private scope is intended for all private IP
    #   address space. The public scope is intended for all public IP
    #   address space. Scopes enable you to reuse IP addresses across
    #   multiple unconnected networks without causing IP address overlap or
    #   conflict.
    #   @return [String]
    #
    # @!attribute [rw] ipam_arn
    #   The ARN of the IPAM.
    #   @return [String]
    #
    # @!attribute [rw] ipam_region
    #   The Amazon Web Services Region of the IPAM pool.
    #   @return [String]
    #
    # @!attribute [rw] locale
    #   The locale of the IPAM pool.
    #
    #   The locale for the pool should be one of the following:
    #
    #   * An Amazon Web Services Region where you want this IPAM pool to be
    #     available for allocations.
    #
    #   * The network border group for an Amazon Web Services Local Zone
    #     where you want this IPAM pool to be available for allocations
    #     ([supported Local Zones][1]). This option is only available for
    #     IPAM IPv4 pools in the public scope.
    #
    #   If you choose an Amazon Web Services Region for locale that has not
    #   been configured as an operating Region for the IPAM, you'll get an
    #   error.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#byoip-zone-avail
    #   @return [String]
    #
    # @!attribute [rw] pool_depth
    #   The depth of pools in your IPAM pool. The pool depth quota is 10.
    #   For more information, see [Quotas in IPAM][1] in the *Amazon VPC
    #   IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html
    #   @return [Integer]
    #
    # @!attribute [rw] state
    #   The state of the IPAM pool.
    #   @return [String]
    #
    # @!attribute [rw] state_message
    #   The state message.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the IPAM pool.
    #   @return [String]
    #
    # @!attribute [rw] auto_import
    #   If selected, IPAM will continuously look for resources within the
    #   CIDR range of this pool and automatically import them as allocations
    #   into your IPAM. The CIDRs that will be allocated for these resources
    #   must not already be allocated to other resources in order for the
    #   import to succeed. IPAM will import a CIDR regardless of its
    #   compliance with the pool's allocation rules, so a resource might be
    #   imported and subsequently marked as noncompliant. If IPAM discovers
    #   multiple CIDRs that overlap, IPAM will import the largest CIDR only.
    #   If IPAM discovers multiple CIDRs with matching CIDRs, IPAM will
    #   randomly import one of them only.
    #
    #   A locale must be set on the pool for this feature to work.
    #   @return [Boolean]
    #
    # @!attribute [rw] publicly_advertisable
    #   Determines if a pool is publicly advertisable. This option is not
    #   available for pools with AddressFamily set to `ipv4`.
    #   @return [Boolean]
    #
    # @!attribute [rw] address_family
    #   The address family of the pool.
    #   @return [String]
    #
    # @!attribute [rw] allocation_min_netmask_length
    #   The minimum netmask length required for CIDR allocations in this
    #   IPAM pool to be compliant. The minimum netmask length must be less
    #   than the maximum netmask length. Possible netmask lengths for IPv4
    #   addresses are 0 - 32. Possible netmask lengths for IPv6 addresses
    #   are 0 - 128.
    #   @return [Integer]
    #
    # @!attribute [rw] allocation_max_netmask_length
    #   The maximum netmask length possible for CIDR allocations in this
    #   IPAM pool to be compliant. The maximum netmask length must be
    #   greater than the minimum netmask length. Possible netmask lengths
    #   for IPv4 addresses are 0 - 32. Possible netmask lengths for IPv6
    #   addresses are 0 - 128.
    #   @return [Integer]
    #
    # @!attribute [rw] allocation_default_netmask_length
    #   The default netmask length for allocations added to this pool. If,
    #   for example, the CIDR assigned to this pool is 10.0.0.0/8 and you
    #   enter 16 here, new allocations will default to 10.0.0.0/16.
    #   @return [Integer]
    #
    # @!attribute [rw] allocation_resource_tags
    #   Tags that are required for resources that use CIDRs from this IPAM
    #   pool. Resources that do not have these tags will not be allowed to
    #   allocate space from the pool. If the resources have their tags
    #   changed after they have allocated space or if the allocation tagging
    #   requirements are changed on the pool, the resource may be marked as
    #   noncompliant.
    #   @return [Array<Types::IpamResourceTag>]
    #
    # @!attribute [rw] tags
    #   The key/value combination of a tag assigned to the resource. Use the
    #   tag key in the filter name and the tag value as the filter value.
    #   For example, to find all resources that have a tag with the key
    #   `Owner` and the value `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] aws_service
    #   Limits which service in Amazon Web Services that the pool can be
    #   used in. "ec2", for example, allows users to use space for Elastic
    #   IP addresses and VPCs.
    #   @return [String]
    #
    # @!attribute [rw] public_ip_source
    #   The IP address source for pools in the public scope. Only used for
    #   provisioning IP address CIDRs to pools in the public scope. Default
    #   is `BYOIP`. For more information, see [Create IPv6 pools][1] in the
    #   *Amazon VPC IPAM User Guide*. By default, you can add only one
    #   Amazon-provided IPv6 CIDR block to a top-level IPv6 pool. For
    #   information on increasing the default limit, see [Quotas for your
    #   IPAM][2] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/intro-create-ipv6-pools.html
    #   [2]: https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] source_resource
    #   The resource used to provision CIDRs to a resource planning pool.
    #   @return [Types::IpamPoolSourceResource]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamPool AWS API Documentation
    #
    class IpamPool < Struct.new(
      :owner_id,
      :ipam_pool_id,
      :source_ipam_pool_id,
      :ipam_pool_arn,
      :ipam_scope_arn,
      :ipam_scope_type,
      :ipam_arn,
      :ipam_region,
      :locale,
      :pool_depth,
      :state,
      :state_message,
      :description,
      :auto_import,
      :publicly_advertisable,
      :address_family,
      :allocation_min_netmask_length,
      :allocation_max_netmask_length,
      :allocation_default_netmask_length,
      :allocation_resource_tags,
      :tags,
      :aws_service,
      :public_ip_source,
      :source_resource)
      SENSITIVE = []
      include Aws::Structure
    end

    # In IPAM, an allocation is a CIDR assignment from an IPAM pool to
    # another IPAM pool or to a resource.
    #
    # @!attribute [rw] cidr
    #   The CIDR for the allocation. A CIDR is a representation of an IP
    #   address and its associated network mask (or netmask) and refers to a
    #   range of IP addresses. An IPv4 CIDR example is `10.24.34.0/23`. An
    #   IPv6 CIDR example is `2001:DB8::/32`.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_allocation_id
    #   The ID of an allocation.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the pool allocation.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_region
    #   The Amazon Web Services Region of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner
    #   The owner of the resource.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamPoolAllocation AWS API Documentation
    #
    class IpamPoolAllocation < Struct.new(
      :cidr,
      :ipam_pool_allocation_id,
      :description,
      :resource_id,
      :resource_type,
      :resource_region,
      :resource_owner)
      SENSITIVE = []
      include Aws::Structure
    end

    # A CIDR provisioned to an IPAM pool.
    #
    # @!attribute [rw] cidr
    #   The CIDR provisioned to the IPAM pool. A CIDR is a representation of
    #   an IP address and its associated network mask (or netmask) and
    #   refers to a range of IP addresses. An IPv4 CIDR example is
    #   `10.24.34.0/23`. An IPv6 CIDR example is `2001:DB8::/32`.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the CIDR.
    #   @return [String]
    #
    # @!attribute [rw] failure_reason
    #   Details related to why an IPAM pool CIDR failed to be provisioned.
    #   @return [Types::IpamPoolCidrFailureReason]
    #
    # @!attribute [rw] ipam_pool_cidr_id
    #   The IPAM pool CIDR ID.
    #   @return [String]
    #
    # @!attribute [rw] netmask_length
    #   The netmask length of the CIDR you'd like to provision to a pool.
    #   Can be used for provisioning Amazon-provided IPv6 CIDRs to top-level
    #   pools and for provisioning CIDRs to pools with source pools. Cannot
    #   be used to provision BYOIP CIDRs to top-level pools.
    #   "NetmaskLength" or "Cidr" is required.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamPoolCidr AWS API Documentation
    #
    class IpamPoolCidr < Struct.new(
      :cidr,
      :state,
      :failure_reason,
      :ipam_pool_cidr_id,
      :netmask_length)
      SENSITIVE = []
      include Aws::Structure
    end

    # Details related to why an IPAM pool CIDR failed to be provisioned.
    #
    # @!attribute [rw] code
    #   An error code related to why an IPAM pool CIDR failed to be
    #   provisioned.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message related to why an IPAM pool CIDR failed to be provisioned.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamPoolCidrFailureReason AWS API Documentation
    #
    class IpamPoolCidrFailureReason < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The resource used to provision CIDRs to a resource planning pool.
    #
    # @!attribute [rw] resource_id
    #   The source resource ID.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The source resource type.
    #   @return [String]
    #
    # @!attribute [rw] resource_region
    #   The source resource Region.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner
    #   The source resource owner.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamPoolSourceResource AWS API Documentation
    #
    class IpamPoolSourceResource < Struct.new(
      :resource_id,
      :resource_type,
      :resource_region,
      :resource_owner)
      SENSITIVE = []
      include Aws::Structure
    end

    # The resource used to provision CIDRs to a resource planning pool.
    #
    # @!attribute [rw] resource_id
    #   The source resource ID.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The source resource type.
    #   @return [String]
    #
    # @!attribute [rw] resource_region
    #   The source resource Region.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner
    #   The source resource owner.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamPoolSourceResourceRequest AWS API Documentation
    #
    class IpamPoolSourceResourceRequest < Struct.new(
      :resource_id,
      :resource_type,
      :resource_region,
      :resource_owner)
      SENSITIVE = []
      include Aws::Structure
    end

    # The security group that the resource with the public IP address is in.
    #
    # @!attribute [rw] group_name
    #   The security group's name.
    #   @return [String]
    #
    # @!attribute [rw] group_id
    #   The security group's ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamPublicAddressSecurityGroup AWS API Documentation
    #
    class IpamPublicAddressSecurityGroup < Struct.new(
      :group_name,
      :group_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # A tag for a public IP address discovered by IPAM.
    #
    # @!attribute [rw] key
    #   The tag's key.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The tag's value.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamPublicAddressTag AWS API Documentation
    #
    class IpamPublicAddressTag < Struct.new(
      :key,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Tags for a public IP address discovered by IPAM.
    #
    # @!attribute [rw] eip_tags
    #   Tags for an Elastic IP address.
    #   @return [Array<Types::IpamPublicAddressTag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamPublicAddressTags AWS API Documentation
    #
    class IpamPublicAddressTags < Struct.new(
      :eip_tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # The CIDR for an IPAM resource.
    #
    # @!attribute [rw] ipam_id
    #   The IPAM ID for an IPAM resource.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scope_id
    #   The scope ID for an IPAM resource.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_id
    #   The pool ID for an IPAM resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_region
    #   The Amazon Web Services Region for an IPAM resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner_id
    #   The Amazon Web Services account number of the owner of an IPAM
    #   resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of an IPAM resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_name
    #   The name of an IPAM resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_cidr
    #   The CIDR for an IPAM resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of IPAM resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_tags
    #   The tags for an IPAM resource.
    #   @return [Array<Types::IpamResourceTag>]
    #
    # @!attribute [rw] ip_usage
    #   The percentage of IP address space in use. To convert the decimal to
    #   a percentage, multiply the decimal by 100. Note the following:
    #
    #   * For resources that are VPCs, this is the percentage of IP address
    #     space in the VPC that's taken up by subnet CIDRs.
    #
    #   * For resources that are subnets, if the subnet has an IPv4 CIDR
    #     provisioned to it, this is the percentage of IPv4 address space in
    #     the subnet that's in use. If the subnet has an IPv6 CIDR
    #     provisioned to it, the percentage of IPv6 address space in use is
    #     not represented. The percentage of IPv6 address space in use
    #     cannot currently be calculated.
    #
    #   * For resources that are public IPv4 pools, this is the percentage
    #     of IP address space in the pool that's been allocated to Elastic
    #     IP addresses (EIPs).
    #   @return [Float]
    #
    # @!attribute [rw] compliance_status
    #   The compliance status of the IPAM resource. For more information on
    #   compliance statuses, see [Monitor CIDR usage by resource][1] in the
    #   *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] management_state
    #   The management state of the resource. For more information about
    #   management states, see [Monitor CIDR usage by resource][1] in the
    #   *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] overlap_status
    #   The overlap status of an IPAM resource. The overlap status tells you
    #   if the CIDR for a resource overlaps with another CIDR in the scope.
    #   For more information on overlap statuses, see [Monitor CIDR usage by
    #   resource][1] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of a VPC.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The Availability Zone ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamResourceCidr AWS API Documentation
    #
    class IpamResourceCidr < Struct.new(
      :ipam_id,
      :ipam_scope_id,
      :ipam_pool_id,
      :resource_region,
      :resource_owner_id,
      :resource_id,
      :resource_name,
      :resource_cidr,
      :resource_type,
      :resource_tags,
      :ip_usage,
      :compliance_status,
      :management_state,
      :overlap_status,
      :vpc_id,
      :availability_zone_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # A resource discovery is an IPAM component that enables IPAM to manage
    # and monitor resources that belong to the owning account.
    #
    # @!attribute [rw] owner_id
    #   The ID of the owner.
    #   @return [String]
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   The resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] ipam_resource_discovery_arn
    #   The resource discovery Amazon Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] ipam_resource_discovery_region
    #   The resource discovery Region.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The resource discovery description.
    #   @return [String]
    #
    # @!attribute [rw] operating_regions
    #   The operating Regions for the resource discovery. Operating Regions
    #   are Amazon Web Services Regions where the IPAM is allowed to manage
    #   IP address CIDRs. IPAM only discovers and monitors resources in the
    #   Amazon Web Services Regions you select as operating Regions.
    #   @return [Array<Types::IpamOperatingRegion>]
    #
    # @!attribute [rw] is_default
    #   Defines if the resource discovery is the default. The default
    #   resource discovery is the resource discovery automatically created
    #   when you create an IPAM.
    #   @return [Boolean]
    #
    # @!attribute [rw] state
    #   The lifecycle state of the resource discovery.
    #
    #   * `create-in-progress` - Resource discovery is being created.
    #
    #   * `create-complete` - Resource discovery creation is complete.
    #
    #   * `create-failed` - Resource discovery creation has failed.
    #
    #   * `modify-in-progress` - Resource discovery is being modified.
    #
    #   * `modify-complete` - Resource discovery modification is complete.
    #
    #   * `modify-failed` - Resource discovery modification has failed.
    #
    #   * `delete-in-progress` - Resource discovery is being deleted.
    #
    #   * `delete-complete` - Resource discovery deletion is complete.
    #
    #   * `delete-failed` - Resource discovery deletion has failed.
    #
    #   * `isolate-in-progress` - Amazon Web Services account that created
    #     the resource discovery has been removed and the resource discovery
    #     is being isolated.
    #
    #   * `isolate-complete` - Resource discovery isolation is complete.
    #
    #   * `restore-in-progress` - Amazon Web Services account that created
    #     the resource discovery and was isolated has been restored.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   A tag is a label that you assign to an Amazon Web Services resource.
    #   Each tag consists of a key and an optional value. You can use tags
    #   to search and filter your resources or track your Amazon Web
    #   Services costs.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] organizational_unit_exclusions
    #   If your IPAM is integrated with Amazon Web Services Organizations
    #   and you add an organizational unit (OU) exclusion, IPAM will not
    #   manage the IP addresses in accounts in that OU exclusion.
    #   @return [Array<Types::IpamOrganizationalUnitExclusion>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamResourceDiscovery AWS API Documentation
    #
    class IpamResourceDiscovery < Struct.new(
      :owner_id,
      :ipam_resource_discovery_id,
      :ipam_resource_discovery_arn,
      :ipam_resource_discovery_region,
      :description,
      :operating_regions,
      :is_default,
      :state,
      :tags,
      :organizational_unit_exclusions)
      SENSITIVE = []
      include Aws::Structure
    end

    # An IPAM resource discovery association. An associated resource
    # discovery is a resource discovery that has been associated with an
    # IPAM. IPAM aggregates the resource CIDRs discovered by the associated
    # resource discovery.
    #
    # @!attribute [rw] owner_id
    #   The Amazon Web Services account ID of the resource discovery owner.
    #   @return [String]
    #
    # @!attribute [rw] ipam_resource_discovery_association_id
    #   The resource discovery association ID.
    #   @return [String]
    #
    # @!attribute [rw] ipam_resource_discovery_association_arn
    #   The resource discovery association Amazon Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   The resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] ipam_id
    #   The IPAM ID.
    #   @return [String]
    #
    # @!attribute [rw] ipam_arn
    #   The IPAM ARN.
    #   @return [String]
    #
    # @!attribute [rw] ipam_region
    #   The IPAM home Region.
    #   @return [String]
    #
    # @!attribute [rw] is_default
    #   Defines if the resource discovery is the default. When you create an
    #   IPAM, a default resource discovery is created for your IPAM and
    #   it's associated with your IPAM.
    #   @return [Boolean]
    #
    # @!attribute [rw] resource_discovery_status
    #   The resource discovery status.
    #
    #   * `active` - Connection or permissions required to read the results
    #     of the resource discovery are intact.
    #
    #   * `not-found` - Connection or permissions required to read the
    #     results of the resource discovery are broken. This may happen if
    #     the owner of the resource discovery stopped sharing it or deleted
    #     the resource discovery. Verify the resource discovery still exists
    #     and the Amazon Web Services RAM resource share is still intact.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The lifecycle state of the association when you associate or
    #   disassociate a resource discovery.
    #
    #   * `associate-in-progress` - Resource discovery is being associated.
    #
    #   * `associate-complete` - Resource discovery association is complete.
    #
    #   * `associate-failed` - Resource discovery association has failed.
    #
    #   * `disassociate-in-progress` - Resource discovery is being
    #     disassociated.
    #
    #   * `disassociate-complete` - Resource discovery disassociation is
    #     complete.
    #
    #   * `disassociate-failed ` - Resource discovery disassociation has
    #     failed.
    #
    #   * `isolate-in-progress` - Amazon Web Services account that created
    #     the resource discovery association has been removed and the
    #     resource discovery associatation is being isolated.
    #
    #   * `isolate-complete` - Resource discovery isolation is complete..
    #
    #   * `restore-in-progress` - Resource discovery is being restored.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   A tag is a label that you assign to an Amazon Web Services resource.
    #   Each tag consists of a key and an optional value. You can use tags
    #   to search and filter your resources or track your Amazon Web
    #   Services costs.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamResourceDiscoveryAssociation AWS API Documentation
    #
    class IpamResourceDiscoveryAssociation < Struct.new(
      :owner_id,
      :ipam_resource_discovery_association_id,
      :ipam_resource_discovery_association_arn,
      :ipam_resource_discovery_id,
      :ipam_id,
      :ipam_arn,
      :ipam_region,
      :is_default,
      :resource_discovery_status,
      :state,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # The key/value combination of a tag assigned to the resource. Use the
    # tag key in the filter name and the tag value as the filter value. For
    # example, to find all resources that have a tag with the key `Owner`
    # and the value `TeamA`, specify `tag:Owner` for the filter name and
    # `TeamA` for the filter value.
    #
    # @!attribute [rw] key
    #   The key of a tag assigned to the resource. Use this filter to find
    #   all resources assigned a tag with a specific key, regardless of the
    #   tag value.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the tag.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamResourceTag AWS API Documentation
    #
    class IpamResourceTag < Struct.new(
      :key,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # In IPAM, a scope is the highest-level container within IPAM. An IPAM
    # contains two default scopes. Each scope represents the IP space for a
    # single network. The private scope is intended for all private IP
    # address space. The public scope is intended for all public IP address
    # space. Scopes enable you to reuse IP addresses across multiple
    # unconnected networks without causing IP address overlap or conflict.
    #
    # For more information, see [How IPAM works][1] in the *Amazon VPC IPAM
    # User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/ipam/how-it-works-ipam.html
    #
    # @!attribute [rw] owner_id
    #   The Amazon Web Services account ID of the owner of the scope.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scope_id
    #   The ID of the scope.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scope_arn
    #   The Amazon Resource Name (ARN) of the scope.
    #   @return [String]
    #
    # @!attribute [rw] ipam_arn
    #   The ARN of the IPAM.
    #   @return [String]
    #
    # @!attribute [rw] ipam_region
    #   The Amazon Web Services Region of the IPAM scope.
    #   @return [String]
    #
    # @!attribute [rw] ipam_scope_type
    #   The type of the scope.
    #   @return [String]
    #
    # @!attribute [rw] is_default
    #   Defines if the scope is the default scope or not.
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   The description of the scope.
    #   @return [String]
    #
    # @!attribute [rw] pool_count
    #   The number of pools in the scope.
    #   @return [Integer]
    #
    # @!attribute [rw] state
    #   The state of the IPAM scope.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The key/value combination of a tag assigned to the resource. Use the
    #   tag key in the filter name and the tag value as the filter value.
    #   For example, to find all resources that have a tag with the key
    #   `Owner` and the value `TeamA`, specify `tag:Owner` for the filter
    #   name and `TeamA` for the filter value.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/IpamScope AWS API Documentation
    #
    class IpamScope < Struct.new(
      :owner_id,
      :ipam_scope_id,
      :ipam_scope_arn,
      :ipam_arn,
      :ipam_region,
      :ipam_scope_type,
      :is_default,
      :description,
      :pool_count,
      :state,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv4 prefix.
    #
    # @!attribute [rw] ipv_4_prefix
    #   The IPv4 prefix. For information, see [ Assigning prefixes to
    #   network interfaces][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv4PrefixSpecification AWS API Documentation
    #
    class Ipv4PrefixSpecification < Struct.new(
      :ipv_4_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the IPv4 prefix option for a network interface.
    #
    # @!attribute [rw] ipv_4_prefix
    #   The IPv4 prefix. For information, see [ Assigning prefixes to
    #   network interfaces][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv4PrefixSpecificationRequest AWS API Documentation
    #
    class Ipv4PrefixSpecificationRequest < Struct.new(
      :ipv_4_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the IPv4 delegated prefixes assigned to a network
    # interface.
    #
    # @!attribute [rw] ipv_4_prefix
    #   The IPv4 delegated prefixes assigned to the network interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv4PrefixSpecificationResponse AWS API Documentation
    #
    class Ipv4PrefixSpecificationResponse < Struct.new(
      :ipv_4_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv6 CIDR block association.
    #
    # @!attribute [rw] ipv_6_cidr
    #   The IPv6 CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] associated_resource
    #   The resource that's associated with the IPv6 CIDR block.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv6CidrAssociation AWS API Documentation
    #
    class Ipv6CidrAssociation < Struct.new(
      :ipv_6_cidr,
      :associated_resource)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv6 CIDR block.
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   The IPv6 CIDR block.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv6CidrBlock AWS API Documentation
    #
    class Ipv6CidrBlock < Struct.new(
      :ipv_6_cidr_block)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv6 address pool.
    #
    # @!attribute [rw] pool_id
    #   The ID of the address pool.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description for the address pool.
    #   @return [String]
    #
    # @!attribute [rw] pool_cidr_blocks
    #   The CIDR blocks for the address pool.
    #   @return [Array<Types::PoolCidrBlock>]
    #
    # @!attribute [rw] tags
    #   Any tags for the address pool.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv6Pool AWS API Documentation
    #
    class Ipv6Pool < Struct.new(
      :pool_id,
      :description,
      :pool_cidr_blocks,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the IPv6 prefix.
    #
    # @!attribute [rw] ipv_6_prefix
    #   The IPv6 prefix.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv6PrefixSpecification AWS API Documentation
    #
    class Ipv6PrefixSpecification < Struct.new(
      :ipv_6_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the IPv6 prefix option for a network interface.
    #
    # @!attribute [rw] ipv_6_prefix
    #   The IPv6 prefix.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv6PrefixSpecificationRequest AWS API Documentation
    #
    class Ipv6PrefixSpecificationRequest < Struct.new(
      :ipv_6_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the IPv6 delegated prefixes assigned to a network
    # interface.
    #
    # @!attribute [rw] ipv_6_prefix
    #   The IPv6 delegated prefixes assigned to the network interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv6PrefixSpecificationResponse AWS API Documentation
    #
    class Ipv6PrefixSpecificationResponse < Struct.new(
      :ipv_6_prefix)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv6 address range.
    #
    # @!attribute [rw] description
    #   A description for the security group rule that references this IPv6
    #   address range.
    #
    #   Constraints: Up to 255 characters in length. Allowed characters are
    #   a-z, A-Z, 0-9, spaces, and .\_-:/()#,@\[\]+=&amp;;\{}!$*
    #   @return [String]
    #
    # @!attribute [rw] cidr_ipv_6
    #   The IPv6 address range. You can either specify a CIDR block or a
    #   source security group, not both. To specify a single IPv6 address,
    #   use the /128 prefix length.
    #
    #   <note markdown="1"> Amazon Web Services [canonicalizes][1] IPv4 and IPv6 CIDRs. For
    #   example, if you specify 100.68.0.18/18 for the CIDR block, Amazon
    #   Web Services canonicalizes the CIDR block to 100.68.0.0/18. Any
    #   subsequent DescribeSecurityGroups and DescribeSecurityGroupRules
    #   calls will return the canonicalized form of the CIDR block.
    #   Additionally, if you attempt to add another rule with the
    #   non-canonical form of the CIDR (such as 100.68.0.18/18) and there is
    #   already a rule for the canonicalized form of the CIDR block (such as
    #   100.68.0.0/18), the API throws an duplicate rule error.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://en.wikipedia.org/wiki/Canonicalization
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Ipv6Range AWS API Documentation
    #
    class Ipv6Range < Struct.new(
      :description,
      :cidr_ipv_6)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a key pair.
    #
    # @!attribute [rw] key_pair_id
    #   The ID of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags applied to the key pair.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] key_fingerprint
    #   * For RSA key pairs, the key fingerprint is the SHA-1 digest of the
    #     DER encoded private key.
    #
    #   * For ED25519 key pairs, the key fingerprint is the base64-encoded
    #     SHA-256 digest, which is the default for OpenSSH, starting with
    #     OpenSSH 6.8.
    #   @return [String]
    #
    # @!attribute [rw] key_material
    #   An unencrypted PEM encoded RSA or ED25519 private key.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/KeyPair AWS API Documentation
    #
    class KeyPair < Struct.new(
      :key_pair_id,
      :tags,
      :key_name,
      :key_fingerprint,
      :key_material)
      SENSITIVE = [:key_material]
      include Aws::Structure
    end

    # Describes a key pair.
    #
    # @!attribute [rw] key_pair_id
    #   The ID of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] key_type
    #   The type of key pair.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags applied to the key pair.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] public_key
    #   The public key material.
    #   @return [String]
    #
    # @!attribute [rw] create_time
    #   If you used Amazon EC2 to create the key pair, this is the date and
    #   time when the key was created, in [ISO 8601 date-time format][1], in
    #   the UTC time zone.
    #
    #   If you imported an existing key pair to Amazon EC2, this is the date
    #   and time the key was imported, in [ISO 8601 date-time format][1], in
    #   the UTC time zone.
    #
    #
    #
    #   [1]: https://www.iso.org/iso-8601-date-and-time-format.html
    #   @return [Time]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] key_fingerprint
    #   If you used CreateKeyPair to create the key pair:
    #
    #   * For RSA key pairs, the key fingerprint is the SHA-1 digest of the
    #     DER encoded private key.
    #
    #   * For ED25519 key pairs, the key fingerprint is the base64-encoded
    #     SHA-256 digest, which is the default for OpenSSH, starting with
    #     [OpenSSH 6.8][1].
    #
    #   If you used ImportKeyPair to provide Amazon Web Services the public
    #   key:
    #
    #   * For RSA key pairs, the key fingerprint is the MD5 public key
    #     fingerprint as specified in section 4 of RFC4716.
    #
    #   * For ED25519 key pairs, the key fingerprint is the base64-encoded
    #     SHA-256 digest, which is the default for OpenSSH, starting with
    #     [OpenSSH 6.8][1].
    #
    #
    #
    #   [1]: http://www.openssh.com/txt/release-6.8
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/KeyPairInfo AWS API Documentation
    #
    class KeyPairInfo < Struct.new(
      :key_pair_id,
      :key_type,
      :tags,
      :public_key,
      :create_time,
      :key_name,
      :key_fingerprint)
      SENSITIVE = []
      include Aws::Structure
    end

    # The last error that occurred for a VPC endpoint.
    #
    # @!attribute [rw] message
    #   The error message for the VPC endpoint error.
    #   @return [String]
    #
    # @!attribute [rw] code
    #   The error code for the VPC endpoint error.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LastError AWS API Documentation
    #
    class LastError < Struct.new(
      :message,
      :code)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a launch permission.
    #
    # @!attribute [rw] organization_arn
    #   The Amazon Resource Name (ARN) of an organization.
    #   @return [String]
    #
    # @!attribute [rw] organizational_unit_arn
    #   The Amazon Resource Name (ARN) of an organizational unit (OU).
    #   @return [String]
    #
    # @!attribute [rw] user_id
    #   The Amazon Web Services account ID.
    #
    #   Constraints: Up to 10 000 account IDs can be specified in a single
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] group
    #   The name of the group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchPermission AWS API Documentation
    #
    class LaunchPermission < Struct.new(
      :organization_arn,
      :organizational_unit_arn,
      :user_id,
      :group)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a launch permission modification.
    #
    # @!attribute [rw] add
    #   The Amazon Web Services account ID, organization ARN, or OU ARN to
    #   add to the list of launch permissions for the AMI.
    #   @return [Array<Types::LaunchPermission>]
    #
    # @!attribute [rw] remove
    #   The Amazon Web Services account ID, organization ARN, or OU ARN to
    #   remove from the list of launch permissions for the AMI.
    #   @return [Array<Types::LaunchPermission>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchPermissionModifications AWS API Documentation
    #
    class LaunchPermissionModifications < Struct.new(
      :add,
      :remove)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the launch specification for an instance.
    #
    # @!attribute [rw] user_data
    #   The base64-encoded user data that instances use when starting up.
    #   User data is limited to 16 KB.
    #   @return [String]
    #
    # @!attribute [rw] addressing_type
    #   Deprecated.
    #   @return [String]
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mapping entries.
    #   @return [Array<Types::BlockDeviceMapping>]
    #
    # @!attribute [rw] ebs_optimized
    #   Indicates whether the instance is 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.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] iam_instance_profile
    #   The IAM instance profile.
    #   @return [Types::IamInstanceProfileSpecification]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type. Only one instance type can be specified.
    #   @return [String]
    #
    # @!attribute [rw] kernel_id
    #   The ID of the kernel.
    #   @return [String]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] network_interfaces
    #   The network interfaces. If you specify a network interface, you must
    #   specify subnet IDs and security group IDs using the network
    #   interface.
    #   @return [Array<Types::InstanceNetworkInterfaceSpecification>]
    #
    # @!attribute [rw] placement
    #   The placement information for the instance.
    #   @return [Types::SpotPlacement]
    #
    # @!attribute [rw] ramdisk_id
    #   The ID of the RAM disk.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which to launch the instance.
    #   @return [String]
    #
    # @!attribute [rw] security_groups
    #   The IDs of the security groups.
    #   @return [Array<Types::GroupIdentifier>]
    #
    # @!attribute [rw] monitoring
    #   Describes the monitoring of an instance.
    #   @return [Types::RunInstancesMonitoringEnabled]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchSpecification AWS API Documentation
    #
    class LaunchSpecification < Struct.new(
      :user_data,
      :addressing_type,
      :block_device_mappings,
      :ebs_optimized,
      :iam_instance_profile,
      :image_id,
      :instance_type,
      :kernel_id,
      :key_name,
      :network_interfaces,
      :placement,
      :ramdisk_id,
      :subnet_id,
      :security_groups,
      :monitoring)
      SENSITIVE = [:user_data]
      include Aws::Structure
    end

    # Describes a launch template.
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] create_time
    #   The time launch template was created.
    #   @return [Time]
    #
    # @!attribute [rw] created_by
    #   The principal that created the launch template.
    #   @return [String]
    #
    # @!attribute [rw] default_version_number
    #   The version number of the default version of the launch template.
    #   @return [Integer]
    #
    # @!attribute [rw] latest_version_number
    #   The version number of the latest version of the launch template.
    #   @return [Integer]
    #
    # @!attribute [rw] tags
    #   The tags for the launch template.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] operator
    #   The entity that manages the launch template.
    #   @return [Types::OperatorResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplate AWS API Documentation
    #
    class LaunchTemplate < Struct.new(
      :launch_template_id,
      :launch_template_name,
      :create_time,
      :created_by,
      :default_version_number,
      :latest_version_number,
      :tags,
      :operator)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a launch template and overrides.
    #
    # @!attribute [rw] launch_template_specification
    #   The launch template.
    #   @return [Types::FleetLaunchTemplateSpecification]
    #
    # @!attribute [rw] overrides
    #   Any parameters that you specify override the same parameters in the
    #   launch template.
    #   @return [Types::FleetLaunchTemplateOverrides]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateAndOverridesResponse AWS API Documentation
    #
    class LaunchTemplateAndOverridesResponse < Struct.new(
      :launch_template_specification,
      :overrides)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device mapping.
    #
    # @!attribute [rw] device_name
    #   The device name.
    #   @return [String]
    #
    # @!attribute [rw] virtual_name
    #   The virtual device name (ephemeralN).
    #   @return [String]
    #
    # @!attribute [rw] ebs
    #   Information about the block device for an EBS volume.
    #   @return [Types::LaunchTemplateEbsBlockDevice]
    #
    # @!attribute [rw] no_device
    #   To omit the device from the block device mapping, specify an empty
    #   string.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateBlockDeviceMapping AWS API Documentation
    #
    class LaunchTemplateBlockDeviceMapping < Struct.new(
      :device_name,
      :virtual_name,
      :ebs,
      :no_device)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device mapping.
    #
    # @!attribute [rw] device_name
    #   The device name (for example, /dev/sdh or xvdh).
    #   @return [String]
    #
    # @!attribute [rw] virtual_name
    #   The virtual device name (ephemeralN). Instance store volumes are
    #   numbered starting from 0. An instance type with 2 available instance
    #   store volumes can specify mappings for ephemeral0 and ephemeral1.
    #   The number of available instance store volumes depends on the
    #   instance type. After you connect to the instance, you must mount the
    #   volume.
    #   @return [String]
    #
    # @!attribute [rw] ebs
    #   Parameters used to automatically set up EBS volumes when the
    #   instance is launched.
    #   @return [Types::LaunchTemplateEbsBlockDeviceRequest]
    #
    # @!attribute [rw] no_device
    #   To omit the device from the block device mapping, specify an empty
    #   string.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateBlockDeviceMappingRequest AWS API Documentation
    #
    class LaunchTemplateBlockDeviceMappingRequest < Struct.new(
      :device_name,
      :virtual_name,
      :ebs,
      :no_device)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an instance's Capacity Reservation targeting option. You
    # can specify only one option at a time. Use the
    # `CapacityReservationPreference` parameter to configure the instance to
    # run in On-Demand capacity or to run in any `open` Capacity Reservation
    # that has matching attributes (instance type, platform, Availability
    # Zone). Use the `CapacityReservationTarget` parameter to explicitly
    # target a specific Capacity Reservation or a Capacity Reservation
    # group.
    #
    # @!attribute [rw] capacity_reservation_preference
    #   Indicates the instance's Capacity Reservation preferences. Possible
    #   preferences include:
    #
    #   * `capacity-reservations-only` - The instance will only run in a
    #     Capacity Reservation or Capacity Reservation group. If capacity
    #     isn't available, the instance will fail to launch.
    #
    #   * `open` - The instance can run in any `open` Capacity Reservation
    #     that has matching attributes (instance type, platform,
    #     Availability Zone, tenancy).
    #
    #   * `none` - The instance avoids running in a Capacity Reservation
    #     even if one is available. The instance runs in On-Demand capacity.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_target
    #   Information about the target Capacity Reservation or Capacity
    #   Reservation group.
    #   @return [Types::CapacityReservationTarget]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateCapacityReservationSpecificationRequest AWS API Documentation
    #
    class LaunchTemplateCapacityReservationSpecificationRequest < Struct.new(
      :capacity_reservation_preference,
      :capacity_reservation_target)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the Capacity Reservation targeting option.
    #
    # @!attribute [rw] capacity_reservation_preference
    #   Indicates the instance's Capacity Reservation preferences. Possible
    #   preferences include:
    #
    #   * `open` - The instance can run in any `open` Capacity Reservation
    #     that has matching attributes (instance type, platform,
    #     Availability Zone).
    #
    #   * `none` - The instance avoids running in a Capacity Reservation
    #     even if one is available. The instance runs in On-Demand capacity.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_target
    #   Information about the target Capacity Reservation or Capacity
    #   Reservation group.
    #   @return [Types::CapacityReservationTargetResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateCapacityReservationSpecificationResponse AWS API Documentation
    #
    class LaunchTemplateCapacityReservationSpecificationResponse < Struct.new(
      :capacity_reservation_preference,
      :capacity_reservation_target)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a launch template and overrides.
    #
    # @!attribute [rw] launch_template_specification
    #   The launch template to use. Make sure that the launch template does
    #   not contain the `NetworkInterfaceId` parameter because you can't
    #   specify a network interface ID in a Spot Fleet.
    #   @return [Types::FleetLaunchTemplateSpecification]
    #
    # @!attribute [rw] overrides
    #   Any parameters that you specify override the same parameters in the
    #   launch template.
    #   @return [Array<Types::LaunchTemplateOverrides>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateConfig AWS API Documentation
    #
    class LaunchTemplateConfig < Struct.new(
      :launch_template_specification,
      :overrides)
      SENSITIVE = []
      include Aws::Structure
    end

    # The CPU options for the instance.
    #
    # @!attribute [rw] core_count
    #   The number of CPU cores for the instance.
    #   @return [Integer]
    #
    # @!attribute [rw] threads_per_core
    #   The number of threads per CPU core.
    #   @return [Integer]
    #
    # @!attribute [rw] amd_sev_snp
    #   Indicates whether the instance is enabled for AMD SEV-SNP. For more
    #   information, see [AMD SEV-SNP for Amazon EC2 instances][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateCpuOptions AWS API Documentation
    #
    class LaunchTemplateCpuOptions < Struct.new(
      :core_count,
      :threads_per_core,
      :amd_sev_snp)
      SENSITIVE = []
      include Aws::Structure
    end

    # The CPU options for the instance. Both the core count and threads per
    # core must be specified in the request.
    #
    # @!attribute [rw] core_count
    #   The number of CPU cores for the instance.
    #   @return [Integer]
    #
    # @!attribute [rw] threads_per_core
    #   The number of threads per CPU core. To disable multithreading for
    #   the instance, specify a value of `1`. Otherwise, specify the default
    #   value of `2`.
    #   @return [Integer]
    #
    # @!attribute [rw] amd_sev_snp
    #   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 [AMD SEV-SNP for Amazon EC2 instances][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateCpuOptionsRequest AWS API Documentation
    #
    class LaunchTemplateCpuOptionsRequest < Struct.new(
      :core_count,
      :threads_per_core,
      :amd_sev_snp)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device for an EBS volume.
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the EBS volume is encrypted.
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the EBS volume is deleted on instance termination.
    #   @return [Boolean]
    #
    # @!attribute [rw] iops
    #   The number of I/O operations per second (IOPS) that the volume
    #   supports.
    #   @return [Integer]
    #
    # @!attribute [rw] kms_key_id
    #   Identifier (key ID, key alias, key ARN, or alias ARN) of the
    #   customer managed KMS key to use for EBS encryption.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   The size of the volume, in GiB.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_type
    #   The volume type.
    #   @return [String]
    #
    # @!attribute [rw] throughput
    #   The throughput that the volume supports, in MiB/s.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_initialization_rate
    #   The Amazon EBS Provisioned Rate for Volume Initialization (volume
    #   initialization rate) specified for the volume, in MiB/s. If no
    #   volume initialization rate was specified, the value is `null`.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateEbsBlockDevice AWS API Documentation
    #
    class LaunchTemplateEbsBlockDevice < Struct.new(
      :encrypted,
      :delete_on_termination,
      :iops,
      :kms_key_id,
      :snapshot_id,
      :volume_size,
      :volume_type,
      :throughput,
      :volume_initialization_rate)
      SENSITIVE = []
      include Aws::Structure
    end

    # The parameters for a block device for an EBS volume.
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the EBS volume is encrypted. Encrypted volumes can
    #   only be attached to instances that support Amazon EBS encryption. If
    #   you are creating a volume from a snapshot, you can't specify an
    #   encryption value.
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the EBS volume is deleted on instance termination.
    #   @return [Boolean]
    #
    # @!attribute [rw] iops
    #   The number of I/O operations per second (IOPS). For `gp3`, `io1`,
    #   and `io2` volumes, this represents the number of IOPS that are
    #   provisioned for the volume. For `gp2` volumes, this represents the
    #   baseline performance of the volume and the rate at which the volume
    #   accumulates I/O credits for bursting.
    #
    #   The following are the supported values for each volume type:
    #
    #   * `gp3`: 3,000 - 80,000 IOPS
    #
    #   * `io1`: 100 - 64,000 IOPS
    #
    #   * `io2`: 100 - 256,000 IOPS
    #
    #   For `io2` volumes, you can achieve up to 256,000 IOPS on [instances
    #   built on the Nitro System][1]. On other instances, you can achieve
    #   performance up to 32,000 IOPS.
    #
    #   This parameter is supported for `io1`, `io2`, and `gp3` volumes
    #   only.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html
    #   @return [Integer]
    #
    # @!attribute [rw] kms_key_id
    #   Identifier (key ID, key alias, key ARN, or alias ARN) of the
    #   customer managed KMS key to use for EBS encryption.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   The size of the volume, in GiBs. You must specify either a snapshot
    #   ID or a volume size. The following are the supported volumes sizes
    #   for each volume type:
    #
    #   * `gp2`: 1 - 16,384 GiB
    #
    #   * `gp3`: 1 - 65,536 GiB
    #
    #   * `io1`: 4 - 16,384 GiB
    #
    #   * `io2`: 4 - 65,536 GiB
    #
    #   * `st1` and `sc1`: 125 - 16,384 GiB
    #
    #   * `standard`: 1 - 1024 GiB
    #   @return [Integer]
    #
    # @!attribute [rw] volume_type
    #   The volume type. For more information, see [Amazon EBS volume
    #   types][1] in the *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html
    #   @return [String]
    #
    # @!attribute [rw] throughput
    #   The throughput to provision for a `gp3` volume, with a maximum of
    #   2,000 MiB/s.
    #
    #   Valid Range: Minimum value of 125. Maximum value of 2,000.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_initialization_rate
    #   Specifies the Amazon EBS Provisioned Rate for Volume Initialization
    #   (volume initialization rate), in MiB/s, at which to download the
    #   snapshot blocks from Amazon S3 to the volume. This is also known as
    #   *volume initialization*. Specifying a volume initialization rate
    #   ensures that the volume is initialized at a predictable and
    #   consistent rate after creation.
    #
    #   This parameter is supported only for volumes created from snapshots.
    #   Omit this parameter if:
    #
    #   * You want to create the volume using fast snapshot restore. You
    #     must specify a snapshot that is enabled for fast snapshot restore.
    #     In this case, the volume is fully initialized at creation.
    #
    #     <note markdown="1"> If you specify a snapshot that is enabled for fast snapshot
    #     restore and a volume initialization rate, the volume will be
    #     initialized at the specified rate instead of fast snapshot
    #     restore.
    #
    #      </note>
    #
    #   * You want to create a volume that is initialized at the default
    #     rate.
    #
    #   For more information, see [ Initialize Amazon EBS volumes][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #   Valid range: 100 - 300 MiB/s
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateEbsBlockDeviceRequest AWS API Documentation
    #
    class LaunchTemplateEbsBlockDeviceRequest < Struct.new(
      :encrypted,
      :delete_on_termination,
      :iops,
      :kms_key_id,
      :snapshot_id,
      :volume_size,
      :volume_type,
      :throughput,
      :volume_initialization_rate)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #  </note>
    #
    # Describes an elastic inference accelerator.
    #
    # @!attribute [rw] type
    #   The type of elastic inference accelerator. The possible values are
    #   eia1.medium, eia1.large, and eia1.xlarge.
    #   @return [String]
    #
    # @!attribute [rw] count
    #   The number of elastic inference accelerators to attach to the
    #   instance.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateElasticInferenceAccelerator AWS API Documentation
    #
    class LaunchTemplateElasticInferenceAccelerator < Struct.new(
      :type,
      :count)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #  </note>
    #
    # Describes an elastic inference accelerator.
    #
    # @!attribute [rw] type
    #   The type of elastic inference accelerator. The possible values are
    #   eia1.medium, eia1.large, and eia1.xlarge.
    #   @return [String]
    #
    # @!attribute [rw] count
    #   The number of elastic inference accelerators to attach to the
    #   instance.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateElasticInferenceAcceleratorResponse AWS API Documentation
    #
    class LaunchTemplateElasticInferenceAcceleratorResponse < Struct.new(
      :type,
      :count)
      SENSITIVE = []
      include Aws::Structure
    end

    # ENA Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
    # technology to increase the maximum bandwidth used per stream and
    # minimize tail latency of network traffic between EC2 instances. With
    # ENA Express, you can communicate between two EC2 instances in the same
    # subnet within the same account, or in different accounts. Both sending
    # and receiving instances must have ENA Express enabled.
    #
    # To improve the reliability of network packet delivery, ENA Express
    # reorders network packets on the receiving end by default. However,
    # some UDP-based applications are designed to handle network packets
    # that are out of order to reduce the overhead for packet delivery at
    # the network layer. When ENA Express is enabled, you can specify
    # whether UDP network traffic uses it.
    #
    # @!attribute [rw] ena_srd_enabled
    #   Indicates whether ENA Express is enabled for the network interface.
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_srd_udp_specification
    #   Configures ENA Express for UDP network traffic.
    #   @return [Types::LaunchTemplateEnaSrdUdpSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateEnaSrdSpecification AWS API Documentation
    #
    class LaunchTemplateEnaSrdSpecification < Struct.new(
      :ena_srd_enabled,
      :ena_srd_udp_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # ENA Express is compatible with both TCP and UDP transport protocols.
    # When it's enabled, TCP traffic automatically uses it. However, some
    # UDP-based applications are designed to handle network packets that are
    # out of order, without a need for retransmission, such as live video
    # broadcasting or other near-real-time applications. For UDP traffic,
    # you can specify whether to use ENA Express, based on your application
    # environment needs.
    #
    # @!attribute [rw] ena_srd_udp_enabled
    #   Indicates whether UDP traffic to and from the instance uses ENA
    #   Express. To specify this setting, you must first enable ENA Express.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateEnaSrdUdpSpecification AWS API Documentation
    #
    class LaunchTemplateEnaSrdUdpSpecification < Struct.new(
      :ena_srd_udp_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Indicates whether the instance is enabled for Amazon Web Services
    # Nitro Enclaves.
    #
    # @!attribute [rw] enabled
    #   If this parameter is set to `true`, the instance is enabled for
    #   Amazon Web Services Nitro Enclaves; otherwise, it is not enabled for
    #   Amazon Web Services Nitro Enclaves.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateEnclaveOptions AWS API Documentation
    #
    class LaunchTemplateEnclaveOptions < Struct.new(
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Indicates whether the instance is enabled for Amazon Web Services
    # Nitro Enclaves. For more information, see [What is Nitro Enclaves?][1]
    # in the *Amazon Web Services Nitro Enclaves User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html
    #
    # @!attribute [rw] enabled
    #   To enable the instance for Amazon Web Services Nitro Enclaves, set
    #   this parameter to `true`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateEnclaveOptionsRequest AWS API Documentation
    #
    class LaunchTemplateEnclaveOptionsRequest < Struct.new(
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Indicates whether an instance is configured for hibernation.
    #
    # @!attribute [rw] configured
    #   If this parameter is set to `true`, the instance is enabled for
    #   hibernation; otherwise, it is not enabled for hibernation.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateHibernationOptions AWS API Documentation
    #
    class LaunchTemplateHibernationOptions < Struct.new(
      :configured)
      SENSITIVE = []
      include Aws::Structure
    end

    # Indicates whether the instance is configured for hibernation. This
    # parameter is valid only if the instance meets the [hibernation
    # prerequisites][1].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html
    #
    # @!attribute [rw] configured
    #   If you set this parameter to `true`, the instance is enabled for
    #   hibernation.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateHibernationOptionsRequest AWS API Documentation
    #
    class LaunchTemplateHibernationOptionsRequest < Struct.new(
      :configured)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IAM instance profile.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the instance profile.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the instance profile.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateIamInstanceProfileSpecification AWS API Documentation
    #
    class LaunchTemplateIamInstanceProfileSpecification < Struct.new(
      :arn,
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # An IAM instance profile.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the instance profile.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the instance profile.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateIamInstanceProfileSpecificationRequest AWS API Documentation
    #
    class LaunchTemplateIamInstanceProfileSpecificationRequest < Struct.new(
      :arn,
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # The maintenance options of your instance.
    #
    # @!attribute [rw] auto_recovery
    #   Disables the automatic recovery behavior of your instance or sets it
    #   to default.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateInstanceMaintenanceOptions AWS API Documentation
    #
    class LaunchTemplateInstanceMaintenanceOptions < Struct.new(
      :auto_recovery)
      SENSITIVE = []
      include Aws::Structure
    end

    # The maintenance options of your instance.
    #
    # @!attribute [rw] auto_recovery
    #   Disables the automatic recovery behavior of your instance or sets it
    #   to default. For more information, see [Simplified automatic
    #   recovery][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateInstanceMaintenanceOptionsRequest AWS API Documentation
    #
    class LaunchTemplateInstanceMaintenanceOptionsRequest < Struct.new(
      :auto_recovery)
      SENSITIVE = []
      include Aws::Structure
    end

    # The market (purchasing) option for the instances.
    #
    # @!attribute [rw] market_type
    #   The market type.
    #   @return [String]
    #
    # @!attribute [rw] spot_options
    #   The options for Spot Instances.
    #   @return [Types::LaunchTemplateSpotMarketOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateInstanceMarketOptions AWS API Documentation
    #
    class LaunchTemplateInstanceMarketOptions < Struct.new(
      :market_type,
      :spot_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # The market (purchasing) option for the instances.
    #
    # @!attribute [rw] market_type
    #   The market type.
    #   @return [String]
    #
    # @!attribute [rw] spot_options
    #   The options for Spot Instances.
    #   @return [Types::LaunchTemplateSpotMarketOptionsRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateInstanceMarketOptionsRequest AWS API Documentation
    #
    class LaunchTemplateInstanceMarketOptionsRequest < Struct.new(
      :market_type,
      :spot_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # The metadata options for the instance. For more information, see [Use
    # instance metadata to manage your EC2 instance][1] in the *Amazon EC2
    # User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
    #
    # @!attribute [rw] state
    #   The state of the metadata option changes.
    #
    #   `pending` - The metadata options are being updated and the instance
    #   is not ready to process metadata traffic with the new selection.
    #
    #   `applied` - The metadata options have been successfully applied on
    #   the instance.
    #   @return [String]
    #
    # @!attribute [rw] http_tokens
    #   Indicates whether IMDSv2 is required.
    #
    #   * `optional` - IMDSv2 is optional. You can choose whether to send a
    #     session token in your instance metadata retrieval requests. If you
    #     retrieve IAM role credentials without a session token, you receive
    #     the IMDSv1 role credentials. If you retrieve IAM role credentials
    #     using a valid session token, you receive the IMDSv2 role
    #     credentials.
    #
    #   * `required` - IMDSv2 is required. You must send a session token in
    #     your instance metadata retrieval requests. With this option,
    #     retrieving the IAM role credentials always returns IMDSv2
    #     credentials; IMDSv1 credentials are not available.
    #   @return [String]
    #
    # @!attribute [rw] http_put_response_hop_limit
    #   The desired HTTP PUT response hop limit for instance metadata
    #   requests. The larger the number, the further instance metadata
    #   requests can travel.
    #
    #   Possible values: Integers from 1 to 64
    #   @return [Integer]
    #
    # @!attribute [rw] http_endpoint
    #   Enables or disables the HTTP metadata endpoint on your instances. If
    #   the parameter is not specified, the default state is `enabled`.
    #
    #   <note markdown="1"> If you specify a value of `disabled`, you will not be able to access
    #   your instance metadata.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] http_protocol_ipv_6
    #   Enables or disables the IPv6 endpoint for the instance metadata
    #   service.
    #
    #   Default: `disabled`
    #   @return [String]
    #
    # @!attribute [rw] instance_metadata_tags
    #   Set to `enabled` to allow access to instance tags from the instance
    #   metadata. Set to `disabled` to turn off access to instance tags from
    #   the instance metadata. For more information, see [View tags for your
    #   EC2 instances using instance metadata][1].
    #
    #   Default: `disabled`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-tags-in-IMDS.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateInstanceMetadataOptions AWS API Documentation
    #
    class LaunchTemplateInstanceMetadataOptions < Struct.new(
      :state,
      :http_tokens,
      :http_put_response_hop_limit,
      :http_endpoint,
      :http_protocol_ipv_6,
      :instance_metadata_tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # The metadata options for the instance. For more information, see [Use
    # instance metadata to manage your EC2 instance][1] in the *Amazon EC2
    # User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
    #
    # @!attribute [rw] http_tokens
    #   Indicates whether IMDSv2 is required.
    #
    #   * `optional` - IMDSv2 is optional. You can choose whether to send a
    #     session token in your instance metadata retrieval requests. If you
    #     retrieve IAM role credentials without a session token, you receive
    #     the IMDSv1 role credentials. If you retrieve IAM role credentials
    #     using a valid session token, you receive the IMDSv2 role
    #     credentials.
    #
    #   * `required` - IMDSv2 is required. You must send a session token in
    #     your instance metadata retrieval requests. With this option,
    #     retrieving the IAM role credentials always returns IMDSv2
    #     credentials; IMDSv1 credentials are not available.
    #
    #   Default: If the value of `ImdsSupport` for the Amazon Machine Image
    #   (AMI) for your instance is `v2.0`, the default is `required`.
    #   @return [String]
    #
    # @!attribute [rw] http_put_response_hop_limit
    #   The desired HTTP PUT response hop limit for instance metadata
    #   requests. The larger the number, the further instance metadata
    #   requests can travel.
    #
    #   Default: `1`
    #
    #   Possible values: Integers from 1 to 64
    #   @return [Integer]
    #
    # @!attribute [rw] http_endpoint
    #   Enables or disables the HTTP metadata endpoint on your instances. If
    #   the parameter is not specified, the default state is `enabled`.
    #
    #   <note markdown="1"> If you specify a value of `disabled`, you will not be able to access
    #   your instance metadata.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] http_protocol_ipv_6
    #   Enables or disables the IPv6 endpoint for the instance metadata
    #   service.
    #
    #   Default: `disabled`
    #   @return [String]
    #
    # @!attribute [rw] instance_metadata_tags
    #   Set to `enabled` to allow access to instance tags from the instance
    #   metadata. Set to `disabled` to turn off access to instance tags from
    #   the instance metadata. For more information, see [View tags for your
    #   EC2 instances using instance metadata][1].
    #
    #   Default: `disabled`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-tags-in-IMDS.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateInstanceMetadataOptionsRequest AWS API Documentation
    #
    class LaunchTemplateInstanceMetadataOptionsRequest < Struct.new(
      :http_tokens,
      :http_put_response_hop_limit,
      :http_endpoint,
      :http_protocol_ipv_6,
      :instance_metadata_tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network interface.
    #
    # @!attribute [rw] associate_carrier_ip_address
    #   Indicates whether to associate a Carrier IP address with eth0 for a
    #   new network interface.
    #
    #   Use this option when you launch an instance in a Wavelength Zone and
    #   want to associate a Carrier IP address with the network interface.
    #   For more information about Carrier IP addresses, see [Carrier IP
    #   address][1] in the *Wavelength Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip
    #   @return [Boolean]
    #
    # @!attribute [rw] associate_public_ip_address
    #   Indicates whether to associate a public IPv4 address with eth0 for a
    #   new network interface.
    #
    #   Amazon Web Services charges for all public IPv4 addresses, including
    #   public IPv4 addresses associated with running instances and Elastic
    #   IP addresses. For more information, see the *Public IPv4 Address*
    #   tab on the [Amazon VPC pricing page][1].
    #
    #
    #
    #   [1]: http://aws.amazon.com/vpc/pricing/
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the network interface is deleted when the instance
    #   is terminated.
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   A description for the network interface.
    #   @return [String]
    #
    # @!attribute [rw] device_index
    #   The device index for the network interface attachment.
    #   @return [Integer]
    #
    # @!attribute [rw] groups
    #   The IDs of one or more security groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] interface_type
    #   The type of network interface.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_address_count
    #   The number of IPv6 addresses for the network interface.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_addresses
    #   The IPv6 addresses for the network interface.
    #   @return [Array<Types::InstanceIpv6Address>]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The primary private IPv4 address of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_addresses
    #   One or more private IPv4 addresses.
    #   @return [Array<Types::PrivateIpAddressSpecification>]
    #
    # @!attribute [rw] secondary_private_ip_address_count
    #   The number of secondary private IPv4 addresses for the network
    #   interface.
    #   @return [Integer]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet for the network interface.
    #   @return [String]
    #
    # @!attribute [rw] network_card_index
    #   The index of the network card.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_4_prefixes
    #   One or more IPv4 prefixes assigned to the network interface.
    #   @return [Array<Types::Ipv4PrefixSpecificationResponse>]
    #
    # @!attribute [rw] ipv_4_prefix_count
    #   The number of IPv4 prefixes that Amazon Web Services automatically
    #   assigned to the network interface.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_prefixes
    #   One or more IPv6 prefixes assigned to the network interface.
    #   @return [Array<Types::Ipv6PrefixSpecificationResponse>]
    #
    # @!attribute [rw] ipv_6_prefix_count
    #   The number of IPv6 prefixes that Amazon Web Services automatically
    #   assigned to the network interface.
    #   @return [Integer]
    #
    # @!attribute [rw] primary_ipv_6
    #   The primary IPv6 address of the network interface. 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. For more information about
    #   primary IPv6 addresses, see [RunInstances][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_srd_specification
    #   Contains the ENA Express settings for instances launched from your
    #   launch template.
    #   @return [Types::LaunchTemplateEnaSrdSpecification]
    #
    # @!attribute [rw] connection_tracking_specification
    #   A security group connection tracking specification that enables you
    #   to set the timeout for connection tracking on an Elastic network
    #   interface. For more information, see [Idle connection tracking
    #   timeout][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts
    #   @return [Types::ConnectionTrackingSpecification]
    #
    # @!attribute [rw] ena_queue_count
    #   The number of ENA queues created with the instance.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateInstanceNetworkInterfaceSpecification AWS API Documentation
    #
    class LaunchTemplateInstanceNetworkInterfaceSpecification < Struct.new(
      :associate_carrier_ip_address,
      :associate_public_ip_address,
      :delete_on_termination,
      :description,
      :device_index,
      :groups,
      :interface_type,
      :ipv_6_address_count,
      :ipv_6_addresses,
      :network_interface_id,
      :private_ip_address,
      :private_ip_addresses,
      :secondary_private_ip_address_count,
      :subnet_id,
      :network_card_index,
      :ipv_4_prefixes,
      :ipv_4_prefix_count,
      :ipv_6_prefixes,
      :ipv_6_prefix_count,
      :primary_ipv_6,
      :ena_srd_specification,
      :connection_tracking_specification,
      :ena_queue_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # The parameters for a network interface.
    #
    # @!attribute [rw] associate_carrier_ip_address
    #   Associates a Carrier IP address with eth0 for a new network
    #   interface.
    #
    #   Use this option when you launch an instance in a Wavelength Zone and
    #   want to associate a Carrier IP address with the network interface.
    #   For more information about Carrier IP addresses, see [Carrier IP
    #   addresses][1] in the *Wavelength Developer Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip
    #   @return [Boolean]
    #
    # @!attribute [rw] associate_public_ip_address
    #   Associates a public IPv4 address with eth0 for a new network
    #   interface.
    #
    #   Amazon Web Services charges for all public IPv4 addresses, including
    #   public IPv4 addresses associated with running instances and Elastic
    #   IP addresses. For more information, see the *Public IPv4 Address*
    #   tab on the [Amazon VPC pricing page][1].
    #
    #
    #
    #   [1]: http://aws.amazon.com/vpc/pricing/
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the network interface is deleted when the instance
    #   is terminated.
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   A description for the network interface.
    #   @return [String]
    #
    # @!attribute [rw] device_index
    #   The device index for the network interface attachment. The primary
    #   network interface has a device index of 0. Each network interface is
    #   of type `interface`, you must specify a device index. If you create
    #   a launch template that includes secondary network interfaces but not
    #   a primary network interface, then you must add a primary network
    #   interface as a launch parameter when you launch an instance from the
    #   template.
    #   @return [Integer]
    #
    # @!attribute [rw] groups
    #   The IDs of one or more security groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] interface_type
    #   The type of network interface. To create an Elastic Fabric Adapter
    #   (EFA), specify `efa` or `efa`. For more information, see [Elastic
    #   Fabric Adapter for AI/ML and HPC workloads on Amazon EC2][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #   If you are not creating an EFA, specify `interface` or omit this
    #   parameter.
    #
    #   If you specify `efa-only`, do not assign any IP addresses to the
    #   network interface. EFA-only network interfaces do not support IP
    #   addresses.
    #
    #   Valid values: `interface` \| `efa` \| `efa-only`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_address_count
    #   The number of IPv6 addresses to assign to a network interface.
    #   Amazon EC2 automatically selects the IPv6 addresses from the subnet
    #   range. You can't use this option if specifying specific IPv6
    #   addresses.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_addresses
    #   One or more specific IPv6 addresses from the IPv6 CIDR block range
    #   of your subnet. You can't use this option if you're specifying a
    #   number of IPv6 addresses.
    #   @return [Array<Types::InstanceIpv6AddressRequest>]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The primary private IPv4 address of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_addresses
    #   One or more private IPv4 addresses.
    #   @return [Array<Types::PrivateIpAddressSpecification>]
    #
    # @!attribute [rw] secondary_private_ip_address_count
    #   The number of secondary private IPv4 addresses to assign to a
    #   network interface.
    #   @return [Integer]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet for the network interface.
    #   @return [String]
    #
    # @!attribute [rw] network_card_index
    #   The index of the network card. Some instance types support multiple
    #   network cards. The primary network interface must be assigned to
    #   network card index 0. The default is network card index 0.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_4_prefixes
    #   One or more IPv4 prefixes to be assigned to the network interface.
    #   You cannot use this option if you use the `Ipv4PrefixCount` option.
    #   @return [Array<Types::Ipv4PrefixSpecificationRequest>]
    #
    # @!attribute [rw] ipv_4_prefix_count
    #   The number of IPv4 prefixes to be automatically assigned to the
    #   network interface. You cannot use this option if you use the
    #   `Ipv4Prefix` option.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_prefixes
    #   One or more IPv6 prefixes to be assigned to the network interface.
    #   You cannot use this option if you use the `Ipv6PrefixCount` option.
    #   @return [Array<Types::Ipv6PrefixSpecificationRequest>]
    #
    # @!attribute [rw] ipv_6_prefix_count
    #   The number of IPv6 prefixes to be automatically assigned to the
    #   network interface. You cannot use this option if you use the
    #   `Ipv6Prefix` option.
    #   @return [Integer]
    #
    # @!attribute [rw] primary_ipv_6
    #   The primary IPv6 address of the network interface. 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. For more information about
    #   primary IPv6 addresses, see [RunInstances][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_srd_specification
    #   Configure ENA Express settings for your launch template.
    #   @return [Types::EnaSrdSpecificationRequest]
    #
    # @!attribute [rw] connection_tracking_specification
    #   A security group connection tracking specification that enables you
    #   to set the timeout for connection tracking on an Elastic network
    #   interface. For more information, see [Idle connection tracking
    #   timeout][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts
    #   @return [Types::ConnectionTrackingSpecificationRequest]
    #
    # @!attribute [rw] ena_queue_count
    #   The number of ENA queues to be created with the instance.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateInstanceNetworkInterfaceSpecificationRequest AWS API Documentation
    #
    class LaunchTemplateInstanceNetworkInterfaceSpecificationRequest < Struct.new(
      :associate_carrier_ip_address,
      :associate_public_ip_address,
      :delete_on_termination,
      :description,
      :device_index,
      :groups,
      :interface_type,
      :ipv_6_address_count,
      :ipv_6_addresses,
      :network_interface_id,
      :private_ip_address,
      :private_ip_addresses,
      :secondary_private_ip_address_count,
      :subnet_id,
      :network_card_index,
      :ipv_4_prefixes,
      :ipv_4_prefix_count,
      :ipv_6_prefixes,
      :ipv_6_prefix_count,
      :primary_ipv_6,
      :ena_srd_specification,
      :connection_tracking_specification,
      :ena_queue_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a license configuration.
    #
    # @!attribute [rw] license_configuration_arn
    #   The Amazon Resource Name (ARN) of the license configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateLicenseConfiguration AWS API Documentation
    #
    class LaunchTemplateLicenseConfiguration < Struct.new(
      :license_configuration_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a license configuration.
    #
    # @!attribute [rw] license_configuration_arn
    #   The Amazon Resource Name (ARN) of the license configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateLicenseConfigurationRequest AWS API Documentation
    #
    class LaunchTemplateLicenseConfigurationRequest < Struct.new(
      :license_configuration_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # With network performance options, you can adjust your bandwidth
    # preferences to meet the needs of the workload that runs on your
    # instance at launch.
    #
    # @!attribute [rw] bandwidth_weighting
    #   When you configure network bandwidth weighting, you can boost
    #   baseline bandwidth for either networking or EBS by up to 25%. The
    #   total available baseline bandwidth for your instance remains the
    #   same. The default option uses the standard bandwidth configuration
    #   for your instance type.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateNetworkPerformanceOptions AWS API Documentation
    #
    class LaunchTemplateNetworkPerformanceOptions < Struct.new(
      :bandwidth_weighting)
      SENSITIVE = []
      include Aws::Structure
    end

    # When you configure network performance options in your launch
    # template, your instance is geared for performance improvements based
    # on the workload that it runs as soon as it's available.
    #
    # @!attribute [rw] bandwidth_weighting
    #   Specify the bandwidth weighting option to boost the associated type
    #   of baseline bandwidth, as follows:
    #
    #   default
    #
    #   : This option uses the standard bandwidth configuration for your
    #     instance type.
    #
    #   vpc-1
    #
    #   : This option boosts your networking baseline bandwidth and reduces
    #     your EBS baseline bandwidth.
    #
    #   ebs-1
    #
    #   : This option boosts your EBS baseline bandwidth and reduces your
    #     networking baseline bandwidth.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateNetworkPerformanceOptionsRequest AWS API Documentation
    #
    class LaunchTemplateNetworkPerformanceOptionsRequest < Struct.new(
      :bandwidth_weighting)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes overrides for a launch template.
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] spot_price
    #   The maximum price per unit hour that you are 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.
    #
    #   If you specify a maximum price, your instances will be interrupted
    #   more frequently than if you do not specify this parameter.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which to launch the instances.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which to launch the instances.
    #   @return [String]
    #
    # @!attribute [rw] weighted_capacity
    #   The number of units provided by the specified instance type. These
    #   are the same units that you chose to set the target capacity in
    #   terms of instances, or a performance characteristic such as vCPUs,
    #   memory, or I/O.
    #
    #   If the target capacity divided by this value is not a whole number,
    #   Amazon EC2 rounds the number of instances to the next whole number.
    #   If this value is not specified, the default is 1.
    #
    #   <note markdown="1"> When specifying weights, the price used in the `lowestPrice` and
    #   `priceCapacityOptimized` allocation strategies is per *unit* hour
    #   (where the instance price is divided by the specified weight).
    #   However, if all the specified weights are above the requested
    #   `TargetCapacity`, resulting in only 1 instance being launched, the
    #   price used is per *instance* hour.
    #
    #    </note>
    #   @return [Float]
    #
    # @!attribute [rw] priority
    #   The priority for the launch template override. The highest priority
    #   is launched first.
    #
    #   If `OnDemandAllocationStrategy` is set to `prioritized`, Spot Fleet
    #   uses priority to determine which launch template override to use
    #   first in fulfilling On-Demand capacity.
    #
    #   If the Spot `AllocationStrategy` is set to
    #   `capacityOptimizedPrioritized`, Spot Fleet uses priority on a
    #   best-effort basis to determine which launch template override to use
    #   in fulfilling Spot capacity, but optimizes for capacity first.
    #
    #   Valid values are whole numbers starting at `0`. The lower the
    #   number, the higher the priority. If no number is set, the launch
    #   template override has the lowest priority. You can set the same
    #   priority for different launch template overrides.
    #   @return [Float]
    #
    # @!attribute [rw] instance_requirements
    #   The instance requirements. When you specify instance requirements,
    #   Amazon EC2 will identify instance types with the provided
    #   requirements, and then use your On-Demand and Spot allocation
    #   strategies to launch instances from these instance types, in the
    #   same way as when you specify a list of instance types.
    #
    #   <note markdown="1"> If you specify `InstanceRequirements`, you can't specify
    #   `InstanceType`.
    #
    #    </note>
    #   @return [Types::InstanceRequirements]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateOverrides AWS API Documentation
    #
    class LaunchTemplateOverrides < Struct.new(
      :instance_type,
      :spot_price,
      :subnet_id,
      :availability_zone,
      :weighted_capacity,
      :priority,
      :instance_requirements)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the placement of an instance.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the instance.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone of the instance.
    #   @return [String]
    #
    # @!attribute [rw] affinity
    #   The affinity setting for the instance on the Dedicated Host.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the placement group for the instance.
    #   @return [String]
    #
    # @!attribute [rw] host_id
    #   The ID of the Dedicated Host for the instance.
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   The tenancy of the instance. An instance with a tenancy of
    #   `dedicated` runs on single-tenant hardware.
    #   @return [String]
    #
    # @!attribute [rw] spread_domain
    #   Reserved for future use.
    #   @return [String]
    #
    # @!attribute [rw] host_resource_group_arn
    #   The ARN of the host resource group in which to launch the instances.
    #   @return [String]
    #
    # @!attribute [rw] partition_number
    #   The number of the partition the instance should launch in. Valid
    #   only if the placement group strategy is set to `partition`.
    #   @return [Integer]
    #
    # @!attribute [rw] group_id
    #   The Group ID of the placement group. You must specify the Placement
    #   Group **Group ID** to launch an instance in a shared placement
    #   group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplatePlacement AWS API Documentation
    #
    class LaunchTemplatePlacement < Struct.new(
      :availability_zone,
      :availability_zone_id,
      :affinity,
      :group_name,
      :host_id,
      :tenancy,
      :spread_domain,
      :host_resource_group_arn,
      :partition_number,
      :group_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the placement of an instance.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone for the instance.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone for the instance.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both
    #   @return [String]
    #
    # @!attribute [rw] affinity
    #   The affinity setting for an instance on a Dedicated Host.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the placement group for the instance.
    #   @return [String]
    #
    # @!attribute [rw] host_id
    #   The ID of the Dedicated Host for the instance.
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   The tenancy of the instance. An instance with a tenancy of dedicated
    #   runs on single-tenant hardware.
    #   @return [String]
    #
    # @!attribute [rw] spread_domain
    #   Reserved for future use.
    #   @return [String]
    #
    # @!attribute [rw] host_resource_group_arn
    #   The ARN of the host resource group in which to launch the instances.
    #   If you specify a host resource group ARN, omit the **Tenancy**
    #   parameter or set it to `host`.
    #   @return [String]
    #
    # @!attribute [rw] partition_number
    #   The number of the partition the instance should launch in. Valid
    #   only if the placement group strategy is set to `partition`.
    #   @return [Integer]
    #
    # @!attribute [rw] group_id
    #   The Group Id of a placement group. You must specify the Placement
    #   Group **Group Id** to launch an instance in a shared placement
    #   group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplatePlacementRequest AWS API Documentation
    #
    class LaunchTemplatePlacementRequest < Struct.new(
      :availability_zone,
      :availability_zone_id,
      :affinity,
      :group_name,
      :host_id,
      :tenancy,
      :spread_domain,
      :host_resource_group_arn,
      :partition_number,
      :group_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for instance hostnames.
    #
    # @!attribute [rw] hostname_type
    #   The type of hostname to assign to an instance.
    #   @return [String]
    #
    # @!attribute [rw] enable_resource_name_dns_a_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS A records.
    #   @return [Boolean]
    #
    # @!attribute [rw] enable_resource_name_dns_aaaa_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS AAAA records.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplatePrivateDnsNameOptions AWS API Documentation
    #
    class LaunchTemplatePrivateDnsNameOptions < Struct.new(
      :hostname_type,
      :enable_resource_name_dns_a_record,
      :enable_resource_name_dns_aaaa_record)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for instance hostnames.
    #
    # @!attribute [rw] hostname_type
    #   The type of hostname for Amazon EC2 instances. For IPv4 only
    #   subnets, an instance DNS name must be based on the instance IPv4
    #   address. For IPv6 native subnets, an instance DNS name must be based
    #   on the instance ID. For dual-stack subnets, you can specify whether
    #   DNS names use the instance IPv4 address or the instance ID.
    #   @return [String]
    #
    # @!attribute [rw] enable_resource_name_dns_a_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS A records.
    #   @return [Boolean]
    #
    # @!attribute [rw] enable_resource_name_dns_aaaa_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS AAAA records.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplatePrivateDnsNameOptionsRequest AWS API Documentation
    #
    class LaunchTemplatePrivateDnsNameOptionsRequest < Struct.new(
      :hostname_type,
      :enable_resource_name_dns_a_record,
      :enable_resource_name_dns_aaaa_record)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the launch template to use.
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @!attribute [rw] version
    #   The launch template version number, `$Latest`, or `$Default`.
    #
    #   A value of `$Latest` uses the latest version of the launch template.
    #
    #   A value of `$Default` uses the default version of the launch
    #   template.
    #
    #   Default: The default version of the launch template.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateSpecification AWS API Documentation
    #
    class LaunchTemplateSpecification < Struct.new(
      :launch_template_id,
      :launch_template_name,
      :version)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options for Spot Instances.
    #
    # @!attribute [rw] max_price
    #   The maximum hourly price 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. If you do specify this parameter,
    #   it must be more than USD $0.001. Specifying a value below USD $0.001
    #   will result in an `InvalidParameterValue` error message when the
    #   launch template is used to launch an instance.
    #   @return [String]
    #
    # @!attribute [rw] spot_instance_type
    #   The Spot Instance request type.
    #   @return [String]
    #
    # @!attribute [rw] block_duration_minutes
    #   The required duration for the Spot Instances (also known as Spot
    #   blocks), in minutes. This value must be a multiple of 60 (60, 120,
    #   180, 240, 300, or 360).
    #   @return [Integer]
    #
    # @!attribute [rw] valid_until
    #   The end date of the request. For a one-time request, the request
    #   remains active until all instances launch, the request is canceled,
    #   or this date is reached. If the request is persistent, it remains
    #   active until it is canceled or this date and time is reached.
    #   @return [Time]
    #
    # @!attribute [rw] instance_interruption_behavior
    #   The behavior when a Spot Instance is interrupted.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateSpotMarketOptions AWS API Documentation
    #
    class LaunchTemplateSpotMarketOptions < Struct.new(
      :max_price,
      :spot_instance_type,
      :block_duration_minutes,
      :valid_until,
      :instance_interruption_behavior)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options for Spot Instances.
    #
    # @!attribute [rw] max_price
    #   The maximum hourly price 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. If you do specify this parameter,
    #   it must be more than USD $0.001. Specifying a value below USD $0.001
    #   will result in an `InvalidParameterValue` error message when the
    #   launch template is used to launch an instance.
    #
    #   If you specify a maximum price, your Spot Instances will be
    #   interrupted more frequently than if you do not specify this
    #   parameter.
    #   @return [String]
    #
    # @!attribute [rw] spot_instance_type
    #   The Spot Instance request type.
    #   @return [String]
    #
    # @!attribute [rw] block_duration_minutes
    #   Deprecated.
    #   @return [Integer]
    #
    # @!attribute [rw] valid_until
    #   The end date of the request, in UTC format
    #   (*YYYY-MM-DD*T*HH:MM:SS*Z). Supported only for persistent requests.
    #
    #   * For a persistent request, the request remains active until the
    #     `ValidUntil` date and time is reached. Otherwise, the request
    #     remains active until you cancel it.
    #
    #   * For a one-time request, `ValidUntil` is not supported. The request
    #     remains active until all instances launch or you cancel the
    #     request.
    #
    #   Default: 7 days from the current date
    #   @return [Time]
    #
    # @!attribute [rw] instance_interruption_behavior
    #   The behavior when a Spot Instance is interrupted. The default is
    #   `terminate`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateSpotMarketOptionsRequest AWS API Documentation
    #
    class LaunchTemplateSpotMarketOptionsRequest < Struct.new(
      :max_price,
      :spot_instance_type,
      :block_duration_minutes,
      :valid_until,
      :instance_interruption_behavior)
      SENSITIVE = []
      include Aws::Structure
    end

    # The tags specification for the launch template.
    #
    # @!attribute [rw] resource_type
    #   The type of resource to tag.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags for the resource.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateTagSpecification AWS API Documentation
    #
    class LaunchTemplateTagSpecification < Struct.new(
      :resource_type,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # The tags specification for the resources that are created during
    # instance launch.
    #
    # @!attribute [rw] resource_type
    #   The type of resource to tag.
    #
    #   Valid Values lists all resource types for Amazon EC2 that can be
    #   tagged. When you create a launch template, you can specify tags for
    #   the following resource types only: `instance` \| `volume` \|
    #   `network-interface` \| `spot-instances-request`. If the instance
    #   does not include the resource type that you specify, the instance
    #   launch fails. For example, not all instance types include a volume.
    #
    #   To tag a resource after it has been created, see [CreateTags][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags to apply to the resource.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateTagSpecificationRequest AWS API Documentation
    #
    class LaunchTemplateTagSpecificationRequest < Struct.new(
      :resource_type,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a launch template version.
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #   @return [String]
    #
    # @!attribute [rw] version_number
    #   The version number.
    #   @return [Integer]
    #
    # @!attribute [rw] version_description
    #   The description for the version.
    #   @return [String]
    #
    # @!attribute [rw] create_time
    #   The time the version was created.
    #   @return [Time]
    #
    # @!attribute [rw] created_by
    #   The principal that created the version.
    #   @return [String]
    #
    # @!attribute [rw] default_version
    #   Indicates whether the version is the default version.
    #   @return [Boolean]
    #
    # @!attribute [rw] launch_template_data
    #   Information about the launch template.
    #   @return [Types::ResponseLaunchTemplateData]
    #
    # @!attribute [rw] operator
    #   The entity that manages the launch template.
    #   @return [Types::OperatorResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplateVersion AWS API Documentation
    #
    class LaunchTemplateVersion < Struct.new(
      :launch_template_id,
      :launch_template_name,
      :version_number,
      :version_description,
      :create_time,
      :created_by,
      :default_version,
      :launch_template_data,
      :operator)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the monitoring for the instance.
    #
    # @!attribute [rw] enabled
    #   Indicates whether detailed monitoring is enabled. Otherwise, basic
    #   monitoring is enabled.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplatesMonitoring AWS API Documentation
    #
    class LaunchTemplatesMonitoring < Struct.new(
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the monitoring for the instance.
    #
    # @!attribute [rw] enabled
    #   Specify `true` to enable detailed monitoring. Otherwise, basic
    #   monitoring is enabled.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LaunchTemplatesMonitoringRequest AWS API Documentation
    #
    class LaunchTemplatesMonitoringRequest < Struct.new(
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a license configuration.
    #
    # @!attribute [rw] license_configuration_arn
    #   The Amazon Resource Name (ARN) of the license configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LicenseConfiguration AWS API Documentation
    #
    class LicenseConfiguration < Struct.new(
      :license_configuration_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a license configuration.
    #
    # @!attribute [rw] license_configuration_arn
    #   The Amazon Resource Name (ARN) of the license configuration.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LicenseConfigurationRequest AWS API Documentation
    #
    class LicenseConfigurationRequest < Struct.new(
      :license_configuration_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_ids
    #   The IDs of the AMIs to list. Omit this parameter to list all of the
    #   AMIs that are in the Recycle Bin. You can specify up to 20 IDs in a
    #   single request.
    #   @return [Array<String>]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ListImagesInRecycleBinRequest AWS API Documentation
    #
    class ListImagesInRecycleBinRequest < Struct.new(
      :image_ids,
      :next_token,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] images
    #   Information about the AMIs.
    #   @return [Array<Types::ImageRecycleBinInfo>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ListImagesInRecycleBinResult AWS API Documentation
    #
    class ListImagesInRecycleBinResult < Struct.new(
      :images,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] max_results
    #   The maximum number of items to return for this request. To get the
    #   next page of items, make another request with the token returned in
    #   the output. For more information, see [Pagination][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token returned from a previous paginated request. Pagination
    #   continues from the end of the items returned by the previous
    #   request.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_ids
    #   The IDs of the snapshots to list. Omit this parameter to list all of
    #   the snapshots that are in the Recycle Bin.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ListSnapshotsInRecycleBinRequest AWS API Documentation
    #
    class ListSnapshotsInRecycleBinRequest < Struct.new(
      :max_results,
      :next_token,
      :snapshot_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshots
    #   Information about the snapshots.
    #   @return [Array<Types::SnapshotRecycleBinInfo>]
    #
    # @!attribute [rw] next_token
    #   The token to include in another request to get the next page of
    #   items. This value is `null` when there are no more items to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ListSnapshotsInRecycleBinResult AWS API Documentation
    #
    class ListSnapshotsInRecycleBinResult < Struct.new(
      :snapshots,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Classic Load Balancers and target groups to attach to a
    # Spot Fleet request.
    #
    # @!attribute [rw] classic_load_balancers_config
    #   The Classic Load Balancers.
    #   @return [Types::ClassicLoadBalancersConfig]
    #
    # @!attribute [rw] target_groups_config
    #   The target groups.
    #   @return [Types::TargetGroupsConfig]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LoadBalancersConfig AWS API Documentation
    #
    class LoadBalancersConfig < Struct.new(
      :classic_load_balancers_config,
      :target_groups_config)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a load permission.
    #
    # @!attribute [rw] user_id
    #   The Amazon Web Services account ID.
    #   @return [String]
    #
    # @!attribute [rw] group
    #   The name of the group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LoadPermission AWS API Documentation
    #
    class LoadPermission < Struct.new(
      :user_id,
      :group)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes modifications to the load permissions of an Amazon FPGA
    # image (AFI).
    #
    # @!attribute [rw] add
    #   The load permissions to add.
    #   @return [Array<Types::LoadPermissionRequest>]
    #
    # @!attribute [rw] remove
    #   The load permissions to remove.
    #   @return [Array<Types::LoadPermissionRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LoadPermissionModifications AWS API Documentation
    #
    class LoadPermissionModifications < Struct.new(
      :add,
      :remove)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a load permission.
    #
    # @!attribute [rw] group
    #   The name of the group.
    #   @return [String]
    #
    # @!attribute [rw] user_id
    #   The Amazon Web Services account ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LoadPermissionRequest AWS API Documentation
    #
    class LoadPermissionRequest < Struct.new(
      :group,
      :user_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a local gateway.
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the local
    #   gateway.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the local gateway.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LocalGateway AWS API Documentation
    #
    class LocalGateway < Struct.new(
      :local_gateway_id,
      :outpost_arn,
      :owner_id,
      :state,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route for a local gateway route table.
    #
    # @!attribute [rw] destination_cidr_block
    #   The CIDR block used for destination matches.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_virtual_interface_group_id
    #   The ID of the virtual interface group.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The route type.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the route.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_arn
    #   The Amazon Resource Name (ARN) of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the local
    #   gateway route.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] coip_pool_id
    #   The ID of the customer-owned address pool.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] destination_prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LocalGatewayRoute AWS API Documentation
    #
    class LocalGatewayRoute < Struct.new(
      :destination_cidr_block,
      :local_gateway_virtual_interface_group_id,
      :type,
      :state,
      :local_gateway_route_table_id,
      :local_gateway_route_table_arn,
      :owner_id,
      :subnet_id,
      :coip_pool_id,
      :network_interface_id,
      :destination_prefix_list_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a local gateway route table.
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_arn
    #   The Amazon Resource Name (ARN) of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the local
    #   gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the local gateway route table.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] mode
    #   The mode of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] state_reason
    #   Information about the state change.
    #   @return [Types::StateReason]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LocalGatewayRouteTable AWS API Documentation
    #
    class LocalGatewayRouteTable < Struct.new(
      :local_gateway_route_table_id,
      :local_gateway_route_table_arn,
      :local_gateway_id,
      :outpost_arn,
      :owner_id,
      :state,
      :tags,
      :mode,
      :state_reason)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an association between a local gateway route table and a
    # virtual interface group.
    #
    # @!attribute [rw] local_gateway_route_table_virtual_interface_group_association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_virtual_interface_group_id
    #   The ID of the virtual interface group.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_arn
    #   The Amazon Resource Name (ARN) of the local gateway route table for
    #   the virtual interface group.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the local
    #   gateway virtual interface group association.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the association.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the association.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LocalGatewayRouteTableVirtualInterfaceGroupAssociation AWS API Documentation
    #
    class LocalGatewayRouteTableVirtualInterfaceGroupAssociation < Struct.new(
      :local_gateway_route_table_virtual_interface_group_association_id,
      :local_gateway_virtual_interface_group_id,
      :local_gateway_id,
      :local_gateway_route_table_id,
      :local_gateway_route_table_arn,
      :owner_id,
      :state,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an association between a local gateway route table and a
    # VPC.
    #
    # @!attribute [rw] local_gateway_route_table_vpc_association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_arn
    #   The Amazon Resource Name (ARN) of the local gateway route table for
    #   the association.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the local
    #   gateway route table for the association.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the association.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the association.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LocalGatewayRouteTableVpcAssociation AWS API Documentation
    #
    class LocalGatewayRouteTableVpcAssociation < Struct.new(
      :local_gateway_route_table_vpc_association_id,
      :local_gateway_route_table_id,
      :local_gateway_route_table_arn,
      :local_gateway_id,
      :vpc_id,
      :owner_id,
      :state,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a local gateway virtual interface.
    #
    # @!attribute [rw] local_gateway_virtual_interface_id
    #   The ID of the virtual interface.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_virtual_interface_group_id
    #   The ID of the local gateway virtual interface group.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_virtual_interface_arn
    #   The Amazon Resource Number (ARN) of the local gateway virtual
    #   interface.
    #   @return [String]
    #
    # @!attribute [rw] outpost_lag_id
    #   The Outpost LAG ID.
    #   @return [String]
    #
    # @!attribute [rw] vlan
    #   The ID of the VLAN.
    #   @return [Integer]
    #
    # @!attribute [rw] local_address
    #   The local address.
    #   @return [String]
    #
    # @!attribute [rw] peer_address
    #   The peer address.
    #   @return [String]
    #
    # @!attribute [rw] local_bgp_asn
    #   The Border Gateway Protocol (BGP) Autonomous System Number (ASN) of
    #   the local gateway.
    #   @return [Integer]
    #
    # @!attribute [rw] peer_bgp_asn
    #   The peer BGP ASN.
    #   @return [Integer]
    #
    # @!attribute [rw] peer_bgp_asn_extended
    #   The extended 32-bit ASN of the BGP peer for use with larger ASN
    #   values.
    #   @return [Integer]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the local
    #   gateway virtual interface.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the virtual interface.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] configuration_state
    #   The current state of the local gateway virtual interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LocalGatewayVirtualInterface AWS API Documentation
    #
    class LocalGatewayVirtualInterface < Struct.new(
      :local_gateway_virtual_interface_id,
      :local_gateway_id,
      :local_gateway_virtual_interface_group_id,
      :local_gateway_virtual_interface_arn,
      :outpost_lag_id,
      :vlan,
      :local_address,
      :peer_address,
      :local_bgp_asn,
      :peer_bgp_asn,
      :peer_bgp_asn_extended,
      :owner_id,
      :tags,
      :configuration_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a local gateway virtual interface group.
    #
    # @!attribute [rw] local_gateway_virtual_interface_group_id
    #   The ID of the virtual interface group.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_virtual_interface_ids
    #   The IDs of the virtual interfaces.
    #   @return [Array<String>]
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the local
    #   gateway virtual interface group.
    #   @return [String]
    #
    # @!attribute [rw] local_bgp_asn
    #   The Autonomous System Number(ASN) for the local Border Gateway
    #   Protocol (BGP).
    #   @return [Integer]
    #
    # @!attribute [rw] local_bgp_asn_extended
    #   The extended 32-bit ASN for the local BGP configuration.
    #   @return [Integer]
    #
    # @!attribute [rw] local_gateway_virtual_interface_group_arn
    #   The Amazon Resource Number (ARN) of the local gateway virtual
    #   interface group.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the virtual interface group.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] configuration_state
    #   The current state of the local gateway virtual interface group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LocalGatewayVirtualInterfaceGroup AWS API Documentation
    #
    class LocalGatewayVirtualInterfaceGroup < Struct.new(
      :local_gateway_virtual_interface_group_id,
      :local_gateway_virtual_interface_ids,
      :local_gateway_id,
      :owner_id,
      :local_bgp_asn,
      :local_bgp_asn_extended,
      :local_gateway_virtual_interface_group_arn,
      :tags,
      :configuration_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot to lock.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] lock_mode
    #   The mode in which to lock the snapshot. Specify one of the
    #   following:
    #
    #   * `governance` - Locks the snapshot in governance mode. Snapshots
    #     locked in governance mode can't be deleted until one of the
    #     following conditions are met:
    #
    #     * The lock duration expires.
    #
    #     * The snapshot is unlocked by a user with the appropriate
    #       permissions.
    #     Users with the appropriate IAM permissions can unlock the
    #     snapshot, increase or decrease the lock duration, and change the
    #     lock mode to `compliance` at any time.
    #
    #     If you lock a snapshot in `governance` mode, omit <b>
    #     CoolOffPeriod</b>.
    #
    #   * `compliance` - Locks the snapshot in compliance mode. Snapshots
    #     locked in compliance mode can't be unlocked by any user. They can
    #     be deleted only after the lock duration expires. Users can't
    #     decrease the lock duration or change the lock mode to
    #     `governance`. However, users with appropriate IAM permissions can
    #     increase the lock duration at any time.
    #
    #     If you lock a snapshot in `compliance` mode, you can optionally
    #     specify **CoolOffPeriod**.
    #   @return [String]
    #
    # @!attribute [rw] cool_off_period
    #   The cooling-off period during which you can unlock the snapshot or
    #   modify the lock settings after locking the snapshot in compliance
    #   mode, in hours. After the cooling-off period expires, you can't
    #   unlock or delete the snapshot, decrease the lock duration, or change
    #   the lock mode. You can increase the lock duration after the
    #   cooling-off period expires.
    #
    #   The cooling-off period is optional when locking a snapshot in
    #   compliance mode. If you are locking the snapshot in governance mode,
    #   omit this parameter.
    #
    #   To lock the snapshot in compliance mode immediately without a
    #   cooling-off period, omit this parameter.
    #
    #   If you are extending the lock duration for a snapshot that is locked
    #   in compliance mode after the cooling-off period has expired, omit
    #   this parameter. If you specify a cooling-period in a such a request,
    #   the request fails.
    #
    #   Allowed values: Min 1, max 72.
    #   @return [Integer]
    #
    # @!attribute [rw] lock_duration
    #   The period of time for which to lock the snapshot, in days. The
    #   snapshot lock will automatically expire after this period lapses.
    #
    #   You must specify either this parameter or **ExpirationDate**, but
    #   not both.
    #
    #   Allowed values: Min: 1, max 36500
    #   @return [Integer]
    #
    # @!attribute [rw] expiration_date
    #   The date and time at which the snapshot lock is to automatically
    #   expire, in the UTC time zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #
    #   You must specify either this parameter or **LockDuration**, but not
    #   both.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LockSnapshotRequest AWS API Documentation
    #
    class LockSnapshotRequest < Struct.new(
      :snapshot_id,
      :dry_run,
      :lock_mode,
      :cool_off_period,
      :lock_duration,
      :expiration_date)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot
    #   @return [String]
    #
    # @!attribute [rw] lock_state
    #   The state of the snapshot lock. Valid states include:
    #
    #   * `compliance-cooloff` - The snapshot has been locked in compliance
    #     mode but it is still within the cooling-off period. The snapshot
    #     can't be deleted, but it can be unlocked and the lock settings
    #     can be modified by users with appropriate permissions.
    #
    #   * `governance` - The snapshot is locked in governance mode. The
    #     snapshot can't be deleted, but it can be unlocked and the lock
    #     settings can be modified by users with appropriate permissions.
    #
    #   * `compliance` - The snapshot is locked in compliance mode and the
    #     cooling-off period has expired. The snapshot can't be unlocked or
    #     deleted. The lock duration can only be increased by users with
    #     appropriate permissions.
    #
    #   * `expired` - The snapshot was locked in compliance or governance
    #     mode but the lock duration has expired. The snapshot is not locked
    #     and can be deleted.
    #   @return [String]
    #
    # @!attribute [rw] lock_duration
    #   The period of time for which the snapshot is locked, in days.
    #   @return [Integer]
    #
    # @!attribute [rw] cool_off_period
    #   The compliance mode cooling-off period, in hours.
    #   @return [Integer]
    #
    # @!attribute [rw] cool_off_period_expires_on
    #   The date and time at which the compliance mode cooling-off period
    #   expires, in the UTC time zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #   @return [Time]
    #
    # @!attribute [rw] lock_created_on
    #   The date and time at which the snapshot was locked, in the UTC time
    #   zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #   @return [Time]
    #
    # @!attribute [rw] lock_expires_on
    #   The date and time at which the lock will expire, in the UTC time
    #   zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #   @return [Time]
    #
    # @!attribute [rw] lock_duration_start_time
    #   The date and time at which the lock duration started, in the UTC
    #   time zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LockSnapshotResult AWS API Documentation
    #
    class LockSnapshotResult < Struct.new(
      :snapshot_id,
      :lock_state,
      :lock_duration,
      :cool_off_period,
      :cool_off_period_expires_on,
      :lock_created_on,
      :lock_expires_on,
      :lock_duration_start_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a locked snapshot.
    #
    # @!attribute [rw] owner_id
    #   The account ID of the Amazon Web Services account that owns the
    #   snapshot.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] lock_state
    #   The state of the snapshot lock. Valid states include:
    #
    #   * `compliance-cooloff` - The snapshot has been locked in compliance
    #     mode but it is still within the cooling-off period. The snapshot
    #     can't be deleted, but it can be unlocked and the lock settings
    #     can be modified by users with appropriate permissions.
    #
    #   * `governance` - The snapshot is locked in governance mode. The
    #     snapshot can't be deleted, but it can be unlocked and the lock
    #     settings can be modified by users with appropriate permissions.
    #
    #   * `compliance` - The snapshot is locked in compliance mode and the
    #     cooling-off period has expired. The snapshot can't be unlocked or
    #     deleted. The lock duration can only be increased by users with
    #     appropriate permissions.
    #
    #   * `expired` - The snapshot was locked in compliance or governance
    #     mode but the lock duration has expired. The snapshot is not locked
    #     and can be deleted.
    #   @return [String]
    #
    # @!attribute [rw] lock_duration
    #   The period of time for which the snapshot is locked, in days.
    #   @return [Integer]
    #
    # @!attribute [rw] cool_off_period
    #   The compliance mode cooling-off period, in hours.
    #   @return [Integer]
    #
    # @!attribute [rw] cool_off_period_expires_on
    #   The date and time at which the compliance mode cooling-off period
    #   expires, in the UTC time zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #   @return [Time]
    #
    # @!attribute [rw] lock_created_on
    #   The date and time at which the snapshot was locked, in the UTC time
    #   zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #   @return [Time]
    #
    # @!attribute [rw] lock_duration_start_time
    #   The date and time at which the lock duration started, in the UTC
    #   time zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #
    #   If you lock a snapshot that is in the `pending` state, the lock
    #   duration starts only once the snapshot enters the `completed` state.
    #   @return [Time]
    #
    # @!attribute [rw] lock_expires_on
    #   The date and time at which the lock will expire, in the UTC time
    #   zone (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/LockedSnapshotsInfo AWS API Documentation
    #
    class LockedSnapshotsInfo < Struct.new(
      :owner_id,
      :snapshot_id,
      :lock_state,
      :lock_duration,
      :cool_off_period,
      :cool_off_period_expires_on,
      :lock_created_on,
      :lock_duration_start_time,
      :lock_expires_on)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the EC2 Mac Dedicated Host.
    #
    # @!attribute [rw] host_id
    #   The EC2 Mac Dedicated Host ID.
    #   @return [String]
    #
    # @!attribute [rw] mac_os_latest_supported_versions
    #   The latest macOS versions that the EC2 Mac Dedicated Host can launch
    #   without being upgraded.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MacHost AWS API Documentation
    #
    class MacHost < Struct.new(
      :host_id,
      :mac_os_latest_supported_versions)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a System Integrity Protection (SIP) modification
    # task or volume ownership delegation task for an Amazon EC2 Mac
    # instance.
    #
    # @!attribute [rw] instance_id
    #   The ID of the Amazon EC2 Mac instance.
    #   @return [String]
    #
    # @!attribute [rw] mac_modification_task_id
    #   The ID of task.
    #   @return [String]
    #
    # @!attribute [rw] mac_system_integrity_protection_config
    #   \[SIP modification tasks only\] Information about the SIP
    #   configuration.
    #   @return [Types::MacSystemIntegrityProtectionConfiguration]
    #
    # @!attribute [rw] start_time
    #   The date and time the task was created, in the UTC timezone
    #   (`YYYY-MM-DDThh:mm:ss.sssZ`).
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the task.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] task_state
    #   The state of the task.
    #   @return [String]
    #
    # @!attribute [rw] task_type
    #   The type of task.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MacModificationTask AWS API Documentation
    #
    class MacModificationTask < Struct.new(
      :instance_id,
      :mac_modification_task_id,
      :mac_system_integrity_protection_config,
      :start_time,
      :tags,
      :task_state,
      :task_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration for a System Integrity Protection (SIP)
    # modification task.
    #
    # @!attribute [rw] apple_internal
    #   Indicates whether Apple Internal was enabled or disabled by the
    #   task.
    #   @return [String]
    #
    # @!attribute [rw] base_system
    #   Indicates whether Base System was enabled or disabled by the task.
    #   @return [String]
    #
    # @!attribute [rw] debugging_restrictions
    #   Indicates whether Debugging Restrictions was enabled or disabled by
    #   the task.
    #   @return [String]
    #
    # @!attribute [rw] d_trace_restrictions
    #   Indicates whether Dtrace Restrictions was enabled or disabled by the
    #   task.
    #   @return [String]
    #
    # @!attribute [rw] filesystem_protections
    #   Indicates whether Filesystem Protections was enabled or disabled by
    #   the task.
    #   @return [String]
    #
    # @!attribute [rw] kext_signing
    #   Indicates whether Kext Signing was enabled or disabled by the task.
    #   @return [String]
    #
    # @!attribute [rw] nvram_protections
    #   Indicates whether NVRAM Protections was enabled or disabled by the
    #   task.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   Indicates SIP was enabled or disabled by the task.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MacSystemIntegrityProtectionConfiguration AWS API Documentation
    #
    class MacSystemIntegrityProtectionConfiguration < Struct.new(
      :apple_internal,
      :base_system,
      :debugging_restrictions,
      :d_trace_restrictions,
      :filesystem_protections,
      :kext_signing,
      :nvram_protections,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a custom configuration for a System Integrity Protection
    # (SIP) modification task.
    #
    # @!attribute [rw] apple_internal
    #   Enables or disables Apple Internal.
    #   @return [String]
    #
    # @!attribute [rw] base_system
    #   Enables or disables Base System.
    #   @return [String]
    #
    # @!attribute [rw] debugging_restrictions
    #   Enables or disables Debugging Restrictions.
    #   @return [String]
    #
    # @!attribute [rw] d_trace_restrictions
    #   Enables or disables Dtrace Restrictions.
    #   @return [String]
    #
    # @!attribute [rw] filesystem_protections
    #   Enables or disables Filesystem Protections.
    #   @return [String]
    #
    # @!attribute [rw] kext_signing
    #   Enables or disables Kext Signing.
    #   @return [String]
    #
    # @!attribute [rw] nvram_protections
    #   Enables or disables Nvram Protections.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MacSystemIntegrityProtectionConfigurationRequest AWS API Documentation
    #
    class MacSystemIntegrityProtectionConfigurationRequest < Struct.new(
      :apple_internal,
      :base_system,
      :debugging_restrictions,
      :d_trace_restrictions,
      :filesystem_protections,
      :kext_signing,
      :nvram_protections)
      SENSITIVE = []
      include Aws::Structure
    end

    # Details for Site-to-Site VPN tunnel endpoint maintenance events.
    #
    # @!attribute [rw] pending_maintenance
    #   Verify existence of a pending maintenance.
    #   @return [String]
    #
    # @!attribute [rw] maintenance_auto_applied_after
    #   The timestamp after which Amazon Web Services will automatically
    #   apply maintenance.
    #   @return [Time]
    #
    # @!attribute [rw] last_maintenance_applied
    #   Timestamp of last applied maintenance.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MaintenanceDetails AWS API Documentation
    #
    class MaintenanceDetails < Struct.new(
      :pending_maintenance,
      :maintenance_auto_applied_after,
      :last_maintenance_applied)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a managed prefix list.
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] address_family
    #   The IP address version.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] state_message
    #   The state message.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_arn
    #   The Amazon Resource Name (ARN) for the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_name
    #   The name of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] max_entries
    #   The maximum number of entries for the prefix list.
    #   @return [Integer]
    #
    # @!attribute [rw] version
    #   The version of the prefix list.
    #   @return [Integer]
    #
    # @!attribute [rw] tags
    #   The tags for the prefix list.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] owner_id
    #   The ID of the owner of the prefix list.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ManagedPrefixList AWS API Documentation
    #
    class ManagedPrefixList < Struct.new(
      :prefix_list_id,
      :address_family,
      :state,
      :state_message,
      :prefix_list_arn,
      :prefix_list_name,
      :max_entries,
      :version,
      :tags,
      :owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the media accelerators for the instance type.
    #
    # @!attribute [rw] accelerators
    #   Describes the media accelerators for the instance type.
    #   @return [Array<Types::MediaDeviceInfo>]
    #
    # @!attribute [rw] total_media_memory_in_mi_b
    #   The total size of the memory for the media accelerators for the
    #   instance type, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MediaAcceleratorInfo AWS API Documentation
    #
    class MediaAcceleratorInfo < Struct.new(
      :accelerators,
      :total_media_memory_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the media accelerators for the instance type.
    #
    # @!attribute [rw] count
    #   The number of media accelerators for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] name
    #   The name of the media accelerator.
    #   @return [String]
    #
    # @!attribute [rw] manufacturer
    #   The manufacturer of the media accelerator.
    #   @return [String]
    #
    # @!attribute [rw] memory_info
    #   Describes the memory available to the media accelerator.
    #   @return [Types::MediaDeviceMemoryInfo]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MediaDeviceInfo AWS API Documentation
    #
    class MediaDeviceInfo < Struct.new(
      :count,
      :name,
      :manufacturer,
      :memory_info)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the memory available to the media accelerator.
    #
    # @!attribute [rw] size_in_mi_b
    #   The size of the memory available to each media accelerator, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MediaDeviceMemoryInfo AWS API Documentation
    #
    class MediaDeviceMemoryInfo < Struct.new(
      :size_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of memory per vCPU, in GiB.
    #
    # @!attribute [rw] min
    #   The minimum amount of memory per vCPU, in GiB. If this parameter is
    #   not specified, there is no minimum limit.
    #   @return [Float]
    #
    # @!attribute [rw] max
    #   The maximum amount of memory per vCPU, in GiB. If this parameter is
    #   not specified, there is no maximum limit.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MemoryGiBPerVCpu AWS API Documentation
    #
    class MemoryGiBPerVCpu < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of memory per vCPU, in GiB.
    #
    # @!attribute [rw] min
    #   The minimum amount of memory per vCPU, in GiB. To specify no minimum
    #   limit, omit this parameter.
    #   @return [Float]
    #
    # @!attribute [rw] max
    #   The maximum amount of memory per vCPU, in GiB. To specify no maximum
    #   limit, omit this parameter.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MemoryGiBPerVCpuRequest AWS API Documentation
    #
    class MemoryGiBPerVCpuRequest < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the memory for the instance type.
    #
    # @!attribute [rw] size_in_mi_b
    #   The size of the memory, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MemoryInfo AWS API Documentation
    #
    class MemoryInfo < Struct.new(
      :size_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of memory, in MiB.
    #
    # @!attribute [rw] min
    #   The minimum amount of memory, in MiB. If this parameter is not
    #   specified, there is no minimum limit.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum amount of memory, in MiB. If this parameter is not
    #   specified, there is no maximum limit.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MemoryMiB AWS API Documentation
    #
    class MemoryMiB < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of memory, in MiB.
    #
    # @!attribute [rw] min
    #   The minimum amount of memory, in MiB. To specify no minimum limit,
    #   specify `0`.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum amount of memory, in MiB. To specify no maximum limit,
    #   omit this parameter.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MemoryMiBRequest AWS API Documentation
    #
    class MemoryMiBRequest < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # Indicates whether the network was healthy or degraded at a particular
    # point. The value is aggregated from the `startDate` to the `endDate`.
    # Currently only `five_minutes` is supported.
    #
    # @!attribute [rw] start_date
    #   The start date for the metric point. The starting date for the
    #   metric point. The starting time must be formatted as
    #   `yyyy-mm-ddThh:mm:ss`. For example, `2022-06-10T12:00:00.000Z`.
    #   @return [Time]
    #
    # @!attribute [rw] end_date
    #   The end date for the metric point. The ending time must be formatted
    #   as `yyyy-mm-ddThh:mm:ss`. For example, `2022-06-12T12:00:00.000Z`.
    #   @return [Time]
    #
    # @!attribute [rw] value
    #   @return [Float]
    #
    # @!attribute [rw] status
    #   The status of the metric point.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MetricPoint AWS API Documentation
    #
    class MetricPoint < Struct.new(
      :start_date,
      :end_date,
      :value,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_id
    #   \[EC2-VPC\] The allocation ID.
    #   @return [String]
    #
    # @!attribute [rw] domain_name
    #   The domain name to modify for the IP address.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyAddressAttributeRequest AWS API Documentation
    #
    class ModifyAddressAttributeRequest < Struct.new(
      :allocation_id,
      :domain_name,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] address
    #   Information about the Elastic IP address.
    #   @return [Types::AddressAttribute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyAddressAttributeResult AWS API Documentation
    #
    class ModifyAddressAttributeResult < Struct.new(
      :address)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] group_name
    #   The name of the Availability Zone group, Local Zone group, or
    #   Wavelength Zone group.
    #   @return [String]
    #
    # @!attribute [rw] opt_in_status
    #   Indicates whether to opt in to the zone group. The only valid value
    #   is `opted-in`. You must contact Amazon Web Services Support to opt
    #   out of a Local Zone or Wavelength Zone group.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyAvailabilityZoneGroupRequest AWS API Documentation
    #
    class ModifyAvailabilityZoneGroupRequest < Struct.new(
      :group_name,
      :opt_in_status,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Is `true` if the request succeeds, and an error otherwise.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyAvailabilityZoneGroupResult AWS API Documentation
    #
    class ModifyAvailabilityZoneGroupResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_fleet_id
    #   The ID of the Capacity Reservation Fleet to modify.
    #   @return [String]
    #
    # @!attribute [rw] total_target_capacity
    #   The total number of capacity units to be reserved by the Capacity
    #   Reservation Fleet. This value, together with the instance type
    #   weights that you assign to each instance type used by the Fleet
    #   determine the number of instances for which the Fleet reserves
    #   capacity. Both values are based on units that make sense for your
    #   workload. For more information, see [Total target capacity][1] in
    #   the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity
    #   @return [Integer]
    #
    # @!attribute [rw] end_date
    #   The date and time at which the Capacity Reservation Fleet expires.
    #   When the Capacity Reservation Fleet expires, its state changes to
    #   `expired` and all of the Capacity Reservations in the Fleet expire.
    #
    #   The Capacity Reservation Fleet expires within an hour after the
    #   specified time. For example, if you specify `5/31/2019`, `13:30:55`,
    #   the Capacity Reservation Fleet is guaranteed to expire between
    #   `13:30:55` and `14:30:55` on `5/31/2019`.
    #
    #   You can't specify **EndDate** and <b> RemoveEndDate</b> in the same
    #   request.
    #   @return [Time]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] remove_end_date
    #   Indicates whether to remove the end date from the Capacity
    #   Reservation Fleet. If you remove the end date, the Capacity
    #   Reservation Fleet does not expire and it remains active until you
    #   explicitly cancel it using the **CancelCapacityReservationFleet**
    #   action.
    #
    #   You can't specify **RemoveEndDate** and <b> EndDate</b> in the same
    #   request.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyCapacityReservationFleetRequest AWS API Documentation
    #
    class ModifyCapacityReservationFleetRequest < Struct.new(
      :capacity_reservation_fleet_id,
      :total_target_capacity,
      :end_date,
      :dry_run,
      :remove_end_date)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyCapacityReservationFleetResult AWS API Documentation
    #
    class ModifyCapacityReservationFleetResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances for which to reserve capacity. The number of
    #   instances can't be increased or decreased by more than `1000` in a
    #   single request.
    #   @return [Integer]
    #
    # @!attribute [rw] end_date
    #   The date and time at which the Capacity Reservation expires. When a
    #   Capacity Reservation expires, the reserved capacity is released and
    #   you can no longer launch instances into it. The Capacity
    #   Reservation's state changes to `expired` when it reaches its end
    #   date and time.
    #
    #   The Capacity Reservation is cancelled within an hour from the
    #   specified time. For example, if you specify 5/31/2019, 13:30:55, the
    #   Capacity Reservation is guaranteed to end between 13:30:55 and
    #   14:30:55 on 5/31/2019.
    #
    #   You must provide an `EndDate` value if `EndDateType` is `limited`.
    #   Omit `EndDate` if `EndDateType` is `unlimited`.
    #   @return [Time]
    #
    # @!attribute [rw] end_date_type
    #   Indicates the way in which the Capacity Reservation ends. A Capacity
    #   Reservation can have one of the following end types:
    #
    #   * `unlimited` - The Capacity Reservation remains active until you
    #     explicitly cancel it. Do not provide an `EndDate` value if
    #     `EndDateType` is `unlimited`.
    #
    #   * `limited` - The Capacity Reservation expires automatically at a
    #     specified date and time. You must provide an `EndDate` value if
    #     `EndDateType` is `limited`.
    #   @return [String]
    #
    # @!attribute [rw] accept
    #   Reserved. Capacity Reservations you have created are accepted by
    #   default.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] additional_info
    #   Reserved for future use.
    #   @return [String]
    #
    # @!attribute [rw] instance_match_criteria
    #   The matching criteria (instance eligibility) that you want to use in
    #   the modified Capacity Reservation. If you change the instance
    #   eligibility of an existing Capacity Reservation from `targeted` to
    #   `open`, any running instances that match the attributes of the
    #   Capacity Reservation, have the `CapacityReservationPreference` set
    #   to `open`, and are not yet running in the Capacity Reservation, will
    #   automatically use the modified Capacity Reservation.
    #
    #   To modify the instance eligibility, the Capacity Reservation must be
    #   completely idle (zero usage).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyCapacityReservationRequest AWS API Documentation
    #
    class ModifyCapacityReservationRequest < Struct.new(
      :capacity_reservation_id,
      :instance_count,
      :end_date,
      :end_date_type,
      :accept,
      :dry_run,
      :additional_info,
      :instance_match_criteria)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyCapacityReservationResult AWS API Documentation
    #
    class ModifyCapacityReservationResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint to modify.
    #   @return [String]
    #
    # @!attribute [rw] server_certificate_arn
    #   The ARN of the server certificate to be used. The server certificate
    #   must be provisioned in Certificate Manager (ACM).
    #   @return [String]
    #
    # @!attribute [rw] connection_log_options
    #   Information about the client connection logging options.
    #
    #   If you enable client connection logging, data about client
    #   connections is sent to a Cloudwatch Logs log stream. The following
    #   information is logged:
    #
    #   * Client connection requests
    #
    #   * Client connection results (successful and unsuccessful)
    #
    #   * Reasons for unsuccessful client connection requests
    #
    #   * Client connection termination time
    #   @return [Types::ConnectionLogOptions]
    #
    # @!attribute [rw] dns_servers
    #   Information about the DNS servers to be used by Client VPN
    #   connections. A Client VPN endpoint can have up to two DNS servers.
    #   @return [Types::DnsServersOptionsModifyStructure]
    #
    # @!attribute [rw] vpn_port
    #   The port number to assign to the Client VPN endpoint for TCP and UDP
    #   traffic.
    #
    #   Valid Values: `443` \| `1194`
    #
    #   Default Value: `443`
    #   @return [Integer]
    #
    # @!attribute [rw] description
    #   A brief description of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] split_tunnel
    #   Indicates whether the VPN is split-tunnel.
    #
    #   For information about split-tunnel VPN endpoints, see [Split-tunnel
    #   Client VPN endpoint][1] in the *Client VPN Administrator Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of one or more security groups to apply to the target
    #   network.
    #   @return [Array<String>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC to associate with the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] self_service_portal
    #   Specify whether to enable the self-service portal for the Client VPN
    #   endpoint.
    #   @return [String]
    #
    # @!attribute [rw] client_connect_options
    #   The options for managing connection authorization for new client
    #   connections.
    #   @return [Types::ClientConnectOptions]
    #
    # @!attribute [rw] session_timeout_hours
    #   The maximum VPN session duration time in hours.
    #
    #   Valid values: `8 | 10 | 12 | 24`
    #
    #   Default value: `24`
    #   @return [Integer]
    #
    # @!attribute [rw] client_login_banner_options
    #   Options for enabling a customizable text banner that will be
    #   displayed on Amazon Web Services provided clients when a VPN session
    #   is established.
    #   @return [Types::ClientLoginBannerOptions]
    #
    # @!attribute [rw] client_route_enforcement_options
    #   Client route enforcement is a feature of the Client VPN service that
    #   helps enforce administrator defined routes on devices connected
    #   through the VPN. T his feature helps improve your security posture
    #   by ensuring that network traffic originating from a connected client
    #   is not inadvertently sent outside the VPN tunnel.
    #
    #   Client route enforcement works by monitoring the route table of a
    #   connected device for routing policy changes to the VPN connection.
    #   If the feature detects any VPN routing policy modifications, it will
    #   automatically force an update to the route table, reverting it back
    #   to the expected route configurations.
    #   @return [Types::ClientRouteEnforcementOptions]
    #
    # @!attribute [rw] disconnect_on_session_timeout
    #   Indicates whether the client VPN session is disconnected after the
    #   maximum timeout specified in `sessionTimeoutHours` is reached. If
    #   `true`, users are prompted to reconnect client VPN. If `false`,
    #   client VPN attempts to reconnect automatically. The default value is
    #   `true`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyClientVpnEndpointRequest AWS API Documentation
    #
    class ModifyClientVpnEndpointRequest < Struct.new(
      :client_vpn_endpoint_id,
      :server_certificate_arn,
      :connection_log_options,
      :dns_servers,
      :vpn_port,
      :description,
      :split_tunnel,
      :dry_run,
      :security_group_ids,
      :vpc_id,
      :self_service_portal,
      :client_connect_options,
      :session_timeout_hours,
      :client_login_banner_options,
      :client_route_enforcement_options,
      :disconnect_on_session_timeout)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyClientVpnEndpointResult AWS API Documentation
    #
    class ModifyClientVpnEndpointResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_family
    #   The instance family.
    #   @return [String]
    #
    # @!attribute [rw] cpu_credits
    #   The credit option for CPU usage of the instance family.
    #
    #   Valid Values: `standard` \| `unlimited`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyDefaultCreditSpecificationRequest AWS API Documentation
    #
    class ModifyDefaultCreditSpecificationRequest < Struct.new(
      :dry_run,
      :instance_family,
      :cpu_credits)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_family_credit_specification
    #   The default credit option for CPU usage of the instance family.
    #   @return [Types::InstanceFamilyCreditSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyDefaultCreditSpecificationResult AWS API Documentation
    #
    class ModifyDefaultCreditSpecificationResult < Struct.new(
      :instance_family_credit_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] kms_key_id
    #   The identifier of the KMS key to use for Amazon EBS encryption. If
    #   this parameter is not specified, your KMS key for Amazon EBS is
    #   used. If `KmsKeyId` is specified, the encrypted state must be
    #   `true`.
    #
    #   You can specify the KMS key using any of the following:
    #
    #   * Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
    #
    #   * Key alias. For example, alias/ExampleAlias.
    #
    #   * Key ARN. For example,
    #     arn:aws:kms:us-east-1:012345678910:key/1234abcd-12ab-34cd-56ef-1234567890ab.
    #
    #   * Alias ARN. For example,
    #     arn:aws:kms:us-east-1:012345678910:alias/ExampleAlias.
    #
    #   Amazon Web Services authenticates the KMS key asynchronously.
    #   Therefore, if you specify an ID, alias, or ARN that is not valid,
    #   the action can appear to complete, but eventually fails.
    #
    #   Amazon EBS does not support asymmetric KMS keys.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyEbsDefaultKmsKeyIdRequest AWS API Documentation
    #
    class ModifyEbsDefaultKmsKeyIdRequest < Struct.new(
      :kms_key_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] kms_key_id
    #   The Amazon Resource Name (ARN) of the default KMS key for encryption
    #   by default.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyEbsDefaultKmsKeyIdResult AWS API Documentation
    #
    class ModifyEbsDefaultKmsKeyIdResult < Struct.new(
      :kms_key_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] excess_capacity_termination_policy
    #   Indicates whether running instances should be terminated if the
    #   total target capacity of the EC2 Fleet is decreased below the
    #   current size of the EC2 Fleet.
    #
    #   Supported only for fleets of type `maintain`.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_configs
    #   The launch template and overrides.
    #   @return [Array<Types::FleetLaunchTemplateConfigRequest>]
    #
    # @!attribute [rw] fleet_id
    #   The ID of the EC2 Fleet.
    #   @return [String]
    #
    # @!attribute [rw] target_capacity_specification
    #   The size of the EC2 Fleet.
    #   @return [Types::TargetCapacitySpecificationRequest]
    #
    # @!attribute [rw] context
    #   Reserved.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFleetRequest AWS API Documentation
    #
    class ModifyFleetRequest < Struct.new(
      :dry_run,
      :excess_capacity_termination_policy,
      :launch_template_configs,
      :fleet_id,
      :target_capacity_specification,
      :context)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   If the request succeeds, the response returns `true`. If the request
    #   fails, no response is returned, and instead an error message is
    #   returned.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFleetResult AWS API Documentation
    #
    class ModifyFleetResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] fpga_image_id
    #   The ID of the AFI.
    #   @return [String]
    #
    # @!attribute [rw] attribute
    #   The name of the attribute.
    #   @return [String]
    #
    # @!attribute [rw] operation_type
    #   The operation type.
    #   @return [String]
    #
    # @!attribute [rw] user_ids
    #   The Amazon Web Services account IDs. This parameter is valid only
    #   when modifying the `loadPermission` attribute.
    #   @return [Array<String>]
    #
    # @!attribute [rw] user_groups
    #   The user groups. This parameter is valid only when modifying the
    #   `loadPermission` attribute.
    #   @return [Array<String>]
    #
    # @!attribute [rw] product_codes
    #   The product codes. After you add a product code to an AFI, it can't
    #   be removed. This parameter is valid only when modifying the
    #   `productCodes` attribute.
    #   @return [Array<String>]
    #
    # @!attribute [rw] load_permission
    #   The load permission for the AFI.
    #   @return [Types::LoadPermissionModifications]
    #
    # @!attribute [rw] description
    #   A description for the AFI.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   A name for the AFI.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFpgaImageAttributeRequest AWS API Documentation
    #
    class ModifyFpgaImageAttributeRequest < Struct.new(
      :dry_run,
      :fpga_image_id,
      :attribute,
      :operation_type,
      :user_ids,
      :user_groups,
      :product_codes,
      :load_permission,
      :description,
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] fpga_image_attribute
    #   Information about the attribute.
    #   @return [Types::FpgaImageAttribute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyFpgaImageAttributeResult AWS API Documentation
    #
    class ModifyFpgaImageAttributeResult < Struct.new(
      :fpga_image_attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] host_recovery
    #   Indicates whether to enable or disable host recovery for the
    #   Dedicated Host. For more information, see [Host recovery][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   Specifies the instance type to be supported by the Dedicated Host.
    #   Specify this parameter to modify a Dedicated Host to support only a
    #   specific instance type.
    #
    #   If you want to modify a Dedicated Host to support multiple instance
    #   types in its current instance family, omit this parameter and
    #   specify **InstanceFamily** instead. You cannot specify
    #   **InstanceType** and **InstanceFamily** in the same request.
    #   @return [String]
    #
    # @!attribute [rw] instance_family
    #   Specifies the instance family to be supported by the Dedicated Host.
    #   Specify this parameter to modify a Dedicated Host to support
    #   multiple instance types within its current instance family.
    #
    #   If you want to modify a Dedicated Host to support a specific
    #   instance type only, omit this parameter and specify **InstanceType**
    #   instead. You cannot specify **InstanceFamily** and **InstanceType**
    #   in the same request.
    #   @return [String]
    #
    # @!attribute [rw] host_maintenance
    #   Indicates whether to enable or disable host maintenance for the
    #   Dedicated Host. For more information, see [Host maintenance][1] in
    #   the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-maintenance.html
    #   @return [String]
    #
    # @!attribute [rw] host_ids
    #   The IDs of the Dedicated Hosts to modify.
    #   @return [Array<String>]
    #
    # @!attribute [rw] auto_placement
    #   Specify whether to enable or disable auto-placement.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHostsRequest AWS API Documentation
    #
    class ModifyHostsRequest < Struct.new(
      :host_recovery,
      :instance_type,
      :instance_family,
      :host_maintenance,
      :host_ids,
      :auto_placement)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successful
    #   The IDs of the Dedicated Hosts that were successfully modified.
    #   @return [Array<String>]
    #
    # @!attribute [rw] unsuccessful
    #   The IDs of the Dedicated Hosts that could not be modified. Check
    #   whether the setting you requested can be used.
    #   @return [Array<Types::UnsuccessfulItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyHostsResult AWS API Documentation
    #
    class ModifyHostsResult < Struct.new(
      :successful,
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource
    #   The type of resource: `bundle` \| `conversion-task` \|
    #   `customer-gateway` \| `dhcp-options` \| `elastic-ip-allocation` \|
    #   `elastic-ip-association` \| `export-task` \| `flow-log` \| `image`
    #   \| `import-task` \| `internet-gateway` \| `network-acl` \|
    #   `network-acl-association` \| `network-interface` \|
    #   `network-interface-attachment` \| `prefix-list` \| `route-table` \|
    #   `route-table-association` \| `security-group` \| `subnet` \|
    #   `subnet-cidr-block-association` \| `vpc` \|
    #   `vpc-cidr-block-association` \| `vpc-endpoint` \|
    #   `vpc-peering-connection` \| `vpn-connection` \| `vpn-gateway`.
    #
    #   Alternatively, use the `all-current` option to include all resource
    #   types that are currently within their opt-in period for longer IDs.
    #   @return [String]
    #
    # @!attribute [rw] use_long_ids
    #   Indicate whether the resource should use longer IDs (17-character
    #   IDs).
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdFormatRequest AWS API Documentation
    #
    class ModifyIdFormatRequest < Struct.new(
      :resource,
      :use_long_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] resource
    #   The type of resource: `bundle` \| `conversion-task` \|
    #   `customer-gateway` \| `dhcp-options` \| `elastic-ip-allocation` \|
    #   `elastic-ip-association` \| `export-task` \| `flow-log` \| `image`
    #   \| `import-task` \| `internet-gateway` \| `network-acl` \|
    #   `network-acl-association` \| `network-interface` \|
    #   `network-interface-attachment` \| `prefix-list` \| `route-table` \|
    #   `route-table-association` \| `security-group` \| `subnet` \|
    #   `subnet-cidr-block-association` \| `vpc` \|
    #   `vpc-cidr-block-association` \| `vpc-endpoint` \|
    #   `vpc-peering-connection` \| `vpn-connection` \| `vpn-gateway`.
    #
    #   Alternatively, use the `all-current` option to include all resource
    #   types that are currently within their opt-in period for longer IDs.
    #   @return [String]
    #
    # @!attribute [rw] use_long_ids
    #   Indicates whether the resource should use longer IDs (17-character
    #   IDs)
    #   @return [Boolean]
    #
    # @!attribute [rw] principal_arn
    #   The ARN of the principal, which can be an IAM user, IAM role, or the
    #   root user. Specify `all` to modify the ID format for all IAM users,
    #   IAM roles, and the root user of the account.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIdentityIdFormatRequest AWS API Documentation
    #
    class ModifyIdentityIdFormatRequest < Struct.new(
      :resource,
      :use_long_ids,
      :principal_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for ModifyImageAttribute.
    #
    # @!attribute [rw] attribute
    #   The name of the attribute to modify.
    #
    #   Valid values: `description` \| `imdsSupport` \| `launchPermission`
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A new description for the AMI.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] launch_permission
    #   A new launch permission for the AMI.
    #   @return [Types::LaunchPermissionModifications]
    #
    # @!attribute [rw] operation_type
    #   The operation type. This parameter can be used only when the
    #   `Attribute` parameter is `launchPermission`.
    #   @return [String]
    #
    # @!attribute [rw] product_codes
    #   Not supported.
    #   @return [Array<String>]
    #
    # @!attribute [rw] user_groups
    #   The user groups. This parameter can be used only when the
    #   `Attribute` parameter is `launchPermission`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] user_ids
    #   The Amazon Web Services account IDs. This parameter can be used only
    #   when the `Attribute` parameter is `launchPermission`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] value
    #   The value of the attribute being modified. This parameter can be
    #   used only when the `Attribute` parameter is `description` or
    #   `imdsSupport`.
    #   @return [String]
    #
    # @!attribute [rw] organization_arns
    #   The Amazon Resource Name (ARN) of an organization. This parameter
    #   can be used only when the `Attribute` parameter is
    #   `launchPermission`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] organizational_unit_arns
    #   The Amazon Resource Name (ARN) of an organizational unit (OU). This
    #   parameter can be used only when the `Attribute` parameter is
    #   `launchPermission`.
    #   @return [Array<String>]
    #
    # @!attribute [rw] imds_support
    #   Set to `v2.0` to indicate that IMDSv2 is specified in the AMI.
    #   Instances launched from this AMI will have `HttpTokens`
    #   automatically set to `required` so that, by default, the instance
    #   requires that IMDSv2 is used when requesting instance metadata. In
    #   addition, `HttpPutResponseHopLimit` is set to `2`. For more
    #   information, see [Configure the AMI][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #   Do not use this parameter unless your AMI software supports IMDSv2.
    #   After you set the value to `v2.0`, you can't undo it. The only way
    #   to “reset” your AMI is to create a new AMI from the underlying
    #   snapshot.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyImageAttributeRequest AWS API Documentation
    #
    class ModifyImageAttributeRequest < Struct.new(
      :attribute,
      :description,
      :image_id,
      :launch_permission,
      :operation_type,
      :product_codes,
      :user_groups,
      :user_ids,
      :value,
      :organization_arns,
      :organizational_unit_arns,
      :imds_support,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] source_dest_check
    #   Enable or disable source/destination checks, which ensure that the
    #   instance is either the source or the destination of any traffic that
    #   it receives. If the value is `true`, source/destination checks are
    #   enabled; otherwise, they are disabled. The default value is `true`.
    #   You must disable source/destination checks if the instance runs
    #   services such as network address translation, routing, or firewalls.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] disable_api_stop
    #   Indicates whether an instance is enabled for stop protection. For
    #   more information, see [Enable stop protection for your instance][1].
    #
    #
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] attribute
    #   The name of the attribute to modify.
    #
    #   <note markdown="1"> When changing the instance type: If the original instance type is
    #   configured for configurable bandwidth, and the desired instance type
    #   doesn't support configurable bandwidth, first set the existing
    #   bandwidth configuration to `default` using the
    #   ModifyInstanceNetworkPerformanceOptions operation.
    #
    #    </note>
    #
    #   You can modify the following attributes only:
    #   `disableApiTermination` \| `instanceType` \| `kernel` \| `ramdisk`
    #   \| `instanceInitiatedShutdownBehavior` \| `blockDeviceMapping` \|
    #   `userData` \| `sourceDestCheck` \| `groupSet` \| `ebsOptimized` \|
    #   `sriovNetSupport` \| `enaSupport` \| `nvmeSupport` \|
    #   `disableApiStop` \| `enclaveOptions`
    #   @return [String]
    #
    # @!attribute [rw] value
    #   A new value for the attribute. Use only with the `kernel`,
    #   `ramdisk`, `userData`, `disableApiTermination`, or
    #   `instanceInitiatedShutdownBehavior` attribute.
    #   @return [String]
    #
    # @!attribute [rw] block_device_mappings
    #   Modifies the `DeleteOnTermination` attribute for volumes that are
    #   currently attached. The volume must be owned by the caller. If no
    #   value is specified for `DeleteOnTermination`, the default is `true`
    #   and the volume is deleted when the instance is terminated. You
    #   can't modify the `DeleteOnTermination` attribute for volumes that
    #   are attached to Amazon Web Services-managed resources.
    #
    #   To add instance store volumes to an Amazon EBS-backed instance, you
    #   must add them when you launch the instance. For more information,
    #   see [Update the block device mapping when launching an instance][1]
    #   in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM
    #   @return [Array<Types::InstanceBlockDeviceMappingSpecification>]
    #
    # @!attribute [rw] disable_api_termination
    #   Enable or disable termination protection for the instance. If the
    #   value is `true`, you can't terminate the instance using the Amazon
    #   EC2 console, command line interface, or API. You can't enable
    #   termination protection for Spot Instances.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] instance_type
    #   Changes the instance type to the specified value. For more
    #   information, see [Instance types][1] in the *Amazon EC2 User Guide*.
    #   If the instance type is not valid, the error returned is
    #   `InvalidInstanceAttributeValue`.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] kernel
    #   Changes the instance's kernel to the specified value. We recommend
    #   that you use PV-GRUB instead of kernels and RAM disks. For more
    #   information, see [PV-GRUB][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] ramdisk
    #   Changes the instance's RAM disk to the specified value. We
    #   recommend that you use PV-GRUB instead of kernels and RAM disks. For
    #   more information, see [PV-GRUB][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] user_data
    #   Changes the instance's user data to the specified value. User data
    #   must be base64-encoded. Depending on the tool or SDK that you're
    #   using, the base64-encoding might be performed for you. For more
    #   information, see [Work with instance user data][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-add-user-data.html
    #   @return [Types::BlobAttributeValue]
    #
    # @!attribute [rw] instance_initiated_shutdown_behavior
    #   Specifies whether an instance stops or terminates when you initiate
    #   shutdown from the instance (using the operating system command for
    #   system shutdown).
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] groups
    #   Replaces the security groups of the instance with the specified
    #   security groups. You must specify the ID of at least one security
    #   group, even if it's just the default security group for the VPC.
    #   @return [Array<String>]
    #
    # @!attribute [rw] ebs_optimized
    #   Specifies 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 EBS I/O
    #   performance. This optimization isn't available with all instance
    #   types. Additional usage charges apply when using an EBS Optimized
    #   instance.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] sriov_net_support
    #   Set to `simple` to enable enhanced networking with the Intel 82599
    #   Virtual Function interface for the instance.
    #
    #   There is no way to disable enhanced networking with the Intel 82599
    #   Virtual Function interface at this time.
    #
    #   This option is supported only for HVM instances. Specifying this
    #   option with a PV instance can make it unreachable.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] ena_support
    #   Set to `true` to enable enhanced networking with ENA for the
    #   instance.
    #
    #   This option is supported only for HVM instances. Specifying this
    #   option with a PV instance can make it unreachable.
    #   @return [Types::AttributeBooleanValue]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceAttributeRequest AWS API Documentation
    #
    class ModifyInstanceAttributeRequest < Struct.new(
      :source_dest_check,
      :disable_api_stop,
      :dry_run,
      :instance_id,
      :attribute,
      :value,
      :block_device_mappings,
      :disable_api_termination,
      :instance_type,
      :kernel,
      :ramdisk,
      :user_data,
      :instance_initiated_shutdown_behavior,
      :groups,
      :ebs_optimized,
      :sriov_net_support,
      :ena_support)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance to be modified.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_specification
    #   Information about the Capacity Reservation targeting option.
    #   @return [Types::CapacityReservationSpecification]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCapacityReservationAttributesRequest AWS API Documentation
    #
    class ModifyInstanceCapacityReservationAttributesRequest < Struct.new(
      :instance_id,
      :capacity_reservation_specification,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCapacityReservationAttributesResult AWS API Documentation
    #
    class ModifyInstanceCapacityReservationAttributesResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_connect_endpoint_id
    #   The ID of the EC2 Instance Connect Endpoint to modify.
    #   @return [String]
    #
    # @!attribute [rw] ip_address_type
    #   The new IP address type for the EC2 Instance Connect Endpoint.
    #
    #   <note markdown="1"> `PreserveClientIp` is only supported on IPv4 EC2 Instance Connect
    #   Endpoints. To use `PreserveClientIp`, the value for `IpAddressType`
    #   must be `ipv4`.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] security_group_ids
    #   Changes the security groups for the EC2 Instance Connect Endpoint.
    #   The new set of groups you specify replaces the current set. You must
    #   specify at least one group, even if it's just the default security
    #   group in the VPC. You must specify the ID of the security group, not
    #   the name.
    #   @return [Array<String>]
    #
    # @!attribute [rw] preserve_client_ip
    #   Indicates whether the client IP address is preserved as the source.
    #   The following are the possible values.
    #
    #   * `true` - Use the client IP address as the source.
    #
    #   * `false` - Use the network interface IP address as the source.
    #
    #   <note markdown="1"> `PreserveClientIp=true` is only supported on IPv4 EC2 Instance
    #   Connect Endpoints. If modifying `PreserveClientIp` to `true`, either
    #   the endpoint's existing `IpAddressType` must be `ipv4`, or if
    #   modifying `IpAddressType` in the same request, the new value must be
    #   `ipv4`.
    #
    #    </note>
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceConnectEndpointRequest AWS API Documentation
    #
    class ModifyInstanceConnectEndpointRequest < Struct.new(
      :dry_run,
      :instance_connect_endpoint_id,
      :ip_address_type,
      :security_group_ids,
      :preserve_client_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   The return value of the request. Returns `true` if the specified
    #   product code is owned by the requester and associated with the
    #   specified instance.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceConnectEndpointResult AWS API Documentation
    #
    class ModifyInstanceConnectEndpointResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance to update.
    #   @return [String]
    #
    # @!attribute [rw] core_count
    #   The number of CPU cores to activate for the specified instance.
    #   @return [Integer]
    #
    # @!attribute [rw] threads_per_core
    #   The number of threads to run for each CPU core.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCpuOptionsRequest AWS API Documentation
    #
    class ModifyInstanceCpuOptionsRequest < Struct.new(
      :instance_id,
      :core_count,
      :threads_per_core,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance that was updated.
    #   @return [String]
    #
    # @!attribute [rw] core_count
    #   The number of CPU cores that are running for the specified instance
    #   after the update.
    #   @return [Integer]
    #
    # @!attribute [rw] threads_per_core
    #   The number of threads that are running per CPU core for the
    #   specified instance after the update.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCpuOptionsResult AWS API Documentation
    #
    class ModifyInstanceCpuOptionsResult < Struct.new(
      :instance_id,
      :core_count,
      :threads_per_core)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] instance_credit_specifications
    #   Information about the credit option for CPU usage.
    #   @return [Array<Types::InstanceCreditSpecificationRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCreditSpecificationRequest AWS API Documentation
    #
    class ModifyInstanceCreditSpecificationRequest < Struct.new(
      :dry_run,
      :client_token,
      :instance_credit_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successful_instance_credit_specifications
    #   Information about the instances whose credit option for CPU usage
    #   was successfully modified.
    #   @return [Array<Types::SuccessfulInstanceCreditSpecificationItem>]
    #
    # @!attribute [rw] unsuccessful_instance_credit_specifications
    #   Information about the instances whose credit option for CPU usage
    #   was not modified.
    #   @return [Array<Types::UnsuccessfulInstanceCreditSpecificationItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceCreditSpecificationResult AWS API Documentation
    #
    class ModifyInstanceCreditSpecificationResult < Struct.new(
      :successful_instance_credit_specifications,
      :unsuccessful_instance_credit_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance with the scheduled event.
    #   @return [String]
    #
    # @!attribute [rw] instance_event_id
    #   The ID of the event whose date and time you are modifying.
    #   @return [String]
    #
    # @!attribute [rw] not_before
    #   The new date and time when the event will take place.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceEventStartTimeRequest AWS API Documentation
    #
    class ModifyInstanceEventStartTimeRequest < Struct.new(
      :dry_run,
      :instance_id,
      :instance_event_id,
      :not_before)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] event
    #   Information about the event.
    #   @return [Types::InstanceStatusEvent]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceEventStartTimeResult AWS API Documentation
    #
    class ModifyInstanceEventStartTimeResult < Struct.new(
      :event)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] name
    #   The name of the event window.
    #   @return [String]
    #
    # @!attribute [rw] instance_event_window_id
    #   The ID of the event window.
    #   @return [String]
    #
    # @!attribute [rw] time_ranges
    #   The time ranges of the event window.
    #   @return [Array<Types::InstanceEventWindowTimeRangeRequest>]
    #
    # @!attribute [rw] cron_expression
    #   The cron expression of the event window, for example, `* 0-4,20-23 *
    #   * 1,5`.
    #
    #   Constraints:
    #
    #   * Only hour and day of the week values are supported.
    #
    #   * For day of the week values, you can specify either integers `0`
    #     through `6`, or alternative single values `SUN` through `SAT`.
    #
    #   * The minute, month, and year must be specified by `*`.
    #
    #   * The hour value must be one or a multiple range, for example, `0-4`
    #     or `0-4,20-23`.
    #
    #   * Each hour range must be &gt;= 2 hours, for example, `0-2` or
    #     `20-23`.
    #
    #   * The event window must be &gt;= 4 hours. The combined total time
    #     ranges in the event window must be &gt;= 4 hours.
    #
    #   For more information about cron expressions, see [cron][1] on the
    #   *Wikipedia website*.
    #
    #
    #
    #   [1]: https://en.wikipedia.org/wiki/Cron
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceEventWindowRequest AWS API Documentation
    #
    class ModifyInstanceEventWindowRequest < Struct.new(
      :dry_run,
      :name,
      :instance_event_window_id,
      :time_ranges,
      :cron_expression)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_event_window
    #   Information about the event window.
    #   @return [Types::InstanceEventWindow]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceEventWindowResult AWS API Documentation
    #
    class ModifyInstanceEventWindowResult < Struct.new(
      :instance_event_window)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] auto_recovery
    #   Disables the automatic recovery behavior of your instance or sets it
    #   to default.
    #   @return [String]
    #
    # @!attribute [rw] reboot_migration
    #   Specifies whether to attempt reboot migration during a
    #   user-initiated reboot of an instance that has a scheduled
    #   `system-reboot` event:
    #
    #   * `default` - Amazon EC2 attempts to migrate the instance to new
    #     hardware (reboot migration). If successful, the `system-reboot`
    #     event is cleared. If unsuccessful, an in-place reboot occurs and
    #     the event remains scheduled.
    #
    #   * `disabled` - Amazon EC2 keeps the instance on the same hardware
    #     (in-place reboot). The `system-reboot` event remains scheduled.
    #
    #   This setting only applies to supported instances that have a
    #   scheduled reboot event. For more information, see [Enable or disable
    #   reboot migration][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMaintenanceOptionsRequest AWS API Documentation
    #
    class ModifyInstanceMaintenanceOptionsRequest < Struct.new(
      :instance_id,
      :auto_recovery,
      :reboot_migration,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] auto_recovery
    #   Provides information on the current automatic recovery behavior of
    #   your instance.
    #   @return [String]
    #
    # @!attribute [rw] reboot_migration
    #   Specifies whether to attempt reboot migration during a
    #   user-initiated reboot of an instance that has a scheduled
    #   `system-reboot` event:
    #
    #   * `default` - Amazon EC2 attempts to migrate the instance to new
    #     hardware (reboot migration). If successful, the `system-reboot`
    #     event is cleared. If unsuccessful, an in-place reboot occurs and
    #     the event remains scheduled.
    #
    #   * `disabled` - Amazon EC2 keeps the instance on the same hardware
    #     (in-place reboot). The `system-reboot` event remains scheduled.
    #
    #   This setting only applies to supported instances that have a
    #   scheduled reboot event. For more information, see [Enable or disable
    #   reboot migration][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMaintenanceOptionsResult AWS API Documentation
    #
    class ModifyInstanceMaintenanceOptionsResult < Struct.new(
      :instance_id,
      :auto_recovery,
      :reboot_migration)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] http_tokens
    #   Indicates whether IMDSv2 is required.
    #
    #   * `optional` – IMDSv2 is optional, which means that you can use
    #     either IMDSv2 or IMDSv1.
    #
    #   * `required` – IMDSv2 is required, which means that IMDSv1 is
    #     disabled, and you must use IMDSv2.
    #   @return [String]
    #
    # @!attribute [rw] http_put_response_hop_limit
    #   The maximum number of hops that the metadata token can travel. To
    #   indicate no preference, specify `-1`.
    #
    #   Possible values: Integers from `1` to `64`, and `-1` to indicate no
    #   preference
    #   @return [Integer]
    #
    # @!attribute [rw] http_endpoint
    #   Enables or disables the IMDS endpoint on an instance. When disabled,
    #   the instance metadata can't be accessed.
    #   @return [String]
    #
    # @!attribute [rw] instance_metadata_tags
    #   Enables or disables access to an instance's tags from the instance
    #   metadata. For more information, see [Work with instance tags using
    #   the instance metadata][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMetadataDefaultsRequest AWS API Documentation
    #
    class ModifyInstanceMetadataDefaultsRequest < Struct.new(
      :http_tokens,
      :http_put_response_hop_limit,
      :http_endpoint,
      :instance_metadata_tags,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   If the request succeeds, the response returns `true`. If the request
    #   fails, no response is returned, and instead an error message is
    #   returned.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMetadataDefaultsResult AWS API Documentation
    #
    class ModifyInstanceMetadataDefaultsResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] http_tokens
    #   Indicates whether IMDSv2 is required.
    #
    #   * `optional` - IMDSv2 is optional. You can choose whether to send a
    #     session token in your instance metadata retrieval requests. If you
    #     retrieve IAM role credentials without a session token, you receive
    #     the IMDSv1 role credentials. If you retrieve IAM role credentials
    #     using a valid session token, you receive the IMDSv2 role
    #     credentials.
    #
    #   * `required` - IMDSv2 is required. You must send a session token in
    #     your instance metadata retrieval requests. With this option,
    #     retrieving the IAM role credentials always returns IMDSv2
    #     credentials; IMDSv1 credentials are not available.
    #
    #   Default:
    #
    #   * If the value of `ImdsSupport` for the Amazon Machine Image (AMI)
    #     for your instance is `v2.0` and the account level default is set
    #     to `no-preference`, the default is `required`.
    #
    #   * If the value of `ImdsSupport` for the Amazon Machine Image (AMI)
    #     for your instance is `v2.0`, but the account level default is set
    #     to `V1 or V2`, the default is `optional`.
    #
    #   The default value can also be affected by other combinations of
    #   parameters. For more information, see [Order of precedence for
    #   instance metadata options][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html#instance-metadata-options-order-of-precedence
    #   @return [String]
    #
    # @!attribute [rw] http_put_response_hop_limit
    #   The desired HTTP PUT response hop limit for instance metadata
    #   requests. The larger the number, the further instance metadata
    #   requests can travel. If no parameter is specified, the existing
    #   state is maintained.
    #
    #   Possible values: Integers from 1 to 64
    #   @return [Integer]
    #
    # @!attribute [rw] http_endpoint
    #   Enables or disables the HTTP metadata endpoint on your instances. If
    #   this parameter is not specified, the existing state is maintained.
    #
    #   If you specify a value of `disabled`, you cannot access your
    #   instance metadata.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] http_protocol_ipv_6
    #   Enables or disables the IPv6 endpoint for the instance metadata
    #   service. Applies only if you enabled the HTTP metadata endpoint.
    #   @return [String]
    #
    # @!attribute [rw] instance_metadata_tags
    #   Set to `enabled` to allow access to instance tags from the instance
    #   metadata. Set to `disabled` to turn off access to instance tags from
    #   the instance metadata. For more information, see [Work with instance
    #   tags using the instance metadata][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMetadataOptionsRequest AWS API Documentation
    #
    class ModifyInstanceMetadataOptionsRequest < Struct.new(
      :instance_id,
      :http_tokens,
      :http_put_response_hop_limit,
      :http_endpoint,
      :dry_run,
      :http_protocol_ipv_6,
      :instance_metadata_tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_metadata_options
    #   The metadata options for the instance.
    #   @return [Types::InstanceMetadataOptionsResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceMetadataOptionsResult AWS API Documentation
    #
    class ModifyInstanceMetadataOptionsResult < Struct.new(
      :instance_id,
      :instance_metadata_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance to update.
    #   @return [String]
    #
    # @!attribute [rw] bandwidth_weighting
    #   Specify the bandwidth weighting option to boost the associated type
    #   of baseline bandwidth, as follows:
    #
    #   default
    #
    #   : This option uses the standard bandwidth configuration for your
    #     instance type.
    #
    #   vpc-1
    #
    #   : This option boosts your networking baseline bandwidth and reduces
    #     your EBS baseline bandwidth.
    #
    #   ebs-1
    #
    #   : This option boosts your EBS baseline bandwidth and reduces your
    #     networking baseline bandwidth.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceNetworkPerformanceRequest AWS API Documentation
    #
    class ModifyInstanceNetworkPerformanceRequest < Struct.new(
      :instance_id,
      :bandwidth_weighting,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The instance ID that was updated.
    #   @return [String]
    #
    # @!attribute [rw] bandwidth_weighting
    #   Contains the updated configuration for bandwidth weighting on the
    #   specified instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstanceNetworkPerformanceResult AWS API Documentation
    #
    class ModifyInstanceNetworkPerformanceResult < Struct.new(
      :instance_id,
      :bandwidth_weighting)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] group_name
    #   The name of the placement group in which to place the instance. For
    #   spread placement groups, the instance must have a tenancy of
    #   `default`. For cluster and partition placement groups, the instance
    #   must have a tenancy of `default` or `dedicated`.
    #
    #   To remove an instance from a placement group, specify an empty
    #   string ("").
    #   @return [String]
    #
    # @!attribute [rw] partition_number
    #   The number of the partition in which to place the instance. Valid
    #   only if the placement group strategy is set to `partition`.
    #   @return [Integer]
    #
    # @!attribute [rw] host_resource_group_arn
    #   The ARN of the host resource group in which to place the instance.
    #   The instance must have a tenancy of `host` to specify this
    #   parameter.
    #   @return [String]
    #
    # @!attribute [rw] group_id
    #   The Group Id of a placement group. You must specify the Placement
    #   Group **Group Id** to launch an instance in a shared placement
    #   group.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance that you are modifying.
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   The tenancy for the instance.
    #
    #   <note markdown="1"> For T3 instances, you must launch the instance on a Dedicated Host
    #   to use a tenancy of `host`. You can't change the tenancy from
    #   `host` to `dedicated` or `default`. Attempting to make one of these
    #   unsupported tenancy changes results in an `InvalidRequest` error
    #   code.
    #
    #    </note>
    #   @return [String]
    #
    # @!attribute [rw] affinity
    #   The affinity setting for the instance. For more information, see
    #   [Host affinity][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-affinity
    #   @return [String]
    #
    # @!attribute [rw] host_id
    #   The ID of the Dedicated Host with which to associate the instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacementRequest AWS API Documentation
    #
    class ModifyInstancePlacementRequest < Struct.new(
      :group_name,
      :partition_number,
      :host_resource_group_arn,
      :group_id,
      :instance_id,
      :tenancy,
      :affinity,
      :host_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Is `true` if the request succeeds, and an error otherwise.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyInstancePlacementResult AWS API Documentation
    #
    class ModifyInstancePlacementResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the IPAM pool you want to modify.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the IPAM pool you want to modify.
    #   @return [String]
    #
    # @!attribute [rw] auto_import
    #   If true, IPAM will continuously look for resources within the CIDR
    #   range of this pool and automatically import them as allocations into
    #   your IPAM. The CIDRs that will be allocated for these resources must
    #   not already be allocated to other resources in order for the import
    #   to succeed. IPAM will import a CIDR regardless of its compliance
    #   with the pool's allocation rules, so a resource might be imported
    #   and subsequently marked as noncompliant. If IPAM discovers multiple
    #   CIDRs that overlap, IPAM will import the largest CIDR only. If IPAM
    #   discovers multiple CIDRs with matching CIDRs, IPAM will randomly
    #   import one of them only.
    #
    #   A locale must be set on the pool for this feature to work.
    #   @return [Boolean]
    #
    # @!attribute [rw] allocation_min_netmask_length
    #   The minimum netmask length required for CIDR allocations in this
    #   IPAM pool to be compliant. Possible netmask lengths for IPv4
    #   addresses are 0 - 32. Possible netmask lengths for IPv6 addresses
    #   are 0 - 128. The minimum netmask length must be less than the
    #   maximum netmask length.
    #   @return [Integer]
    #
    # @!attribute [rw] allocation_max_netmask_length
    #   The maximum netmask length possible for CIDR allocations in this
    #   IPAM pool to be compliant. Possible netmask lengths for IPv4
    #   addresses are 0 - 32. Possible netmask lengths for IPv6 addresses
    #   are 0 - 128.The maximum netmask length must be greater than the
    #   minimum netmask length.
    #   @return [Integer]
    #
    # @!attribute [rw] allocation_default_netmask_length
    #   The default netmask length for allocations added to this pool. If,
    #   for example, the CIDR assigned to this pool is 10.0.0.0/8 and you
    #   enter 16 here, new allocations will default to 10.0.0.0/16.
    #   @return [Integer]
    #
    # @!attribute [rw] clear_allocation_default_netmask_length
    #   Clear the default netmask length allocation rule for this pool.
    #   @return [Boolean]
    #
    # @!attribute [rw] add_allocation_resource_tags
    #   Add tag allocation rules to a pool. For more information about
    #   allocation rules, see [Create a top-level pool][1] in the *Amazon
    #   VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html
    #   @return [Array<Types::RequestIpamResourceTag>]
    #
    # @!attribute [rw] remove_allocation_resource_tags
    #   Remove tag allocation rules from a pool.
    #   @return [Array<Types::RequestIpamResourceTag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamPoolRequest AWS API Documentation
    #
    class ModifyIpamPoolRequest < Struct.new(
      :dry_run,
      :ipam_pool_id,
      :description,
      :auto_import,
      :allocation_min_netmask_length,
      :allocation_max_netmask_length,
      :allocation_default_netmask_length,
      :clear_allocation_default_netmask_length,
      :add_allocation_resource_tags,
      :remove_allocation_resource_tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_pool
    #   The results of the modification.
    #   @return [Types::IpamPool]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamPoolResult AWS API Documentation
    #
    class ModifyIpamPoolResult < Struct.new(
      :ipam_pool)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_id
    #   The ID of the IPAM you want to modify.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the IPAM you want to modify.
    #   @return [String]
    #
    # @!attribute [rw] add_operating_regions
    #   Choose the operating Regions for the IPAM. Operating Regions are
    #   Amazon Web Services Regions where the IPAM is allowed to manage IP
    #   address CIDRs. IPAM only discovers and monitors resources in the
    #   Amazon Web Services Regions you select as operating Regions.
    #
    #   For more information about operating Regions, see [Create an
    #   IPAM][1] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html
    #   @return [Array<Types::AddIpamOperatingRegion>]
    #
    # @!attribute [rw] remove_operating_regions
    #   The operating Regions to remove.
    #   @return [Array<Types::RemoveIpamOperatingRegion>]
    #
    # @!attribute [rw] tier
    #   IPAM is offered in a Free Tier and an Advanced Tier. For more
    #   information about the features available in each tier and the costs
    #   associated with the tiers, see [Amazon VPC pricing &gt; IPAM
    #   tab][1].
    #
    #
    #
    #   [1]: http://aws.amazon.com/vpc/pricing/
    #   @return [String]
    #
    # @!attribute [rw] enable_private_gua
    #   Enable this option to use your own GUA ranges as private IPv6
    #   addresses. This option is disabled by default.
    #   @return [Boolean]
    #
    # @!attribute [rw] metered_account
    #   A metered account is an Amazon Web Services account that is charged
    #   for active IP addresses managed in IPAM. For more information, see
    #   [Enable cost distribution][1] in the *Amazon VPC IPAM User Guide*.
    #
    #   Possible values:
    #
    #   * `ipam-owner` (default): The Amazon Web Services account which owns
    #     the IPAM is charged for all active IP addresses managed in IPAM.
    #
    #   * `resource-owner`: The Amazon Web Services account that owns the IP
    #     address is charged for the active IP address.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/ipam-enable-cost-distro.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamRequest AWS API Documentation
    #
    class ModifyIpamRequest < Struct.new(
      :dry_run,
      :ipam_id,
      :description,
      :add_operating_regions,
      :remove_operating_regions,
      :tier,
      :enable_private_gua,
      :metered_account)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource you want to modify.
    #   @return [String]
    #
    # @!attribute [rw] resource_cidr
    #   The CIDR of the resource you want to modify.
    #   @return [String]
    #
    # @!attribute [rw] resource_region
    #   The Amazon Web Services Region of the resource you want to modify.
    #   @return [String]
    #
    # @!attribute [rw] current_ipam_scope_id
    #   The ID of the current scope that the resource CIDR is in.
    #   @return [String]
    #
    # @!attribute [rw] destination_ipam_scope_id
    #   The ID of the scope you want to transfer the resource CIDR to.
    #   @return [String]
    #
    # @!attribute [rw] monitored
    #   Determines if the resource is monitored by IPAM. If a resource is
    #   monitored, the resource is discovered by IPAM and you can view
    #   details about the resource’s CIDR.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamResourceCidrRequest AWS API Documentation
    #
    class ModifyIpamResourceCidrRequest < Struct.new(
      :dry_run,
      :resource_id,
      :resource_cidr,
      :resource_region,
      :current_ipam_scope_id,
      :destination_ipam_scope_id,
      :monitored)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_resource_cidr
    #   The CIDR of the resource.
    #   @return [Types::IpamResourceCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamResourceCidrResult AWS API Documentation
    #
    class ModifyIpamResourceCidrResult < Struct.new(
      :ipam_resource_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_resource_discovery_id
    #   A resource discovery ID.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A resource discovery description.
    #   @return [String]
    #
    # @!attribute [rw] add_operating_regions
    #   Add operating Regions to the resource discovery. Operating Regions
    #   are Amazon Web Services Regions where the IPAM is allowed to manage
    #   IP address CIDRs. IPAM only discovers and monitors resources in the
    #   Amazon Web Services Regions you select as operating Regions.
    #   @return [Array<Types::AddIpamOperatingRegion>]
    #
    # @!attribute [rw] remove_operating_regions
    #   Remove operating Regions.
    #   @return [Array<Types::RemoveIpamOperatingRegion>]
    #
    # @!attribute [rw] add_organizational_unit_exclusions
    #   Add an Organizational Unit (OU) exclusion to your IPAM. If your IPAM
    #   is integrated with Amazon Web Services Organizations and you add an
    #   organizational unit (OU) exclusion, IPAM will not manage the IP
    #   addresses in accounts in that OU exclusion. There is a limit on the
    #   number of exclusions you can create. For more information, see
    #   [Quotas for your IPAM][1] in the *Amazon VPC IPAM User Guide*.
    #
    #   <note markdown="1"> The resulting set of exclusions must not result in "overlap",
    #   meaning two or more OU exclusions must not exclude the same OU. For
    #   more information and examples, see the Amazon Web Services CLI
    #   request process in [Add or remove OU exclusions ][2] in the *Amazon
    #   VPC User Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html
    #   [2]: https://docs.aws.amazon.com/vpc/latest/ipam/exclude-ous.html#exclude-ous-create-delete
    #   @return [Array<Types::AddIpamOrganizationalUnitExclusion>]
    #
    # @!attribute [rw] remove_organizational_unit_exclusions
    #   Remove an Organizational Unit (OU) exclusion to your IPAM. If your
    #   IPAM is integrated with Amazon Web Services Organizations and you
    #   add an organizational unit (OU) exclusion, IPAM will not manage the
    #   IP addresses in accounts in that OU exclusion. There is a limit on
    #   the number of exclusions you can create. For more information, see
    #   [Quotas for your IPAM][1] in the *Amazon VPC IPAM User Guide*.
    #
    #   <note markdown="1"> The resulting set of exclusions must not result in "overlap",
    #   meaning two or more OU exclusions must not exclude the same OU. For
    #   more information and examples, see the Amazon Web Services CLI
    #   request process in [Add or remove OU exclusions ][2] in the *Amazon
    #   VPC User Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html
    #   [2]: https://docs.aws.amazon.com/vpc/latest/ipam/exclude-ous.html#exclude-ous-create-delete
    #   @return [Array<Types::RemoveIpamOrganizationalUnitExclusion>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamResourceDiscoveryRequest AWS API Documentation
    #
    class ModifyIpamResourceDiscoveryRequest < Struct.new(
      :dry_run,
      :ipam_resource_discovery_id,
      :description,
      :add_operating_regions,
      :remove_operating_regions,
      :add_organizational_unit_exclusions,
      :remove_organizational_unit_exclusions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_resource_discovery
    #   A resource discovery.
    #   @return [Types::IpamResourceDiscovery]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamResourceDiscoveryResult AWS API Documentation
    #
    class ModifyIpamResourceDiscoveryResult < Struct.new(
      :ipam_resource_discovery)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam
    #   The results of the modification.
    #   @return [Types::Ipam]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamResult AWS API Documentation
    #
    class ModifyIpamResult < Struct.new(
      :ipam)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_scope_id
    #   The ID of the scope you want to modify.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the scope you want to modify.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamScopeRequest AWS API Documentation
    #
    class ModifyIpamScopeRequest < Struct.new(
      :dry_run,
      :ipam_scope_id,
      :description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_scope
    #   The results of the modification.
    #   @return [Types::IpamScope]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyIpamScopeResult AWS API Documentation
    #
    class ModifyIpamScopeResult < Struct.new(
      :ipam_scope)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier you provide to ensure the
    #   idempotency of the request. If a client token isn't specified, a
    #   randomly generated token is used in the request to ensure
    #   idempotency.
    #
    #   For more information, see [Ensuring idempotency][1].
    #
    #   Constraint: Maximum 128 ASCII characters.
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] launch_template_id
    #   The ID of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @!attribute [rw] launch_template_name
    #   The name of the launch template.
    #
    #   You must specify either the launch template ID or the launch
    #   template name, but not both.
    #   @return [String]
    #
    # @!attribute [rw] default_version
    #   The version number of the launch template to set as the default
    #   version.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyLaunchTemplateRequest AWS API Documentation
    #
    class ModifyLaunchTemplateRequest < Struct.new(
      :dry_run,
      :client_token,
      :launch_template_id,
      :launch_template_name,
      :default_version)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] launch_template
    #   Information about the launch template.
    #   @return [Types::LaunchTemplate]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyLaunchTemplateResult AWS API Documentation
    #
    class ModifyLaunchTemplateResult < Struct.new(
      :launch_template)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] destination_cidr_block
    #   The CIDR block used for destination matches. The value that you
    #   provide must match the CIDR of an existing route in the table.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_virtual_interface_group_id
    #   The ID of the virtual interface group.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] destination_prefix_list_id
    #   The ID of the prefix list. Use a prefix list in place of
    #   `DestinationCidrBlock`. You cannot use `DestinationPrefixListId` and
    #   `DestinationCidrBlock` in the same request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyLocalGatewayRouteRequest AWS API Documentation
    #
    class ModifyLocalGatewayRouteRequest < Struct.new(
      :destination_cidr_block,
      :local_gateway_route_table_id,
      :local_gateway_virtual_interface_group_id,
      :network_interface_id,
      :dry_run,
      :destination_prefix_list_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route
    #   Information about the local gateway route table.
    #   @return [Types::LocalGatewayRoute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyLocalGatewayRouteResult AWS API Documentation
    #
    class ModifyLocalGatewayRouteResult < Struct.new(
      :route)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] current_version
    #   The current version of the prefix list.
    #   @return [Integer]
    #
    # @!attribute [rw] prefix_list_name
    #   A name for the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] add_entries
    #   One or more entries to add to the prefix list.
    #   @return [Array<Types::AddPrefixListEntry>]
    #
    # @!attribute [rw] remove_entries
    #   One or more entries to remove from the prefix list.
    #   @return [Array<Types::RemovePrefixListEntry>]
    #
    # @!attribute [rw] max_entries
    #   The maximum number of entries for the prefix list. You cannot modify
    #   the entries of a prefix list and modify the size of a prefix list at
    #   the same time.
    #
    #   If any of the resources that reference the prefix list cannot
    #   support the new maximum size, the modify operation fails. Check the
    #   state message for the IDs of the first ten resources that do not
    #   support the new maximum size.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyManagedPrefixListRequest AWS API Documentation
    #
    class ModifyManagedPrefixListRequest < Struct.new(
      :dry_run,
      :prefix_list_id,
      :current_version,
      :prefix_list_name,
      :add_entries,
      :remove_entries,
      :max_entries)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] prefix_list
    #   Information about the prefix list.
    #   @return [Types::ManagedPrefixList]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyManagedPrefixListResult AWS API Documentation
    #
    class ModifyManagedPrefixListResult < Struct.new(
      :prefix_list)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for ModifyNetworkInterfaceAttribute.
    #
    # @!attribute [rw] ena_srd_specification
    #   Updates the ENA Express configuration for the network interface
    #   that’s attached to the instance.
    #   @return [Types::EnaSrdSpecification]
    #
    # @!attribute [rw] enable_primary_ipv_6
    #   If you’re modifying a network interface in a dual-stack or IPv6-only
    #   subnet, you have the option to assign a primary IPv6 IP 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 the instance that this ENI will be attached to relies on its IPv6
    #   address not changing. 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.
    #   @return [Boolean]
    #
    # @!attribute [rw] connection_tracking_specification
    #   A connection tracking specification.
    #   @return [Types::ConnectionTrackingSpecificationRequest]
    #
    # @!attribute [rw] associate_public_ip_address
    #   Indicates whether to assign a public IPv4 address to a network
    #   interface. This option can be enabled for any network interface but
    #   will only apply to the primary network interface (eth0).
    #   @return [Boolean]
    #
    # @!attribute [rw] associated_subnet_ids
    #   A list of subnet IDs to associate with the network interface.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the network interface.
    #   @return [Types::AttributeValue]
    #
    # @!attribute [rw] source_dest_check
    #   Enable or disable source/destination checks, which ensure that the
    #   instance is either the source or the destination of any traffic that
    #   it receives. If the value is `true`, source/destination checks are
    #   enabled; otherwise, they are disabled. The default value is `true`.
    #   You must disable source/destination checks if the instance runs
    #   services such as network address translation, routing, or firewalls.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] groups
    #   Changes the security groups for the network interface. The new set
    #   of groups you specify replaces the current set. You must specify at
    #   least one group, even if it's just the default security group in
    #   the VPC. You must specify the ID of the security group, not the
    #   name.
    #   @return [Array<String>]
    #
    # @!attribute [rw] attachment
    #   Information about the interface attachment. If modifying the `delete
    #   on termination` attribute, you must specify the ID of the interface
    #   attachment.
    #   @return [Types::NetworkInterfaceAttachmentChanges]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyNetworkInterfaceAttributeRequest AWS API Documentation
    #
    class ModifyNetworkInterfaceAttributeRequest < Struct.new(
      :ena_srd_specification,
      :enable_primary_ipv_6,
      :connection_tracking_specification,
      :associate_public_ip_address,
      :associated_subnet_ids,
      :dry_run,
      :network_interface_id,
      :description,
      :source_dest_check,
      :groups,
      :attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] private_dns_hostname_type
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] enable_resource_name_dns_a_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS A records.
    #   @return [Boolean]
    #
    # @!attribute [rw] enable_resource_name_dns_aaaa_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS AAAA records.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyPrivateDnsNameOptionsRequest AWS API Documentation
    #
    class ModifyPrivateDnsNameOptionsRequest < Struct.new(
      :dry_run,
      :instance_id,
      :private_dns_hostname_type,
      :enable_resource_name_dns_a_record,
      :enable_resource_name_dns_aaaa_record)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyPrivateDnsNameOptionsResult AWS API Documentation
    #
    class ModifyPrivateDnsNameOptionsResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_interface_id
    #   A network interface ID.
    #   @return [String]
    #
    # @!attribute [rw] hostname_type
    #   The public hostname type. For more information, see [EC2 instance
    #   hostnames, DNS names, and domains][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #   * `public-dual-stack-dns-name`: A dual-stack public hostname for a
    #     network interface. Requests from within the VPC resolve to both
    #     the private IPv4 address and the IPv6 Global Unicast Address of
    #     the network interface. Requests from the internet resolve to both
    #     the public IPv4 and the IPv6 GUA address of the network interface.
    #
    #   * `public-ipv4-dns-name`: An IPv4-enabled public hostname for a
    #     network interface. Requests from within the VPC resolve to the
    #     private primary IPv4 address of the network interface. Requests
    #     from the internet resolve to the public IPv4 address of the
    #     network interface.
    #
    #   * `public-ipv6-dns-name`: An IPv6-enabled public hostname for a
    #     network interface. Requests from within the VPC or from the
    #     internet resolve to the IPv6 GUA of the network interface.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyPublicIpDnsNameOptionsRequest AWS API Documentation
    #
    class ModifyPublicIpDnsNameOptionsRequest < Struct.new(
      :network_interface_id,
      :hostname_type,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successful
    #   Whether or not the request was successful.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyPublicIpDnsNameOptionsResult AWS API Documentation
    #
    class ModifyPublicIpDnsNameOptionsResult < Struct.new(
      :successful)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for ModifyReservedInstances.
    #
    # @!attribute [rw] reserved_instances_ids
    #   The IDs of the Reserved Instances to modify.
    #   @return [Array<String>]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token you provide to ensure idempotency of
    #   your modification request. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] target_configurations
    #   The configuration settings for the Reserved Instances to modify.
    #   @return [Array<Types::ReservedInstancesConfiguration>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstancesRequest AWS API Documentation
    #
    class ModifyReservedInstancesRequest < Struct.new(
      :reserved_instances_ids,
      :client_token,
      :target_configurations)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of ModifyReservedInstances.
    #
    # @!attribute [rw] reserved_instances_modification_id
    #   The ID for the modification.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyReservedInstancesResult AWS API Documentation
    #
    class ModifyReservedInstancesResult < Struct.new(
      :reserved_instances_modification_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server_id
    #   The ID of the route server to modify.
    #   @return [String]
    #
    # @!attribute [rw] persist_routes
    #   Specifies whether to persist routes after all BGP sessions are
    #   terminated.
    #
    #   * enable: Routes will be persisted in FIB and RIB after all BGP
    #     sessions are terminated.
    #
    #   * disable: Routes will not be persisted in FIB and RIB after all BGP
    #     sessions are terminated.
    #
    #   * reset: If a route server has persisted routes due to all BGP
    #     sessions having ended, reset will withdraw all routes and reset
    #     route server to an empty FIB and RIB.
    #   @return [String]
    #
    # @!attribute [rw] persist_routes_duration
    #   The number of minutes a route server will wait after BGP is
    #   re-established to unpersist the routes in the FIB and RIB. Value
    #   must be in the range of 1-5. Required if PersistRoutes is `enabled`.
    #
    #   If you set the duration to 1 minute, then when your network
    #   appliance re-establishes BGP with route server, it has 1 minute to
    #   relearn it's adjacent network and advertise those routes to route
    #   server before route server resumes normal functionality. In most
    #   cases, 1 minute is probably sufficient. If, however, you have
    #   concerns that your BGP network may not be capable of fully
    #   re-establishing and re-learning everything in 1 minute, you can
    #   increase the duration up to 5 minutes.
    #   @return [Integer]
    #
    # @!attribute [rw] sns_notifications_enabled
    #   Specifies whether to enable SNS notifications for route server
    #   events. Enabling SNS notifications persists BGP status changes to an
    #   SNS topic provisioned by Amazon Web Services.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyRouteServerRequest AWS API Documentation
    #
    class ModifyRouteServerRequest < Struct.new(
      :route_server_id,
      :persist_routes,
      :persist_routes_duration,
      :sns_notifications_enabled,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route_server
    #   Information about the modified route server.
    #   @return [Types::RouteServer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyRouteServerResult AWS API Documentation
    #
    class ModifyRouteServerResult < Struct.new(
      :route_server)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] security_group_rules
    #   Information about the security group properties to update.
    #   @return [Array<Types::SecurityGroupRuleUpdate>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySecurityGroupRulesRequest AWS API Documentation
    #
    class ModifySecurityGroupRulesRequest < Struct.new(
      :group_id,
      :security_group_rules,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySecurityGroupRulesResult AWS API Documentation
    #
    class ModifySecurityGroupRulesResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] attribute
    #   The snapshot attribute to modify. Only volume creation permissions
    #   can be modified.
    #   @return [String]
    #
    # @!attribute [rw] create_volume_permission
    #   A JSON representation of the snapshot attribute modification.
    #   @return [Types::CreateVolumePermissionModifications]
    #
    # @!attribute [rw] group_names
    #   The group to modify for the snapshot.
    #   @return [Array<String>]
    #
    # @!attribute [rw] operation_type
    #   The type of operation to perform to the attribute.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] user_ids
    #   The account ID to modify for the snapshot.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotAttributeRequest AWS API Documentation
    #
    class ModifySnapshotAttributeRequest < Struct.new(
      :attribute,
      :create_volume_permission,
      :group_names,
      :operation_type,
      :snapshot_id,
      :user_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] storage_tier
    #   The name of the storage tier. You must specify `archive`.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotTierRequest AWS API Documentation
    #
    class ModifySnapshotTierRequest < Struct.new(
      :snapshot_id,
      :storage_tier,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] tiering_start_time
    #   The date and time when the archive process was started.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySnapshotTierResult AWS API Documentation
    #
    class ModifySnapshotTierResult < Struct.new(
      :snapshot_id,
      :tiering_start_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for ModifySpotFleetRequest.
    #
    # @!attribute [rw] launch_template_configs
    #   The launch template and overrides. You can only use this parameter
    #   if you specified a launch template (`LaunchTemplateConfigs`) in your
    #   Spot Fleet request. If you specified `LaunchSpecifications` in your
    #   Spot Fleet request, then omit this parameter.
    #   @return [Array<Types::LaunchTemplateConfig>]
    #
    # @!attribute [rw] on_demand_target_capacity
    #   The number of On-Demand Instances in the fleet.
    #   @return [Integer]
    #
    # @!attribute [rw] context
    #   Reserved.
    #   @return [String]
    #
    # @!attribute [rw] spot_fleet_request_id
    #   The ID of the Spot Fleet request.
    #   @return [String]
    #
    # @!attribute [rw] target_capacity
    #   The size of the fleet.
    #   @return [Integer]
    #
    # @!attribute [rw] excess_capacity_termination_policy
    #   Indicates whether running instances should be terminated if the
    #   target capacity of the Spot Fleet request is decreased below the
    #   current size of the Spot Fleet.
    #
    #   Supported only for fleets of type `maintain`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequestRequest AWS API Documentation
    #
    class ModifySpotFleetRequestRequest < Struct.new(
      :launch_template_configs,
      :on_demand_target_capacity,
      :context,
      :spot_fleet_request_id,
      :target_capacity,
      :excess_capacity_termination_policy)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of ModifySpotFleetRequest.
    #
    # @!attribute [rw] return
    #   If the request succeeds, the response returns `true`. If the request
    #   fails, no response is returned, and instead an error message is
    #   returned.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySpotFleetRequestResponse AWS API Documentation
    #
    class ModifySpotFleetRequestResponse < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] assign_ipv_6_address_on_creation
    #   Specify `true` to indicate that network interfaces created in the
    #   specified subnet should be assigned an IPv6 address. This includes a
    #   network interface that's created when launching an instance into
    #   the subnet (the instance therefore receives an IPv6 address).
    #
    #   If you enable the IPv6 addressing feature for your subnet, your
    #   network interface or instance only receives an IPv6 address if it's
    #   created using version `2016-11-15` or later of the Amazon EC2 API.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] map_public_ip_on_launch
    #   Specify `true` to indicate that network interfaces attached to
    #   instances created in the specified subnet should be assigned a
    #   public IPv4 address.
    #
    #   Amazon Web Services charges for all public IPv4 addresses, including
    #   public IPv4 addresses associated with running instances and Elastic
    #   IP addresses. For more information, see the *Public IPv4 Address*
    #   tab on the [Amazon VPC pricing page][1].
    #
    #
    #
    #   [1]: http://aws.amazon.com/vpc/pricing/
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] map_customer_owned_ip_on_launch
    #   Specify `true` to indicate that network interfaces attached to
    #   instances created in the specified subnet should be assigned a
    #   customer-owned IPv4 address.
    #
    #   When this value is `true`, you must specify the customer-owned IP
    #   pool using `CustomerOwnedIpv4Pool`.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] customer_owned_ipv_4_pool
    #   The customer-owned IPv4 address pool associated with the subnet.
    #
    #   You must set this value when you specify `true` for
    #   `MapCustomerOwnedIpOnLaunch`.
    #   @return [String]
    #
    # @!attribute [rw] enable_dns_64
    #   Indicates whether DNS queries made to the Amazon-provided DNS
    #   Resolver in this subnet should return synthetic IPv6 addresses for
    #   IPv4-only destinations.
    #
    #   You must first configure a NAT gateway in a public subnet (separate
    #   from the subnet containing the IPv6-only workloads). For example,
    #   the subnet containing the NAT gateway should have a `0.0.0.0/0`
    #   route pointing to the internet gateway. For more information, see
    #   [Configure DNS64 and NAT64][1] in the *Amazon VPC User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-nat64-dns64.html#nat-gateway-nat64-dns64-walkthrough
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] private_dns_hostname_type_on_launch
    #   The type of hostname to assign to instances in the subnet at launch.
    #   For IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance
    #   DNS name can be based on the instance IPv4 address (ip-name) or the
    #   instance ID (resource-name). For IPv6 only subnets, an instance DNS
    #   name must be based on the instance ID (resource-name).
    #   @return [String]
    #
    # @!attribute [rw] enable_resource_name_dns_a_record_on_launch
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS A records.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] enable_resource_name_dns_aaaa_record_on_launch
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS AAAA records.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] enable_lni_at_device_index
    #   Indicates the device position for local network interfaces in this
    #   subnet. For example, `1` indicates local network interfaces in this
    #   subnet are the secondary network interface (eth1). A local network
    #   interface cannot be the primary network interface (eth0).
    #   @return [Integer]
    #
    # @!attribute [rw] disable_lni_at_device_index
    #   Specify `true` to indicate that local network interfaces at the
    #   current position should be disabled.
    #   @return [Types::AttributeBooleanValue]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifySubnetAttributeRequest AWS API Documentation
    #
    class ModifySubnetAttributeRequest < Struct.new(
      :assign_ipv_6_address_on_creation,
      :map_public_ip_on_launch,
      :subnet_id,
      :map_customer_owned_ip_on_launch,
      :customer_owned_ipv_4_pool,
      :enable_dns_64,
      :private_dns_hostname_type_on_launch,
      :enable_resource_name_dns_a_record_on_launch,
      :enable_resource_name_dns_aaaa_record_on_launch,
      :enable_lni_at_device_index,
      :disable_lni_at_device_index)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_id
    #   The ID of the Traffic Mirror filter.
    #   @return [String]
    #
    # @!attribute [rw] add_network_services
    #   The network service, for example Amazon DNS, that you want to
    #   mirror.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_network_services
    #   The network service, for example Amazon DNS, that you no longer want
    #   to mirror.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterNetworkServicesRequest AWS API Documentation
    #
    class ModifyTrafficMirrorFilterNetworkServicesRequest < Struct.new(
      :traffic_mirror_filter_id,
      :add_network_services,
      :remove_network_services,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter
    #   The Traffic Mirror filter that the network service is associated
    #   with.
    #   @return [Types::TrafficMirrorFilter]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterNetworkServicesResult AWS API Documentation
    #
    class ModifyTrafficMirrorFilterNetworkServicesResult < Struct.new(
      :traffic_mirror_filter)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_rule_id
    #   The ID of the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] traffic_direction
    #   The type of traffic to assign to the rule.
    #   @return [String]
    #
    # @!attribute [rw] rule_number
    #   The number of the Traffic Mirror rule. This number must be unique
    #   for each Traffic Mirror rule in a given direction. The rules are
    #   processed in ascending order by rule number.
    #   @return [Integer]
    #
    # @!attribute [rw] rule_action
    #   The action to assign to the rule.
    #   @return [String]
    #
    # @!attribute [rw] destination_port_range
    #   The destination ports that are associated with the Traffic Mirror
    #   rule.
    #   @return [Types::TrafficMirrorPortRangeRequest]
    #
    # @!attribute [rw] source_port_range
    #   The port range to assign to the Traffic Mirror rule.
    #   @return [Types::TrafficMirrorPortRangeRequest]
    #
    # @!attribute [rw] protocol
    #   The protocol, for example TCP, to assign to the Traffic Mirror rule.
    #   @return [Integer]
    #
    # @!attribute [rw] destination_cidr_block
    #   The destination CIDR block to assign to the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] source_cidr_block
    #   The source CIDR block to assign to the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description to assign to the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] remove_fields
    #   The properties that you want to remove from the Traffic Mirror
    #   filter rule.
    #
    #   When you remove a property from a Traffic Mirror filter rule, the
    #   property is set to the default.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterRuleRequest AWS API Documentation
    #
    class ModifyTrafficMirrorFilterRuleRequest < Struct.new(
      :traffic_mirror_filter_rule_id,
      :traffic_direction,
      :rule_number,
      :rule_action,
      :destination_port_range,
      :source_port_range,
      :protocol,
      :destination_cidr_block,
      :source_cidr_block,
      :description,
      :remove_fields,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_filter_rule
    #   <note markdown="1"> Tags are not returned for ModifyTrafficMirrorFilterRule.
    #
    #    </note>
    #
    #   A Traffic Mirror rule.
    #   @return [Types::TrafficMirrorFilterRule]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorFilterRuleResult AWS API Documentation
    #
    class ModifyTrafficMirrorFilterRuleResult < Struct.new(
      :traffic_mirror_filter_rule)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_session_id
    #   The ID of the Traffic Mirror session.
    #   @return [String]
    #
    # @!attribute [rw] traffic_mirror_target_id
    #   The Traffic Mirror target. The target must be in the same VPC as the
    #   source, or have a VPC peering connection with the source.
    #   @return [String]
    #
    # @!attribute [rw] traffic_mirror_filter_id
    #   The ID of the Traffic Mirror filter.
    #   @return [String]
    #
    # @!attribute [rw] packet_length
    #   The number of bytes in each packet to mirror. These are bytes after
    #   the VXLAN header. To mirror a subset, set this to the length (in
    #   bytes) to mirror. For example, if you set this value to 100, then
    #   the first 100 bytes that meet the filter criteria are copied to the
    #   target. Do not specify this parameter when you want to mirror the
    #   entire packet.
    #
    #   For sessions with Network Load Balancer (NLB) traffic mirror
    #   targets, the default `PacketLength` will be set to 8500. Valid
    #   values are 1-8500. Setting a `PacketLength` greater than 8500 will
    #   result in an error response.
    #   @return [Integer]
    #
    # @!attribute [rw] session_number
    #   The session number determines the order in which sessions are
    #   evaluated when an interface is used by multiple sessions. The first
    #   session with a matching filter is the one that mirrors the packets.
    #
    #   Valid values are 1-32766.
    #   @return [Integer]
    #
    # @!attribute [rw] virtual_network_id
    #   The virtual network ID of the Traffic Mirror session.
    #   @return [Integer]
    #
    # @!attribute [rw] description
    #   The description to assign to the Traffic Mirror session.
    #   @return [String]
    #
    # @!attribute [rw] remove_fields
    #   The properties that you want to remove from the Traffic Mirror
    #   session.
    #
    #   When you remove a property from a Traffic Mirror session, the
    #   property is set to the default.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorSessionRequest AWS API Documentation
    #
    class ModifyTrafficMirrorSessionRequest < Struct.new(
      :traffic_mirror_session_id,
      :traffic_mirror_target_id,
      :traffic_mirror_filter_id,
      :packet_length,
      :session_number,
      :virtual_network_id,
      :description,
      :remove_fields,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] traffic_mirror_session
    #   Information about the Traffic Mirror session.
    #   @return [Types::TrafficMirrorSession]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTrafficMirrorSessionResult AWS API Documentation
    #
    class ModifyTrafficMirrorSessionResult < Struct.new(
      :traffic_mirror_session)
      SENSITIVE = []
      include Aws::Structure
    end

    # The transit gateway options.
    #
    # @!attribute [rw] add_transit_gateway_cidr_blocks
    #   Adds IPv4 or IPv6 CIDR blocks for the transit gateway. Must be a
    #   size /24 CIDR block or larger for IPv4, or a size /64 CIDR block or
    #   larger for IPv6.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_transit_gateway_cidr_blocks
    #   Removes CIDR blocks for the transit gateway.
    #   @return [Array<String>]
    #
    # @!attribute [rw] vpn_ecmp_support
    #   Enable or disable Equal Cost Multipath Protocol support.
    #   @return [String]
    #
    # @!attribute [rw] dns_support
    #   Enable or disable DNS support.
    #   @return [String]
    #
    # @!attribute [rw] security_group_referencing_support
    #   Enables you to reference a security group across VPCs attached to a
    #   transit gateway to simplify security group management.
    #
    #   This option is disabled by default.
    #
    #   For more information about security group referencing, see [Security
    #   group referencing][1] in the *Amazon Web Services Transit Gateways
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#vpc-attachment-security
    #   @return [String]
    #
    # @!attribute [rw] auto_accept_shared_attachments
    #   Enable or disable automatic acceptance of attachment requests.
    #   @return [String]
    #
    # @!attribute [rw] default_route_table_association
    #   Enable or disable automatic association with the default association
    #   route table.
    #   @return [String]
    #
    # @!attribute [rw] association_default_route_table_id
    #   The ID of the default association route table.
    #   @return [String]
    #
    # @!attribute [rw] default_route_table_propagation
    #   Indicates whether resource attachments automatically propagate
    #   routes to the default propagation route table. Enabled by default.
    #   If `defaultRouteTablePropagation` is set to `enable`, Amazon Web
    #   Services Transit Gateway will create the default transit gateway
    #   route table.
    #   @return [String]
    #
    # @!attribute [rw] propagation_default_route_table_id
    #   The ID of the default propagation route table.
    #   @return [String]
    #
    # @!attribute [rw] amazon_side_asn
    #   A private Autonomous System Number (ASN) for the Amazon side of a
    #   BGP session. The range is 64512 to 65534 for 16-bit ASNs and
    #   4200000000 to 4294967294 for 32-bit ASNs.
    #
    #   The modify ASN operation is not allowed on a transit gateway if it
    #   has the following attachments:
    #
    #   * Dynamic VPN
    #
    #   * Static VPN
    #
    #   * Direct Connect Gateway
    #
    #   * Connect
    #
    #   You must first delete all transit gateway attachments configured
    #   prior to modifying the ASN on the transit gateway.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayOptions AWS API Documentation
    #
    class ModifyTransitGatewayOptions < Struct.new(
      :add_transit_gateway_cidr_blocks,
      :remove_transit_gateway_cidr_blocks,
      :vpn_ecmp_support,
      :dns_support,
      :security_group_referencing_support,
      :auto_accept_shared_attachments,
      :default_route_table_association,
      :association_default_route_table_id,
      :default_route_table_propagation,
      :propagation_default_route_table_id,
      :amazon_side_asn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment to which traffic is routed.
    #   @return [String]
    #
    # @!attribute [rw] blackhole
    #   Indicates whether to drop traffic that matches this route.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayPrefixListReferenceRequest AWS API Documentation
    #
    class ModifyTransitGatewayPrefixListReferenceRequest < Struct.new(
      :transit_gateway_route_table_id,
      :prefix_list_id,
      :transit_gateway_attachment_id,
      :blackhole,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_prefix_list_reference
    #   Information about the prefix list reference.
    #   @return [Types::TransitGatewayPrefixListReference]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayPrefixListReferenceResult AWS API Documentation
    #
    class ModifyTransitGatewayPrefixListReferenceResult < Struct.new(
      :transit_gateway_prefix_list_reference)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description for the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] options
    #   The options to modify.
    #   @return [Types::ModifyTransitGatewayOptions]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayRequest AWS API Documentation
    #
    class ModifyTransitGatewayRequest < Struct.new(
      :transit_gateway_id,
      :description,
      :options,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway
    #   Information about the transit gateway.
    #   @return [Types::TransitGateway]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayResult AWS API Documentation
    #
    class ModifyTransitGatewayResult < Struct.new(
      :transit_gateway)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] add_subnet_ids
    #   The IDs of one or more subnets to add. You can specify at most one
    #   subnet per Availability Zone.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_subnet_ids
    #   The IDs of one or more subnets to remove.
    #   @return [Array<String>]
    #
    # @!attribute [rw] options
    #   The new VPC attachment options.
    #   @return [Types::ModifyTransitGatewayVpcAttachmentRequestOptions]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayVpcAttachmentRequest AWS API Documentation
    #
    class ModifyTransitGatewayVpcAttachmentRequest < Struct.new(
      :transit_gateway_attachment_id,
      :add_subnet_ids,
      :remove_subnet_ids,
      :options,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for a VPC attachment.
    #
    # @!attribute [rw] dns_support
    #   Enable or disable DNS support. The default is `enable`.
    #   @return [String]
    #
    # @!attribute [rw] security_group_referencing_support
    #   Enables you to reference a security group across VPCs attached to a
    #   transit gateway to simplify security group management.
    #
    #   This option is disabled by default.
    #
    #   For more information about security group referencing, see [Security
    #   group referencing][1] in the *Amazon Web Services Transit Gateways
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#vpc-attachment-security
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_support
    #   Enable or disable IPv6 support. The default is `enable`.
    #   @return [String]
    #
    # @!attribute [rw] appliance_mode_support
    #   Enable or disable support for appliance mode. If enabled, a traffic
    #   flow between a source and destination uses the same Availability
    #   Zone for the VPC attachment for the lifetime of that flow. The
    #   default is `disable`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayVpcAttachmentRequestOptions AWS API Documentation
    #
    class ModifyTransitGatewayVpcAttachmentRequestOptions < Struct.new(
      :dns_support,
      :security_group_referencing_support,
      :ipv_6_support,
      :appliance_mode_support)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_vpc_attachment
    #   Information about the modified attachment.
    #   @return [Types::TransitGatewayVpcAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyTransitGatewayVpcAttachmentResult AWS API Documentation
    #
    class ModifyTransitGatewayVpcAttachmentResult < Struct.new(
      :transit_gateway_vpc_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # The CIDR options for a Verified Access endpoint.
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::ModifyVerifiedAccessEndpointPortRange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessEndpointCidrOptions AWS API Documentation
    #
    class ModifyVerifiedAccessEndpointCidrOptions < Struct.new(
      :port_ranges)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options when modifying a Verified Access endpoint with
    # the `network-interface` type.
    #
    # @!attribute [rw] protocol
    #   The IP protocol.
    #   @return [String]
    #
    # @!attribute [rw] port
    #   The IP port number.
    #   @return [Integer]
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::ModifyVerifiedAccessEndpointPortRange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessEndpointEniOptions AWS API Documentation
    #
    class ModifyVerifiedAccessEndpointEniOptions < Struct.new(
      :protocol,
      :port,
      :port_ranges)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a load balancer when creating an Amazon Web Services
    # Verified Access endpoint using the `load-balancer` type.
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets.
    #   @return [Array<String>]
    #
    # @!attribute [rw] protocol
    #   The IP protocol.
    #   @return [String]
    #
    # @!attribute [rw] port
    #   The IP port number.
    #   @return [Integer]
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::ModifyVerifiedAccessEndpointPortRange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessEndpointLoadBalancerOptions AWS API Documentation
    #
    class ModifyVerifiedAccessEndpointLoadBalancerOptions < Struct.new(
      :subnet_ids,
      :protocol,
      :port,
      :port_ranges)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint_id
    #   The ID of the Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] policy_enabled
    #   The status of the Verified Access policy.
    #   @return [Boolean]
    #
    # @!attribute [rw] policy_document
    #   The Verified Access policy document.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] sse_specification
    #   The options for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessEndpointPolicyRequest AWS API Documentation
    #
    class ModifyVerifiedAccessEndpointPolicyRequest < Struct.new(
      :verified_access_endpoint_id,
      :policy_enabled,
      :policy_document,
      :client_token,
      :dry_run,
      :sse_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] policy_enabled
    #   The status of the Verified Access policy.
    #   @return [Boolean]
    #
    # @!attribute [rw] policy_document
    #   The Verified Access policy document.
    #   @return [String]
    #
    # @!attribute [rw] sse_specification
    #   The options in use for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessEndpointPolicyResult AWS API Documentation
    #
    class ModifyVerifiedAccessEndpointPolicyResult < Struct.new(
      :policy_enabled,
      :policy_document,
      :sse_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the port range for a Verified Access endpoint.
    #
    # @!attribute [rw] from_port
    #   The start of the port range.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   The end of the port range.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessEndpointPortRange AWS API Documentation
    #
    class ModifyVerifiedAccessEndpointPortRange < Struct.new(
      :from_port,
      :to_port)
      SENSITIVE = []
      include Aws::Structure
    end

    # The RDS options for a Verified Access endpoint.
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets.
    #   @return [Array<String>]
    #
    # @!attribute [rw] port
    #   The port.
    #   @return [Integer]
    #
    # @!attribute [rw] rds_endpoint
    #   The RDS endpoint.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessEndpointRdsOptions AWS API Documentation
    #
    class ModifyVerifiedAccessEndpointRdsOptions < Struct.new(
      :subnet_ids,
      :port,
      :rds_endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint_id
    #   The ID of the Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_group_id
    #   The ID of the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] load_balancer_options
    #   The load balancer details if creating the Verified Access endpoint
    #   as `load-balancer`type.
    #   @return [Types::ModifyVerifiedAccessEndpointLoadBalancerOptions]
    #
    # @!attribute [rw] network_interface_options
    #   The network interface options.
    #   @return [Types::ModifyVerifiedAccessEndpointEniOptions]
    #
    # @!attribute [rw] description
    #   A description for the Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] rds_options
    #   The RDS options.
    #   @return [Types::ModifyVerifiedAccessEndpointRdsOptions]
    #
    # @!attribute [rw] cidr_options
    #   The CIDR options.
    #   @return [Types::ModifyVerifiedAccessEndpointCidrOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessEndpointRequest AWS API Documentation
    #
    class ModifyVerifiedAccessEndpointRequest < Struct.new(
      :verified_access_endpoint_id,
      :verified_access_group_id,
      :load_balancer_options,
      :network_interface_options,
      :description,
      :client_token,
      :dry_run,
      :rds_options,
      :cidr_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_endpoint
    #   Details about the Verified Access endpoint.
    #   @return [Types::VerifiedAccessEndpoint]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessEndpointResult AWS API Documentation
    #
    class ModifyVerifiedAccessEndpointResult < Struct.new(
      :verified_access_endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_group_id
    #   The ID of the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] policy_enabled
    #   The status of the Verified Access policy.
    #   @return [Boolean]
    #
    # @!attribute [rw] policy_document
    #   The Verified Access policy document.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] sse_specification
    #   The options for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessGroupPolicyRequest AWS API Documentation
    #
    class ModifyVerifiedAccessGroupPolicyRequest < Struct.new(
      :verified_access_group_id,
      :policy_enabled,
      :policy_document,
      :client_token,
      :dry_run,
      :sse_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] policy_enabled
    #   The status of the Verified Access policy.
    #   @return [Boolean]
    #
    # @!attribute [rw] policy_document
    #   The Verified Access policy document.
    #   @return [String]
    #
    # @!attribute [rw] sse_specification
    #   The options in use for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessGroupPolicyResult AWS API Documentation
    #
    class ModifyVerifiedAccessGroupPolicyResult < Struct.new(
      :policy_enabled,
      :policy_document,
      :sse_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_group_id
    #   The ID of the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessGroupRequest AWS API Documentation
    #
    class ModifyVerifiedAccessGroupRequest < Struct.new(
      :verified_access_group_id,
      :verified_access_instance_id,
      :description,
      :client_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_group
    #   Details about the Verified Access group.
    #   @return [Types::VerifiedAccessGroup]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessGroupResult AWS API Documentation
    #
    class ModifyVerifiedAccessGroupResult < Struct.new(
      :verified_access_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] access_logs
    #   The configuration options for Verified Access instances.
    #   @return [Types::VerifiedAccessLogOptions]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessInstanceLoggingConfigurationRequest AWS API Documentation
    #
    class ModifyVerifiedAccessInstanceLoggingConfigurationRequest < Struct.new(
      :verified_access_instance_id,
      :access_logs,
      :dry_run,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] logging_configuration
    #   The logging configuration for the Verified Access instance.
    #   @return [Types::VerifiedAccessInstanceLoggingConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessInstanceLoggingConfigurationResult AWS API Documentation
    #
    class ModifyVerifiedAccessInstanceLoggingConfigurationResult < Struct.new(
      :logging_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] cidr_endpoints_custom_sub_domain
    #   The custom subdomain.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessInstanceRequest AWS API Documentation
    #
    class ModifyVerifiedAccessInstanceRequest < Struct.new(
      :verified_access_instance_id,
      :description,
      :dry_run,
      :client_token,
      :cidr_endpoints_custom_sub_domain)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_instance
    #   Details about the Verified Access instance.
    #   @return [Types::VerifiedAccessInstance]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessInstanceResult AWS API Documentation
    #
    class ModifyVerifiedAccessInstanceResult < Struct.new(
      :verified_access_instance)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the OpenID Connect (OIDC) options.
    #
    # @!attribute [rw] public_signing_key_endpoint
    #   The public signing key endpoint.
    #   @return [String]
    #
    # @!attribute [rw] issuer
    #   The OIDC issuer identifier of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] authorization_endpoint
    #   The authorization endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] token_endpoint
    #   The token endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] user_info_endpoint
    #   The user info endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] client_id
    #   The OAuth 2.0 client identifier.
    #   @return [String]
    #
    # @!attribute [rw] client_secret
    #   The OAuth 2.0 client secret.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   The set of user claims to be requested from the IdP.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessNativeApplicationOidcOptions AWS API Documentation
    #
    class ModifyVerifiedAccessNativeApplicationOidcOptions < Struct.new(
      :public_signing_key_endpoint,
      :issuer,
      :authorization_endpoint,
      :token_endpoint,
      :user_info_endpoint,
      :client_id,
      :client_secret,
      :scope)
      SENSITIVE = [:client_secret]
      include Aws::Structure
    end

    # Modifies the configuration of the specified device-based Amazon Web
    # Services Verified Access trust provider.
    #
    # @!attribute [rw] public_signing_key_url
    #   The URL Amazon Web Services Verified Access will use to verify the
    #   authenticity of the device tokens.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessTrustProviderDeviceOptions AWS API Documentation
    #
    class ModifyVerifiedAccessTrustProviderDeviceOptions < Struct.new(
      :public_signing_key_url)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for an OpenID Connect-compatible user-identity trust provider.
    #
    # @!attribute [rw] issuer
    #   The OIDC issuer.
    #   @return [String]
    #
    # @!attribute [rw] authorization_endpoint
    #   The OIDC authorization endpoint.
    #   @return [String]
    #
    # @!attribute [rw] token_endpoint
    #   The OIDC token endpoint.
    #   @return [String]
    #
    # @!attribute [rw] user_info_endpoint
    #   The OIDC user info endpoint.
    #   @return [String]
    #
    # @!attribute [rw] client_id
    #   The client identifier.
    #   @return [String]
    #
    # @!attribute [rw] client_secret
    #   The client secret.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   OpenID Connect (OIDC) scopes are used by an application during
    #   authentication to authorize access to a user's details. Each scope
    #   returns a specific set of user attributes.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessTrustProviderOidcOptions AWS API Documentation
    #
    class ModifyVerifiedAccessTrustProviderOidcOptions < Struct.new(
      :issuer,
      :authorization_endpoint,
      :token_endpoint,
      :user_info_endpoint,
      :client_id,
      :client_secret,
      :scope)
      SENSITIVE = [:client_secret]
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_trust_provider_id
    #   The ID of the Verified Access trust provider.
    #   @return [String]
    #
    # @!attribute [rw] oidc_options
    #   The options for an OpenID Connect-compatible user-identity trust
    #   provider.
    #   @return [Types::ModifyVerifiedAccessTrustProviderOidcOptions]
    #
    # @!attribute [rw] device_options
    #   The options for a device-based trust provider. This parameter is
    #   required when the provider type is `device`.
    #   @return [Types::ModifyVerifiedAccessTrustProviderDeviceOptions]
    #
    # @!attribute [rw] description
    #   A description for the Verified Access trust provider.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive token that you provide to ensure
    #   idempotency of your modification request. For more information, see
    #   [Ensuring idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] sse_specification
    #   The options for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationRequest]
    #
    # @!attribute [rw] native_application_oidc_options
    #   The OpenID Connect (OIDC) options.
    #   @return [Types::ModifyVerifiedAccessNativeApplicationOidcOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessTrustProviderRequest AWS API Documentation
    #
    class ModifyVerifiedAccessTrustProviderRequest < Struct.new(
      :verified_access_trust_provider_id,
      :oidc_options,
      :device_options,
      :description,
      :dry_run,
      :client_token,
      :sse_specification,
      :native_application_oidc_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] verified_access_trust_provider
    #   Details about the Verified Access trust provider.
    #   @return [Types::VerifiedAccessTrustProvider]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVerifiedAccessTrustProviderResult AWS API Documentation
    #
    class ModifyVerifiedAccessTrustProviderResult < Struct.new(
      :verified_access_trust_provider)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] auto_enable_io
    #   Indicates whether the volume should be auto-enabled for I/O
    #   operations.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeAttributeRequest AWS API Documentation
    #
    class ModifyVolumeAttributeRequest < Struct.new(
      :auto_enable_io,
      :volume_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @!attribute [rw] size
    #   The target size of the volume, in GiB. The target volume size must
    #   be greater than or equal to the existing size of the volume.
    #
    #   The following are the supported volumes sizes for each volume type:
    #
    #   * `gp2`: 1 - 16,384 GiB
    #
    #   * `gp3`: 1 - 65,536 GiB
    #
    #   * `io1`: 4 - 16,384 GiB
    #
    #   * `io2`: 4 - 65,536 GiB
    #
    #   * `st1` and `sc1`: 125 - 16,384 GiB
    #
    #   * `standard`: 1 - 1024 GiB
    #
    #   Default: The existing size is retained.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_type
    #   The target EBS volume type of the volume. For more information, see
    #   [Amazon EBS volume types][1] in the *Amazon EBS User Guide*.
    #
    #   Default: The existing type is retained.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volume-types.html
    #   @return [String]
    #
    # @!attribute [rw] iops
    #   The target IOPS rate of the volume. This parameter is valid only for
    #   `gp3`, `io1`, and `io2` volumes.
    #
    #   The following are the supported values for each volume type:
    #
    #   * `gp3`: 3,000 - 80,000 IOPS
    #
    #   * `io1`: 100 - 64,000 IOPS
    #
    #   * `io2`: 100 - 256,000 IOPS
    #
    #   For `io2` volumes, you can achieve up to 256,000 IOPS on [instances
    #   built on the Nitro System][1]. On other instances, you can achieve
    #   performance up to 32,000 IOPS.
    #
    #   Default: The existing value is retained if you keep the same volume
    #   type. If you change the volume type to `io1`, `io2`, or `gp3`, the
    #   default is 3,000.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html
    #   @return [Integer]
    #
    # @!attribute [rw] throughput
    #   The target throughput of the volume, in MiB/s. This parameter is
    #   valid only for `gp3` volumes. The maximum value is 2,000.
    #
    #   Default: The existing value is retained if the source and target
    #   volume type is `gp3`. Otherwise, the default value is 125.
    #
    #   Valid Range: Minimum value of 125. Maximum value of 2,000.
    #   @return [Integer]
    #
    # @!attribute [rw] multi_attach_enabled
    #   Specifies whether to enable Amazon EBS Multi-Attach. If you enable
    #   Multi-Attach, you can attach the volume to up to 16 [ Nitro-based
    #   instances][1] in the same Availability Zone. This parameter is
    #   supported with `io1` and `io2` volumes only. For more information,
    #   see [ Amazon EBS Multi-Attach][2] in the *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-nitro-instances.html
    #   [2]: https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes-multi.html
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeRequest AWS API Documentation
    #
    class ModifyVolumeRequest < Struct.new(
      :dry_run,
      :volume_id,
      :size,
      :volume_type,
      :iops,
      :throughput,
      :multi_attach_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] volume_modification
    #   Information about the volume modification.
    #   @return [Types::VolumeModification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVolumeResult AWS API Documentation
    #
    class ModifyVolumeResult < Struct.new(
      :volume_modification)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] enable_dns_hostnames
    #   Indicates whether the instances launched in the VPC get DNS
    #   hostnames. If enabled, instances in the VPC get DNS hostnames;
    #   otherwise, they do not.
    #
    #   You cannot modify the DNS resolution and DNS hostnames attributes in
    #   the same request. Use separate requests for each attribute. You can
    #   only enable DNS hostnames if you've enabled DNS support.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] enable_dns_support
    #   Indicates whether the DNS resolution is supported for the VPC. If
    #   enabled, queries to the Amazon provided DNS server at the
    #   169.254.169.253 IP address, or the reserved IP address at the base
    #   of the VPC network range "plus two" succeed. If disabled, the
    #   Amazon provided DNS service in the VPC that resolves public DNS
    #   hostnames to IP addresses is not enabled.
    #
    #   You cannot modify the DNS resolution and DNS hostnames attributes in
    #   the same request. Use separate requests for each attribute.
    #   @return [Types::AttributeBooleanValue]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] enable_network_address_usage_metrics
    #   Indicates whether Network Address Usage metrics are enabled for your
    #   VPC.
    #   @return [Types::AttributeBooleanValue]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcAttributeRequest AWS API Documentation
    #
    class ModifyVpcAttributeRequest < Struct.new(
      :enable_dns_hostnames,
      :enable_dns_support,
      :vpc_id,
      :enable_network_address_usage_metrics)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] exclusion_id
    #   The ID of an exclusion.
    #   @return [String]
    #
    # @!attribute [rw] internet_gateway_exclusion_mode
    #   The exclusion mode for internet gateway traffic.
    #
    #   * `allow-bidirectional`: Allow all internet traffic to and from the
    #     excluded VPCs and subnets.
    #
    #   * `allow-egress`: Allow outbound internet traffic from the excluded
    #     VPCs and subnets. Block inbound internet traffic to the excluded
    #     VPCs and subnets. Only applies when VPC Block Public Access is set
    #     to Bidirectional.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcBlockPublicAccessExclusionRequest AWS API Documentation
    #
    class ModifyVpcBlockPublicAccessExclusionRequest < Struct.new(
      :dry_run,
      :exclusion_id,
      :internet_gateway_exclusion_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_block_public_access_exclusion
    #   Details related to the exclusion.
    #   @return [Types::VpcBlockPublicAccessExclusion]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcBlockPublicAccessExclusionResult AWS API Documentation
    #
    class ModifyVpcBlockPublicAccessExclusionResult < Struct.new(
      :vpc_block_public_access_exclusion)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] internet_gateway_block_mode
    #   The mode of VPC BPA.
    #
    #   * `off`: VPC BPA is not enabled and traffic is allowed to and from
    #     internet gateways and egress-only internet gateways in this
    #     Region.
    #
    #   * `block-bidirectional`: Block all traffic to and from internet
    #     gateways and egress-only internet gateways in this Region (except
    #     for excluded VPCs and subnets).
    #
    #   * `block-ingress`: Block all internet traffic to the VPCs in this
    #     Region (except for VPCs or subnets which are excluded). Only
    #     traffic to and from NAT gateways and egress-only internet gateways
    #     is allowed because these gateways only allow outbound connections
    #     to be established.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcBlockPublicAccessOptionsRequest AWS API Documentation
    #
    class ModifyVpcBlockPublicAccessOptionsRequest < Struct.new(
      :dry_run,
      :internet_gateway_block_mode)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_block_public_access_options
    #   Details related to the VPC Block Public Access (BPA) options.
    #   @return [Types::VpcBlockPublicAccessOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcBlockPublicAccessOptionsResult AWS API Documentation
    #
    class ModifyVpcBlockPublicAccessOptionsResult < Struct.new(
      :vpc_block_public_access_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] connection_notification_id
    #   The ID of the notification.
    #   @return [String]
    #
    # @!attribute [rw] connection_notification_arn
    #   The ARN for the SNS topic for the notification.
    #   @return [String]
    #
    # @!attribute [rw] connection_events
    #   The events for the endpoint. Valid values are `Accept`, `Connect`,
    #   `Delete`, and `Reject`.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointConnectionNotificationRequest AWS API Documentation
    #
    class ModifyVpcEndpointConnectionNotificationRequest < Struct.new(
      :dry_run,
      :connection_notification_id,
      :connection_notification_arn,
      :connection_events)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return_value
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointConnectionNotificationResult AWS API Documentation
    #
    class ModifyVpcEndpointConnectionNotificationResult < Struct.new(
      :return_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_endpoint_id
    #   The ID of the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] reset_policy
    #   (Gateway endpoint) Specify `true` to reset the policy document to
    #   the default policy. The default policy allows full access to the
    #   service.
    #   @return [Boolean]
    #
    # @!attribute [rw] policy_document
    #   (Interface and gateway endpoints) A policy to attach to the endpoint
    #   that controls access to the service. The policy must be in valid
    #   JSON format.
    #   @return [String]
    #
    # @!attribute [rw] add_route_table_ids
    #   (Gateway endpoint) The IDs of the route tables to associate with the
    #   endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_route_table_ids
    #   (Gateway endpoint) The IDs of the route tables to disassociate from
    #   the endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] add_subnet_ids
    #   (Interface and Gateway Load Balancer endpoints) The IDs of the
    #   subnets in which to serve the endpoint. For a Gateway Load Balancer
    #   endpoint, you can specify only one subnet.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_subnet_ids
    #   (Interface endpoint) The IDs of the subnets from which to remove the
    #   endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] add_security_group_ids
    #   (Interface endpoint) The IDs of the security groups to associate
    #   with the endpoint network interfaces.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_security_group_ids
    #   (Interface endpoint) The IDs of the security groups to disassociate
    #   from the endpoint network interfaces.
    #   @return [Array<String>]
    #
    # @!attribute [rw] ip_address_type
    #   The IP address type for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] dns_options
    #   The DNS options for the endpoint.
    #   @return [Types::DnsOptionsSpecification]
    #
    # @!attribute [rw] private_dns_enabled
    #   (Interface endpoint) Indicates whether a private hosted zone is
    #   associated with the VPC.
    #   @return [Boolean]
    #
    # @!attribute [rw] subnet_configurations
    #   The subnet configurations for the endpoint.
    #   @return [Array<Types::SubnetConfiguration>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointRequest AWS API Documentation
    #
    class ModifyVpcEndpointRequest < Struct.new(
      :dry_run,
      :vpc_endpoint_id,
      :reset_policy,
      :policy_document,
      :add_route_table_ids,
      :remove_route_table_ids,
      :add_subnet_ids,
      :remove_subnet_ids,
      :add_security_group_ids,
      :remove_security_group_ids,
      :ip_address_type,
      :dns_options,
      :private_dns_enabled,
      :subnet_configurations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointResult AWS API Documentation
    #
    class ModifyVpcEndpointResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_id
    #   The ID of the service.
    #   @return [String]
    #
    # @!attribute [rw] private_dns_name
    #   (Interface endpoint configuration) The private DNS name to assign to
    #   the endpoint service.
    #   @return [String]
    #
    # @!attribute [rw] remove_private_dns_name
    #   (Interface endpoint configuration) Removes the private DNS name of
    #   the endpoint service.
    #   @return [Boolean]
    #
    # @!attribute [rw] acceptance_required
    #   Indicates whether requests to create an endpoint to the service must
    #   be accepted.
    #   @return [Boolean]
    #
    # @!attribute [rw] add_network_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of Network Load Balancers to add to
    #   the service configuration.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_network_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of Network Load Balancers to remove
    #   from the service configuration.
    #   @return [Array<String>]
    #
    # @!attribute [rw] add_gateway_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of Gateway Load Balancers to add to
    #   the service configuration.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_gateway_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of Gateway Load Balancers to remove
    #   from the service configuration.
    #   @return [Array<String>]
    #
    # @!attribute [rw] add_supported_ip_address_types
    #   The IP address types to add to the service configuration.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_supported_ip_address_types
    #   The IP address types to remove from the service configuration.
    #   @return [Array<String>]
    #
    # @!attribute [rw] add_supported_regions
    #   The supported Regions to add to the service configuration.
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_supported_regions
    #   The supported Regions to remove from the service configuration.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServiceConfigurationRequest AWS API Documentation
    #
    class ModifyVpcEndpointServiceConfigurationRequest < Struct.new(
      :dry_run,
      :service_id,
      :private_dns_name,
      :remove_private_dns_name,
      :acceptance_required,
      :add_network_load_balancer_arns,
      :remove_network_load_balancer_arns,
      :add_gateway_load_balancer_arns,
      :remove_gateway_load_balancer_arns,
      :add_supported_ip_address_types,
      :remove_supported_ip_address_types,
      :add_supported_regions,
      :remove_supported_regions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServiceConfigurationResult AWS API Documentation
    #
    class ModifyVpcEndpointServiceConfigurationResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_id
    #   The ID of the service.
    #   @return [String]
    #
    # @!attribute [rw] payer_responsibility
    #   The entity that is responsible for the endpoint costs. The default
    #   is the endpoint owner. If you set the payer responsibility to the
    #   service owner, you cannot set it back to the endpoint owner.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServicePayerResponsibilityRequest AWS API Documentation
    #
    class ModifyVpcEndpointServicePayerResponsibilityRequest < Struct.new(
      :dry_run,
      :service_id,
      :payer_responsibility)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return_value
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServicePayerResponsibilityResult AWS API Documentation
    #
    class ModifyVpcEndpointServicePayerResponsibilityResult < Struct.new(
      :return_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_id
    #   The ID of the service.
    #   @return [String]
    #
    # @!attribute [rw] add_allowed_principals
    #   The Amazon Resource Names (ARN) of the principals. Permissions are
    #   granted to the principals in this list. To grant permissions to all
    #   principals, specify an asterisk (*).
    #   @return [Array<String>]
    #
    # @!attribute [rw] remove_allowed_principals
    #   The Amazon Resource Names (ARN) of the principals. Permissions are
    #   revoked for principals in this list.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServicePermissionsRequest AWS API Documentation
    #
    class ModifyVpcEndpointServicePermissionsRequest < Struct.new(
      :dry_run,
      :service_id,
      :add_allowed_principals,
      :remove_allowed_principals)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] added_principals
    #   Information about the added principals.
    #   @return [Array<Types::AddedPrincipal>]
    #
    # @!attribute [rw] return_value
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcEndpointServicePermissionsResult AWS API Documentation
    #
    class ModifyVpcEndpointServicePermissionsResult < Struct.new(
      :added_principals,
      :return_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] accepter_peering_connection_options
    #   The VPC peering connection options for the accepter VPC.
    #   @return [Types::PeeringConnectionOptionsRequest]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] requester_peering_connection_options
    #   The VPC peering connection options for the requester VPC.
    #   @return [Types::PeeringConnectionOptionsRequest]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of the VPC peering connection.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptionsRequest AWS API Documentation
    #
    class ModifyVpcPeeringConnectionOptionsRequest < Struct.new(
      :accepter_peering_connection_options,
      :dry_run,
      :requester_peering_connection_options,
      :vpc_peering_connection_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] accepter_peering_connection_options
    #   Information about the VPC peering connection options for the
    #   accepter VPC.
    #   @return [Types::PeeringConnectionOptions]
    #
    # @!attribute [rw] requester_peering_connection_options
    #   Information about the VPC peering connection options for the
    #   requester VPC.
    #   @return [Types::PeeringConnectionOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcPeeringConnectionOptionsResult AWS API Documentation
    #
    class ModifyVpcPeeringConnectionOptionsResult < Struct.new(
      :accepter_peering_connection_options,
      :requester_peering_connection_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] instance_tenancy
    #   The instance tenancy attribute for the VPC.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcTenancyRequest AWS API Documentation
    #
    class ModifyVpcTenancyRequest < Struct.new(
      :vpc_id,
      :instance_tenancy,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return_value
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpcTenancyResult AWS API Documentation
    #
    class ModifyVpcTenancyResult < Struct.new(
      :return_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_id
    #   The ID of the Site-to-Site VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] local_ipv_4_network_cidr
    #   The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
    #   connection.
    #
    #   Default: `0.0.0.0/0`
    #   @return [String]
    #
    # @!attribute [rw] remote_ipv_4_network_cidr
    #   The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
    #
    #   Default: `0.0.0.0/0`
    #   @return [String]
    #
    # @!attribute [rw] local_ipv_6_network_cidr
    #   The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
    #   connection.
    #
    #   Default: `::/0`
    #   @return [String]
    #
    # @!attribute [rw] remote_ipv_6_network_cidr
    #   The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
    #
    #   Default: `::/0`
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnConnectionOptionsRequest AWS API Documentation
    #
    class ModifyVpnConnectionOptionsRequest < Struct.new(
      :vpn_connection_id,
      :local_ipv_4_network_cidr,
      :remote_ipv_4_network_cidr,
      :local_ipv_6_network_cidr,
      :remote_ipv_6_network_cidr,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection
    #   Information about the VPN connection.
    #   @return [Types::VpnConnection]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnConnectionOptionsResult AWS API Documentation
    #
    class ModifyVpnConnectionOptionsResult < Struct.new(
      :vpn_connection)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_id
    #   The ID of the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] customer_gateway_id
    #   The ID of the customer gateway at your end of the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] vpn_gateway_id
    #   The ID of the virtual private gateway at the Amazon Web Services
    #   side of the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnConnectionRequest AWS API Documentation
    #
    class ModifyVpnConnectionRequest < Struct.new(
      :vpn_connection_id,
      :transit_gateway_id,
      :customer_gateway_id,
      :vpn_gateway_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection
    #   Information about the VPN connection.
    #   @return [Types::VpnConnection]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnConnectionResult AWS API Documentation
    #
    class ModifyVpnConnectionResult < Struct.new(
      :vpn_connection)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_id
    #   The ID of the Amazon Web Services Site-to-Site VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] vpn_tunnel_outside_ip_address
    #   The external IP address of the VPN tunnel.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelCertificateRequest AWS API Documentation
    #
    class ModifyVpnTunnelCertificateRequest < Struct.new(
      :vpn_connection_id,
      :vpn_tunnel_outside_ip_address,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection
    #   Information about the VPN connection.
    #   @return [Types::VpnConnection]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelCertificateResult AWS API Documentation
    #
    class ModifyVpnTunnelCertificateResult < Struct.new(
      :vpn_connection)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_id
    #   The ID of the Amazon Web Services Site-to-Site VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] vpn_tunnel_outside_ip_address
    #   The external IP address of the VPN tunnel.
    #   @return [String]
    #
    # @!attribute [rw] tunnel_options
    #   The tunnel options to modify.
    #   @return [Types::ModifyVpnTunnelOptionsSpecification]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] skip_tunnel_replacement
    #   Choose whether or not to trigger immediate tunnel replacement. This
    #   is only applicable when turning on or off
    #   `EnableTunnelLifecycleControl`.
    #
    #   Valid values: `True` \| `False`
    #   @return [Boolean]
    #
    # @!attribute [rw] pre_shared_key_storage
    #   Specifies the storage mode for the pre-shared key (PSK). Valid
    #   values are `Standard` (stored in Site-to-Site VPN service) or
    #   `SecretsManager` (stored in Amazon Web Services Secrets Manager).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelOptionsRequest AWS API Documentation
    #
    class ModifyVpnTunnelOptionsRequest < Struct.new(
      :vpn_connection_id,
      :vpn_tunnel_outside_ip_address,
      :tunnel_options,
      :dry_run,
      :skip_tunnel_replacement,
      :pre_shared_key_storage)
      SENSITIVE = [:tunnel_options]
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection
    #   Information about the VPN connection.
    #   @return [Types::VpnConnection]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelOptionsResult AWS API Documentation
    #
    class ModifyVpnTunnelOptionsResult < Struct.new(
      :vpn_connection)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Amazon Web Services Site-to-Site VPN tunnel options to modify.
    #
    # @!attribute [rw] tunnel_inside_cidr
    #   The range of inside IPv4 addresses for the tunnel. Any specified
    #   CIDR blocks must be unique across all VPN connections that use the
    #   same virtual private gateway.
    #
    #   Constraints: A size /30 CIDR block from the `169.254.0.0/16` range.
    #   The following CIDR blocks are reserved and cannot be used:
    #
    #   * `169.254.0.0/30`
    #
    #   * `169.254.1.0/30`
    #
    #   * `169.254.2.0/30`
    #
    #   * `169.254.3.0/30`
    #
    #   * `169.254.4.0/30`
    #
    #   * `169.254.5.0/30`
    #
    #   * `169.254.169.252/30`
    #   @return [String]
    #
    # @!attribute [rw] tunnel_inside_ipv_6_cidr
    #   The range of inside IPv6 addresses for the tunnel. Any specified
    #   CIDR blocks must be unique across all VPN connections that use the
    #   same transit gateway.
    #
    #   Constraints: A size /126 CIDR block from the local `fd00::/8` range.
    #   @return [String]
    #
    # @!attribute [rw] pre_shared_key
    #   The pre-shared key (PSK) to establish initial authentication between
    #   the virtual private gateway and the customer gateway.
    #
    #   Constraints: Allowed characters are alphanumeric characters, periods
    #   (.), and underscores (\_). Must be between 8 and 64 characters in
    #   length and cannot start with zero (0).
    #   @return [String]
    #
    # @!attribute [rw] phase_1_lifetime_seconds
    #   The lifetime for phase 1 of the IKE negotiation, in seconds.
    #
    #   Constraints: A value between 900 and 28,800.
    #
    #   Default: `28800`
    #   @return [Integer]
    #
    # @!attribute [rw] phase_2_lifetime_seconds
    #   The lifetime for phase 2 of the IKE negotiation, in seconds.
    #
    #   Constraints: A value between 900 and 3,600. The value must be less
    #   than the value for `Phase1LifetimeSeconds`.
    #
    #   Default: `3600`
    #   @return [Integer]
    #
    # @!attribute [rw] rekey_margin_time_seconds
    #   The margin time, in seconds, before the phase 2 lifetime expires,
    #   during which the Amazon Web Services side of the VPN connection
    #   performs an IKE rekey. The exact time of the rekey is randomly
    #   selected based on the value for `RekeyFuzzPercentage`.
    #
    #   Constraints: A value between 60 and half of `Phase2LifetimeSeconds`.
    #
    #   Default: `270`
    #   @return [Integer]
    #
    # @!attribute [rw] rekey_fuzz_percentage
    #   The percentage of the rekey window (determined by
    #   `RekeyMarginTimeSeconds`) during which the rekey time is randomly
    #   selected.
    #
    #   Constraints: A value between 0 and 100.
    #
    #   Default: `100`
    #   @return [Integer]
    #
    # @!attribute [rw] replay_window_size
    #   The number of packets in an IKE replay window.
    #
    #   Constraints: A value between 64 and 2048.
    #
    #   Default: `1024`
    #   @return [Integer]
    #
    # @!attribute [rw] dpd_timeout_seconds
    #   The number of seconds after which a DPD timeout occurs. A DPD
    #   timeout of 40 seconds means that the VPN endpoint will consider the
    #   peer dead 30 seconds after the first failed keep-alive.
    #
    #   Constraints: A value greater than or equal to 30.
    #
    #   Default: `40`
    #   @return [Integer]
    #
    # @!attribute [rw] dpd_timeout_action
    #   The action to take after DPD timeout occurs. Specify `restart` to
    #   restart the IKE initiation. Specify `clear` to end the IKE session.
    #
    #   Valid Values: `clear` \| `none` \| `restart`
    #
    #   Default: `clear`
    #   @return [String]
    #
    # @!attribute [rw] phase_1_encryption_algorithms
    #   One or more encryption algorithms that are permitted for the VPN
    #   tunnel for phase 1 IKE negotiations.
    #
    #   Valid values: `AES128` \| `AES256` \| `AES128-GCM-16` \|
    #   `AES256-GCM-16`
    #   @return [Array<Types::Phase1EncryptionAlgorithmsRequestListValue>]
    #
    # @!attribute [rw] phase_2_encryption_algorithms
    #   One or more encryption algorithms that are permitted for the VPN
    #   tunnel for phase 2 IKE negotiations.
    #
    #   Valid values: `AES128` \| `AES256` \| `AES128-GCM-16` \|
    #   `AES256-GCM-16`
    #   @return [Array<Types::Phase2EncryptionAlgorithmsRequestListValue>]
    #
    # @!attribute [rw] phase_1_integrity_algorithms
    #   One or more integrity algorithms that are permitted for the VPN
    #   tunnel for phase 1 IKE negotiations.
    #
    #   Valid values: `SHA1` \| `SHA2-256` \| `SHA2-384` \| `SHA2-512`
    #   @return [Array<Types::Phase1IntegrityAlgorithmsRequestListValue>]
    #
    # @!attribute [rw] phase_2_integrity_algorithms
    #   One or more integrity algorithms that are permitted for the VPN
    #   tunnel for phase 2 IKE negotiations.
    #
    #   Valid values: `SHA1` \| `SHA2-256` \| `SHA2-384` \| `SHA2-512`
    #   @return [Array<Types::Phase2IntegrityAlgorithmsRequestListValue>]
    #
    # @!attribute [rw] phase_1_dh_group_numbers
    #   One or more Diffie-Hellman group numbers that are permitted for the
    #   VPN tunnel for phase 1 IKE negotiations.
    #
    #   Valid values: `2` \| `14` \| `15` \| `16` \| `17` \| `18` \| `19` \|
    #   `20` \| `21` \| `22` \| `23` \| `24`
    #   @return [Array<Types::Phase1DHGroupNumbersRequestListValue>]
    #
    # @!attribute [rw] phase_2_dh_group_numbers
    #   One or more Diffie-Hellman group numbers that are permitted for the
    #   VPN tunnel for phase 2 IKE negotiations.
    #
    #   Valid values: `2` \| `5` \| `14` \| `15` \| `16` \| `17` \| `18` \|
    #   `19` \| `20` \| `21` \| `22` \| `23` \| `24`
    #   @return [Array<Types::Phase2DHGroupNumbersRequestListValue>]
    #
    # @!attribute [rw] ike_versions
    #   The IKE versions that are permitted for the VPN tunnel.
    #
    #   Valid values: `ikev1` \| `ikev2`
    #   @return [Array<Types::IKEVersionsRequestListValue>]
    #
    # @!attribute [rw] startup_action
    #   The action to take when the establishing the tunnel for the VPN
    #   connection. By default, your customer gateway device must initiate
    #   the IKE negotiation and bring up the tunnel. Specify `start` for
    #   Amazon Web Services to initiate the IKE negotiation.
    #
    #   Valid Values: `add` \| `start`
    #
    #   Default: `add`
    #   @return [String]
    #
    # @!attribute [rw] log_options
    #   Options for logging VPN tunnel activity.
    #   @return [Types::VpnTunnelLogOptionsSpecification]
    #
    # @!attribute [rw] enable_tunnel_lifecycle_control
    #   Turn on or off tunnel endpoint lifecycle control feature.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ModifyVpnTunnelOptionsSpecification AWS API Documentation
    #
    class ModifyVpnTunnelOptionsSpecification < Struct.new(
      :tunnel_inside_cidr,
      :tunnel_inside_ipv_6_cidr,
      :pre_shared_key,
      :phase_1_lifetime_seconds,
      :phase_2_lifetime_seconds,
      :rekey_margin_time_seconds,
      :rekey_fuzz_percentage,
      :replay_window_size,
      :dpd_timeout_seconds,
      :dpd_timeout_action,
      :phase_1_encryption_algorithms,
      :phase_2_encryption_algorithms,
      :phase_1_integrity_algorithms,
      :phase_2_integrity_algorithms,
      :phase_1_dh_group_numbers,
      :phase_2_dh_group_numbers,
      :ike_versions,
      :startup_action,
      :log_options,
      :enable_tunnel_lifecycle_control)
      SENSITIVE = [:pre_shared_key]
      include Aws::Structure
    end

    # @!attribute [rw] instance_ids
    #   The IDs of the instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstancesRequest AWS API Documentation
    #
    class MonitorInstancesRequest < Struct.new(
      :instance_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_monitorings
    #   The monitoring information.
    #   @return [Array<Types::InstanceMonitoring>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MonitorInstancesResult AWS API Documentation
    #
    class MonitorInstancesResult < Struct.new(
      :instance_monitorings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the monitoring of an instance.
    #
    # @!attribute [rw] state
    #   Indicates whether detailed monitoring is enabled. Otherwise, basic
    #   monitoring is enabled.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Monitoring AWS API Documentation
    #
    class Monitoring < Struct.new(
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] public_ip
    #   The Elastic IP address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpcRequest AWS API Documentation
    #
    class MoveAddressToVpcRequest < Struct.new(
      :dry_run,
      :public_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_id
    #   The allocation ID for the Elastic IP address.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status of the move of the IP address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveAddressToVpcResult AWS API Documentation
    #
    class MoveAddressToVpcResult < Struct.new(
      :allocation_id,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] cidr
    #   The BYOIP CIDR.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_id
    #   The IPAM pool ID.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_owner
    #   The Amazon Web Services account ID of the owner of the IPAM pool.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveByoipCidrToIpamRequest AWS API Documentation
    #
    class MoveByoipCidrToIpamRequest < Struct.new(
      :dry_run,
      :cidr,
      :ipam_pool_id,
      :ipam_pool_owner)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] byoip_cidr
    #   The BYOIP CIDR.
    #   @return [Types::ByoipCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveByoipCidrToIpamResult AWS API Documentation
    #
    class MoveByoipCidrToIpamResult < Struct.new(
      :byoip_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensure
    #   Idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] source_capacity_reservation_id
    #   The ID of the Capacity Reservation from which you want to move
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] destination_capacity_reservation_id
    #   The ID of the Capacity Reservation that you want to move capacity
    #   into.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances that you want to move from the source
    #   Capacity Reservation.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveCapacityReservationInstancesRequest AWS API Documentation
    #
    class MoveCapacityReservationInstancesRequest < Struct.new(
      :dry_run,
      :client_token,
      :source_capacity_reservation_id,
      :destination_capacity_reservation_id,
      :instance_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] source_capacity_reservation
    #   Information about the source Capacity Reservation.
    #   @return [Types::CapacityReservation]
    #
    # @!attribute [rw] destination_capacity_reservation
    #   Information about the destination Capacity Reservation.
    #   @return [Types::CapacityReservation]
    #
    # @!attribute [rw] instance_count
    #   The number of instances that were moved from the source Capacity
    #   Reservation to the destination Capacity Reservation.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MoveCapacityReservationInstancesResult AWS API Documentation
    #
    class MoveCapacityReservationInstancesResult < Struct.new(
      :source_capacity_reservation,
      :destination_capacity_reservation,
      :instance_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> This action is deprecated.
    #
    #  </note>
    #
    # Describes the status of a moving Elastic IP address.
    #
    # @!attribute [rw] move_status
    #   The status of the Elastic IP address that's being moved or
    #   restored.
    #   @return [String]
    #
    # @!attribute [rw] public_ip
    #   The Elastic IP address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/MovingAddressStatus AWS API Documentation
    #
    class MovingAddressStatus < Struct.new(
      :move_status,
      :public_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a NAT gateway.
    #
    # @!attribute [rw] create_time
    #   The date and time the NAT gateway was created.
    #   @return [Time]
    #
    # @!attribute [rw] delete_time
    #   The date and time the NAT gateway was deleted, if applicable.
    #   @return [Time]
    #
    # @!attribute [rw] failure_code
    #   If the NAT gateway could not be created, specifies the error code
    #   for the failure. (`InsufficientFreeAddressesInSubnet` \|
    #   `Gateway.NotAttached` \| `InvalidAllocationID.NotFound` \|
    #   `Resource.AlreadyAssociated` \| `InternalError` \|
    #   `InvalidSubnetID.NotFound`)
    #   @return [String]
    #
    # @!attribute [rw] failure_message
    #   If the NAT gateway could not be created, specifies the error message
    #   for the failure, that corresponds to the error code.
    #
    #   * For InsufficientFreeAddressesInSubnet: "Subnet has insufficient
    #     free addresses to create this NAT gateway"
    #
    #   * For Gateway.NotAttached: "Network vpc-xxxxxxxx has no Internet
    #     gateway attached"
    #
    #   * For InvalidAllocationID.NotFound: "Elastic IP address
    #     eipalloc-xxxxxxxx could not be associated with this NAT gateway"
    #
    #   * For Resource.AlreadyAssociated: "Elastic IP address
    #     eipalloc-xxxxxxxx is already associated"
    #
    #   * For InternalError: "Network interface eni-xxxxxxxx, created and
    #     used internally by this NAT gateway is in an invalid state. Please
    #     try again."
    #
    #   * For InvalidSubnetID.NotFound: "The specified subnet
    #     subnet-xxxxxxxx does not exist or could not be found."
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway_addresses
    #   Information about the IP addresses and network interface associated
    #   with the NAT gateway.
    #   @return [Array<Types::NatGatewayAddress>]
    #
    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] provisioned_bandwidth
    #   Reserved. If you need to sustain traffic greater than the
    #   [documented limits][1], contact Amazon Web Services Support.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-gateways
    #   @return [Types::ProvisionedBandwidth]
    #
    # @!attribute [rw] state
    #   The state of the NAT gateway.
    #
    #   * `pending`: The NAT gateway is being created and is not ready to
    #     process traffic.
    #
    #   * `failed`: The NAT gateway could not be created. Check the
    #     `failureCode` and `failureMessage` fields for the reason.
    #
    #   * `available`: The NAT gateway is able to process traffic. This
    #     status remains until you delete the NAT gateway, and does not
    #     indicate the health of the NAT gateway.
    #
    #   * `deleting`: The NAT gateway is in the process of being terminated
    #     and may still be processing traffic.
    #
    #   * `deleted`: The NAT gateway has been terminated and is no longer
    #     processing traffic.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which the NAT gateway is located.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC in which the NAT gateway is located.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags for the NAT gateway.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] connectivity_type
    #   Indicates whether the NAT gateway supports public or private
    #   connectivity.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NatGateway AWS API Documentation
    #
    class NatGateway < Struct.new(
      :create_time,
      :delete_time,
      :failure_code,
      :failure_message,
      :nat_gateway_addresses,
      :nat_gateway_id,
      :provisioned_bandwidth,
      :state,
      :subnet_id,
      :vpc_id,
      :tags,
      :connectivity_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the IP addresses and network interface associated with a NAT
    # gateway.
    #
    # @!attribute [rw] allocation_id
    #   \[Public NAT gateway only\] The allocation ID of the Elastic IP
    #   address that's associated with the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface associated with the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] private_ip
    #   The private IP address associated with the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] public_ip
    #   \[Public NAT gateway only\] The Elastic IP address associated with
    #   the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] association_id
    #   \[Public NAT gateway only\] The association ID of the Elastic IP
    #   address that's associated with the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] is_primary
    #   Defines if the IP address is the primary address.
    #   @return [Boolean]
    #
    # @!attribute [rw] failure_message
    #   The address failure message.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The address status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NatGatewayAddress AWS API Documentation
    #
    class NatGatewayAddress < Struct.new(
      :allocation_id,
      :network_interface_id,
      :private_ip,
      :public_ip,
      :association_id,
      :is_primary,
      :failure_message,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the OpenID Connect (OIDC) options.
    #
    # @!attribute [rw] public_signing_key_endpoint
    #   The public signing key endpoint.
    #   @return [String]
    #
    # @!attribute [rw] issuer
    #   The OIDC issuer identifier of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] authorization_endpoint
    #   The authorization endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] token_endpoint
    #   The token endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] user_info_endpoint
    #   The user info endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] client_id
    #   The OAuth 2.0 client identifier.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   The set of user claims to be requested from the IdP.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NativeApplicationOidcOptions AWS API Documentation
    #
    class NativeApplicationOidcOptions < Struct.new(
      :public_signing_key_endpoint,
      :issuer,
      :authorization_endpoint,
      :token_endpoint,
      :user_info_endpoint,
      :client_id,
      :scope)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network ACL.
    #
    # @!attribute [rw] associations
    #   Any associations between the network ACL and your subnets
    #   @return [Array<Types::NetworkAclAssociation>]
    #
    # @!attribute [rw] entries
    #   The entries (rules) in the network ACL.
    #   @return [Array<Types::NetworkAclEntry>]
    #
    # @!attribute [rw] is_default
    #   Indicates whether this is the default network ACL for the VPC.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_acl_id
    #   The ID of the network ACL.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the network ACL.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC for the network ACL.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the network ACL.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkAcl AWS API Documentation
    #
    class NetworkAcl < Struct.new(
      :associations,
      :entries,
      :is_default,
      :network_acl_id,
      :tags,
      :vpc_id,
      :owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an association between a network ACL and a subnet.
    #
    # @!attribute [rw] network_acl_association_id
    #   The ID of the association between a network ACL and a subnet.
    #   @return [String]
    #
    # @!attribute [rw] network_acl_id
    #   The ID of the network ACL.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkAclAssociation AWS API Documentation
    #
    class NetworkAclAssociation < Struct.new(
      :network_acl_association_id,
      :network_acl_id,
      :subnet_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an entry in a network ACL.
    #
    # @!attribute [rw] cidr_block
    #   The IPv4 network range to allow or deny, in CIDR notation.
    #   @return [String]
    #
    # @!attribute [rw] egress
    #   Indicates whether the rule is an egress rule (applied to traffic
    #   leaving the subnet).
    #   @return [Boolean]
    #
    # @!attribute [rw] icmp_type_code
    #   ICMP protocol: The ICMP type and code.
    #   @return [Types::IcmpTypeCode]
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   The IPv6 network range to allow or deny, in CIDR notation.
    #   @return [String]
    #
    # @!attribute [rw] port_range
    #   TCP or UDP protocols: The range of ports the rule applies to.
    #   @return [Types::PortRange]
    #
    # @!attribute [rw] protocol
    #   The protocol number. A value of "-1" means all protocols.
    #   @return [String]
    #
    # @!attribute [rw] rule_action
    #   Indicates whether to allow or deny the traffic that matches the
    #   rule.
    #   @return [String]
    #
    # @!attribute [rw] rule_number
    #   The rule number for the entry. ACL entries are processed in
    #   ascending order by rule number.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkAclEntry AWS API Documentation
    #
    class NetworkAclEntry < Struct.new(
      :cidr_block,
      :egress,
      :icmp_type_code,
      :ipv_6_cidr_block,
      :port_range,
      :protocol,
      :rule_action,
      :rule_number)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of network bandwidth, in gigabits per
    # second (Gbps).
    #
    # <note markdown="1"> Setting the minimum bandwidth does not guarantee that your instance
    # will achieve the minimum bandwidth. Amazon EC2 will identify instance
    # types that support the specified minimum bandwidth, but the actual
    # bandwidth of your instance might go below the specified minimum at
    # times. For more information, see [Available instance bandwidth][1] in
    # the *Amazon EC2 User Guide*.
    #
    #  </note>
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth
    #
    # @!attribute [rw] min
    #   The minimum amount of network bandwidth, in Gbps. If this parameter
    #   is not specified, there is no minimum limit.
    #   @return [Float]
    #
    # @!attribute [rw] max
    #   The maximum amount of network bandwidth, in Gbps. If this parameter
    #   is not specified, there is no maximum limit.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkBandwidthGbps AWS API Documentation
    #
    class NetworkBandwidthGbps < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of network bandwidth, in gigabits per
    # second (Gbps).
    #
    # <note markdown="1"> Setting the minimum bandwidth does not guarantee that your instance
    # will achieve the minimum bandwidth. Amazon EC2 will identify instance
    # types that support the specified minimum bandwidth, but the actual
    # bandwidth of your instance might go below the specified minimum at
    # times. For more information, see [Available instance bandwidth][1] in
    # the *Amazon EC2 User Guide*.
    #
    #  </note>
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth
    #
    # @!attribute [rw] min
    #   The minimum amount of network bandwidth, in Gbps. To specify no
    #   minimum limit, omit this parameter.
    #   @return [Float]
    #
    # @!attribute [rw] max
    #   The maximum amount of network bandwidth, in Gbps. To specify no
    #   maximum limit, omit this parameter.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkBandwidthGbpsRequest AWS API Documentation
    #
    class NetworkBandwidthGbpsRequest < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the network card support of the instance type.
    #
    # @!attribute [rw] network_card_index
    #   The index of the network card.
    #   @return [Integer]
    #
    # @!attribute [rw] network_performance
    #   The network performance of the network card.
    #   @return [String]
    #
    # @!attribute [rw] maximum_network_interfaces
    #   The maximum number of network interfaces for the network card.
    #   @return [Integer]
    #
    # @!attribute [rw] baseline_bandwidth_in_gbps
    #   The baseline network performance of the network card, in Gbps.
    #   @return [Float]
    #
    # @!attribute [rw] peak_bandwidth_in_gbps
    #   The peak (burst) network performance of the network card, in Gbps.
    #   @return [Float]
    #
    # @!attribute [rw] default_ena_queue_count_per_interface
    #   The default number of the ENA queues for each interface.
    #   @return [Integer]
    #
    # @!attribute [rw] maximum_ena_queue_count
    #   The maximum number of the ENA queues.
    #   @return [Integer]
    #
    # @!attribute [rw] maximum_ena_queue_count_per_interface
    #   The maximum number of the ENA queues for each interface.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkCardInfo AWS API Documentation
    #
    class NetworkCardInfo < Struct.new(
      :network_card_index,
      :network_performance,
      :maximum_network_interfaces,
      :baseline_bandwidth_in_gbps,
      :peak_bandwidth_in_gbps,
      :default_ena_queue_count_per_interface,
      :maximum_ena_queue_count,
      :maximum_ena_queue_count_per_interface)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the networking features of the instance type.
    #
    # @!attribute [rw] network_performance
    #   The network performance.
    #   @return [String]
    #
    # @!attribute [rw] maximum_network_interfaces
    #   The maximum number of network interfaces for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] maximum_network_cards
    #   The maximum number of physical network cards that can be allocated
    #   to the instance.
    #   @return [Integer]
    #
    # @!attribute [rw] default_network_card_index
    #   The index of the default network card, starting at 0.
    #   @return [Integer]
    #
    # @!attribute [rw] network_cards
    #   Describes the network cards for the instance type.
    #   @return [Array<Types::NetworkCardInfo>]
    #
    # @!attribute [rw] ipv_4_addresses_per_interface
    #   The maximum number of IPv4 addresses per network interface.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_addresses_per_interface
    #   The maximum number of IPv6 addresses per network interface.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_supported
    #   Indicates whether IPv6 is supported.
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_support
    #   Indicates whether Elastic Network Adapter (ENA) is supported.
    #   @return [String]
    #
    # @!attribute [rw] efa_supported
    #   Indicates whether Elastic Fabric Adapter (EFA) is supported.
    #   @return [Boolean]
    #
    # @!attribute [rw] efa_info
    #   Describes the Elastic Fabric Adapters for the instance type.
    #   @return [Types::EfaInfo]
    #
    # @!attribute [rw] encryption_in_transit_supported
    #   Indicates whether the instance type automatically encrypts
    #   in-transit traffic between instances.
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_srd_supported
    #   Indicates whether the instance type supports ENA Express. ENA
    #   Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
    #   technology to increase the maximum bandwidth used per stream and
    #   minimize tail latency of network traffic between EC2 instances.
    #   @return [Boolean]
    #
    # @!attribute [rw] bandwidth_weightings
    #   A list of valid settings for configurable bandwidth weighting for
    #   the instance type, if supported.
    #   @return [Array<String>]
    #
    # @!attribute [rw] flexible_ena_queues_support
    #   Indicates whether changing the number of ENA queues is supported.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInfo AWS API Documentation
    #
    class NetworkInfo < Struct.new(
      :network_performance,
      :maximum_network_interfaces,
      :maximum_network_cards,
      :default_network_card_index,
      :network_cards,
      :ipv_4_addresses_per_interface,
      :ipv_6_addresses_per_interface,
      :ipv_6_supported,
      :ena_support,
      :efa_supported,
      :efa_info,
      :encryption_in_transit_supported,
      :ena_srd_supported,
      :bandwidth_weightings,
      :flexible_ena_queues_support)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Network Access Scope.
    #
    # @!attribute [rw] network_insights_access_scope_id
    #   The ID of the Network Access Scope.
    #   @return [String]
    #
    # @!attribute [rw] network_insights_access_scope_arn
    #   The Amazon Resource Name (ARN) of the Network Access Scope.
    #   @return [String]
    #
    # @!attribute [rw] created_date
    #   The creation date.
    #   @return [Time]
    #
    # @!attribute [rw] updated_date
    #   The last updated date.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInsightsAccessScope AWS API Documentation
    #
    class NetworkInsightsAccessScope < Struct.new(
      :network_insights_access_scope_id,
      :network_insights_access_scope_arn,
      :created_date,
      :updated_date,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Network Access Scope analysis.
    #
    # @!attribute [rw] network_insights_access_scope_analysis_id
    #   The ID of the Network Access Scope analysis.
    #   @return [String]
    #
    # @!attribute [rw] network_insights_access_scope_analysis_arn
    #   The Amazon Resource Name (ARN) of the Network Access Scope analysis.
    #   @return [String]
    #
    # @!attribute [rw] network_insights_access_scope_id
    #   The ID of the Network Access Scope.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The status message.
    #   @return [String]
    #
    # @!attribute [rw] warning_message
    #   The warning message.
    #   @return [String]
    #
    # @!attribute [rw] start_date
    #   The analysis start date.
    #   @return [Time]
    #
    # @!attribute [rw] end_date
    #   The analysis end date.
    #   @return [Time]
    #
    # @!attribute [rw] findings_found
    #   Indicates whether there are findings.
    #   @return [String]
    #
    # @!attribute [rw] analyzed_eni_count
    #   The number of network interfaces analyzed.
    #   @return [Integer]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInsightsAccessScopeAnalysis AWS API Documentation
    #
    class NetworkInsightsAccessScopeAnalysis < Struct.new(
      :network_insights_access_scope_analysis_id,
      :network_insights_access_scope_analysis_arn,
      :network_insights_access_scope_id,
      :status,
      :status_message,
      :warning_message,
      :start_date,
      :end_date,
      :findings_found,
      :analyzed_eni_count,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Network Access Scope content.
    #
    # @!attribute [rw] network_insights_access_scope_id
    #   The ID of the Network Access Scope.
    #   @return [String]
    #
    # @!attribute [rw] match_paths
    #   The paths to match.
    #   @return [Array<Types::AccessScopePath>]
    #
    # @!attribute [rw] exclude_paths
    #   The paths to exclude.
    #   @return [Array<Types::AccessScopePath>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInsightsAccessScopeContent AWS API Documentation
    #
    class NetworkInsightsAccessScopeContent < Struct.new(
      :network_insights_access_scope_id,
      :match_paths,
      :exclude_paths)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network insights analysis.
    #
    # @!attribute [rw] network_insights_analysis_id
    #   The ID of the network insights analysis.
    #   @return [String]
    #
    # @!attribute [rw] network_insights_analysis_arn
    #   The Amazon Resource Name (ARN) of the network insights analysis.
    #   @return [String]
    #
    # @!attribute [rw] network_insights_path_id
    #   The ID of the path.
    #   @return [String]
    #
    # @!attribute [rw] additional_accounts
    #   The member accounts that contain resources that the path can
    #   traverse.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filter_in_arns
    #   The Amazon Resource Names (ARN) of the resources that the path must
    #   traverse.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filter_out_arns
    #   The Amazon Resource Names (ARN) of the resources that the path must
    #   ignore.
    #   @return [Array<String>]
    #
    # @!attribute [rw] start_date
    #   The time the analysis started.
    #   @return [Time]
    #
    # @!attribute [rw] status
    #   The status of the network insights analysis.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The status message, if the status is `failed`.
    #   @return [String]
    #
    # @!attribute [rw] warning_message
    #   The warning message.
    #   @return [String]
    #
    # @!attribute [rw] network_path_found
    #   Indicates whether the destination is reachable from the source.
    #   @return [Boolean]
    #
    # @!attribute [rw] forward_path_components
    #   The components in the path from source to destination.
    #   @return [Array<Types::PathComponent>]
    #
    # @!attribute [rw] return_path_components
    #   The components in the path from destination to source.
    #   @return [Array<Types::PathComponent>]
    #
    # @!attribute [rw] explanations
    #   The explanations. For more information, see [Reachability Analyzer
    #   explanation codes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/reachability/explanation-codes.html
    #   @return [Array<Types::Explanation>]
    #
    # @!attribute [rw] alternate_path_hints
    #   Potential intermediate components.
    #   @return [Array<Types::AlternatePathHint>]
    #
    # @!attribute [rw] suggested_accounts
    #   Potential intermediate accounts.
    #   @return [Array<String>]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInsightsAnalysis AWS API Documentation
    #
    class NetworkInsightsAnalysis < Struct.new(
      :network_insights_analysis_id,
      :network_insights_analysis_arn,
      :network_insights_path_id,
      :additional_accounts,
      :filter_in_arns,
      :filter_out_arns,
      :start_date,
      :status,
      :status_message,
      :warning_message,
      :network_path_found,
      :forward_path_components,
      :return_path_components,
      :explanations,
      :alternate_path_hints,
      :suggested_accounts,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a path.
    #
    # @!attribute [rw] network_insights_path_id
    #   The ID of the path.
    #   @return [String]
    #
    # @!attribute [rw] network_insights_path_arn
    #   The Amazon Resource Name (ARN) of the path.
    #   @return [String]
    #
    # @!attribute [rw] created_date
    #   The time stamp when the path was created.
    #   @return [Time]
    #
    # @!attribute [rw] source
    #   The ID of the source.
    #   @return [String]
    #
    # @!attribute [rw] destination
    #   The ID of the destination.
    #   @return [String]
    #
    # @!attribute [rw] source_arn
    #   The Amazon Resource Name (ARN) of the source.
    #   @return [String]
    #
    # @!attribute [rw] destination_arn
    #   The Amazon Resource Name (ARN) of the destination.
    #   @return [String]
    #
    # @!attribute [rw] source_ip
    #   The IP address of the source.
    #   @return [String]
    #
    # @!attribute [rw] destination_ip
    #   The IP address of the destination.
    #   @return [String]
    #
    # @!attribute [rw] protocol
    #   The protocol.
    #   @return [String]
    #
    # @!attribute [rw] destination_port
    #   The destination port.
    #   @return [Integer]
    #
    # @!attribute [rw] tags
    #   The tags associated with the path.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] filter_at_source
    #   Scopes the analysis to network paths that match specific filters at
    #   the source.
    #   @return [Types::PathFilter]
    #
    # @!attribute [rw] filter_at_destination
    #   Scopes the analysis to network paths that match specific filters at
    #   the destination.
    #   @return [Types::PathFilter]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInsightsPath AWS API Documentation
    #
    class NetworkInsightsPath < Struct.new(
      :network_insights_path_id,
      :network_insights_path_arn,
      :created_date,
      :source,
      :destination,
      :source_arn,
      :destination_arn,
      :source_ip,
      :destination_ip,
      :protocol,
      :destination_port,
      :tags,
      :filter_at_source,
      :filter_at_destination)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network interface.
    #
    # @!attribute [rw] association
    #   The association information for an Elastic IP address (IPv4)
    #   associated with the network interface.
    #   @return [Types::NetworkInterfaceAssociation]
    #
    # @!attribute [rw] attachment
    #   The network interface attachment.
    #   @return [Types::NetworkInterfaceAttachment]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] connection_tracking_configuration
    #   A security group connection tracking configuration that enables you
    #   to set the timeout for connection tracking on an Elastic network
    #   interface. For more information, see [Connection tracking
    #   timeouts][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts
    #   @return [Types::ConnectionTrackingConfiguration]
    #
    # @!attribute [rw] description
    #   A description.
    #   @return [String]
    #
    # @!attribute [rw] groups
    #   Any security groups for the network interface.
    #   @return [Array<Types::GroupIdentifier>]
    #
    # @!attribute [rw] interface_type
    #   The type of network interface.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_addresses
    #   The IPv6 addresses associated with the network interface.
    #   @return [Array<Types::NetworkInterfaceIpv6Address>]
    #
    # @!attribute [rw] mac_address
    #   The MAC address.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The Amazon Web Services account ID of the owner of the network
    #   interface.
    #   @return [String]
    #
    # @!attribute [rw] private_dns_name
    #   The private hostname. For more information, see [EC2 instance
    #   hostnames, DNS names, and domains][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html
    #   @return [String]
    #
    # @!attribute [rw] public_dns_name
    #   A public hostname. For more information, see [EC2 instance
    #   hostnames, DNS names, and domains][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html
    #   @return [String]
    #
    # @!attribute [rw] public_ip_dns_name_options
    #   Public hostname type options. For more information, see [EC2
    #   instance hostnames, DNS names, and domains][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html
    #   @return [Types::PublicIpDnsNameOptions]
    #
    # @!attribute [rw] private_ip_address
    #   The IPv4 address of the network interface within the subnet.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_addresses
    #   The private IPv4 addresses associated with the network interface.
    #   @return [Array<Types::NetworkInterfacePrivateIpAddress>]
    #
    # @!attribute [rw] ipv_4_prefixes
    #   The IPv4 prefixes that are assigned to the network interface.
    #   @return [Array<Types::Ipv4PrefixSpecification>]
    #
    # @!attribute [rw] ipv_6_prefixes
    #   The IPv6 prefixes that are assigned to the network interface.
    #   @return [Array<Types::Ipv6PrefixSpecification>]
    #
    # @!attribute [rw] requester_id
    #   The alias or Amazon Web Services account ID of the principal or
    #   service that created the network interface.
    #   @return [String]
    #
    # @!attribute [rw] requester_managed
    #   Indicates whether the network interface is being managed by Amazon
    #   Web Services.
    #   @return [Boolean]
    #
    # @!attribute [rw] source_dest_check
    #   Indicates whether source/destination checking is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] status
    #   The status of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] tag_set
    #   Any tags assigned to the network interface.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] deny_all_igw_traffic
    #   Indicates whether a network interface with an IPv6 address is
    #   unreachable from the public internet. If the value is `true`,
    #   inbound traffic from the internet is dropped and you cannot assign
    #   an elastic IP address to the network interface. The network
    #   interface is reachable from peered VPCs and resources connected
    #   through a transit gateway, including on-premises networks.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipv_6_native
    #   Indicates whether this is an IPv6 only network interface.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipv_6_address
    #   The IPv6 globally unique address associated with the network
    #   interface.
    #   @return [String]
    #
    # @!attribute [rw] operator
    #   The service provider that manages the network interface.
    #   @return [Types::OperatorResponse]
    #
    # @!attribute [rw] associated_subnets
    #   The subnets associated with this network interface.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterface AWS API Documentation
    #
    class NetworkInterface < Struct.new(
      :association,
      :attachment,
      :availability_zone,
      :connection_tracking_configuration,
      :description,
      :groups,
      :interface_type,
      :ipv_6_addresses,
      :mac_address,
      :network_interface_id,
      :outpost_arn,
      :owner_id,
      :private_dns_name,
      :public_dns_name,
      :public_ip_dns_name_options,
      :private_ip_address,
      :private_ip_addresses,
      :ipv_4_prefixes,
      :ipv_6_prefixes,
      :requester_id,
      :requester_managed,
      :source_dest_check,
      :status,
      :subnet_id,
      :tag_set,
      :vpc_id,
      :deny_all_igw_traffic,
      :ipv_6_native,
      :ipv_6_address,
      :operator,
      :associated_subnets)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes association information for an Elastic IP address (IPv4
    # only), or a Carrier IP address (for a network interface which resides
    # in a subnet in a Wavelength Zone).
    #
    # @!attribute [rw] allocation_id
    #   The allocation ID.
    #   @return [String]
    #
    # @!attribute [rw] association_id
    #   The association ID.
    #   @return [String]
    #
    # @!attribute [rw] ip_owner_id
    #   The ID of the Elastic IP address owner.
    #   @return [String]
    #
    # @!attribute [rw] public_dns_name
    #   The public DNS name.
    #   @return [String]
    #
    # @!attribute [rw] public_ip
    #   The address of the Elastic IP address bound to the network
    #   interface.
    #   @return [String]
    #
    # @!attribute [rw] customer_owned_ip
    #   The customer-owned IP address associated with the network interface.
    #   @return [String]
    #
    # @!attribute [rw] carrier_ip
    #   The carrier IP address associated with the network interface.
    #
    #   This option is only available when the network interface is in a
    #   subnet which is associated with a Wavelength Zone.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceAssociation AWS API Documentation
    #
    class NetworkInterfaceAssociation < Struct.new(
      :allocation_id,
      :association_id,
      :ip_owner_id,
      :public_dns_name,
      :public_ip,
      :customer_owned_ip,
      :carrier_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network interface attachment.
    #
    # @!attribute [rw] attach_time
    #   The timestamp indicating when the attachment initiated.
    #   @return [Time]
    #
    # @!attribute [rw] attachment_id
    #   The ID of the network interface attachment.
    #   @return [String]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the network interface is deleted when the instance
    #   is terminated.
    #   @return [Boolean]
    #
    # @!attribute [rw] device_index
    #   The device index of the network interface attachment on the
    #   instance.
    #   @return [Integer]
    #
    # @!attribute [rw] network_card_index
    #   The index of the network card.
    #   @return [Integer]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_owner_id
    #   The Amazon Web Services account ID of the owner of the instance.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The attachment state.
    #   @return [String]
    #
    # @!attribute [rw] ena_srd_specification
    #   Configures ENA Express for the network interface that this action
    #   attaches to the instance.
    #   @return [Types::AttachmentEnaSrdSpecification]
    #
    # @!attribute [rw] ena_queue_count
    #   The number of ENA queues created with the instance.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceAttachment AWS API Documentation
    #
    class NetworkInterfaceAttachment < Struct.new(
      :attach_time,
      :attachment_id,
      :delete_on_termination,
      :device_index,
      :network_card_index,
      :instance_id,
      :instance_owner_id,
      :status,
      :ena_srd_specification,
      :ena_queue_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an attachment change.
    #
    # @!attribute [rw] default_ena_queue_count
    #   The default number of the ENA queues.
    #   @return [Boolean]
    #
    # @!attribute [rw] ena_queue_count
    #   The number of ENA queues to be created with the instance.
    #   @return [Integer]
    #
    # @!attribute [rw] attachment_id
    #   The ID of the network interface attachment.
    #   @return [String]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the network interface is deleted when the instance
    #   is terminated.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceAttachmentChanges AWS API Documentation
    #
    class NetworkInterfaceAttachmentChanges < Struct.new(
      :default_ena_queue_count,
      :ena_queue_count,
      :attachment_id,
      :delete_on_termination)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum number of network interfaces.
    #
    # @!attribute [rw] min
    #   The minimum number of network interfaces. If this parameter is not
    #   specified, there is no minimum limit.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum number of network interfaces. If this parameter is not
    #   specified, there is no maximum limit.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceCount AWS API Documentation
    #
    class NetworkInterfaceCount < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum number of network interfaces.
    #
    # @!attribute [rw] min
    #   The minimum number of network interfaces. To specify no minimum
    #   limit, omit this parameter.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum number of network interfaces. To specify no maximum
    #   limit, omit this parameter.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceCountRequest AWS API Documentation
    #
    class NetworkInterfaceCountRequest < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv6 address associated with a network interface.
    #
    # @!attribute [rw] ipv_6_address
    #   The IPv6 address.
    #   @return [String]
    #
    # @!attribute [rw] public_ipv_6_dns_name
    #   An IPv6-enabled public hostname for a network interface. Requests
    #   from within the VPC or from the internet resolve to the IPv6 GUA of
    #   the network interface. For more information, see [EC2 instance
    #   hostnames, DNS names, and domains][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html
    #   @return [String]
    #
    # @!attribute [rw] is_primary_ipv_6
    #   Determines if an IPv6 address associated with a network interface is
    #   the primary IPv6 address. 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. For more information, see
    #   [ModifyNetworkInterfaceAttribute][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyNetworkInterfaceAttribute.html
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfaceIpv6Address AWS API Documentation
    #
    class NetworkInterfaceIpv6Address < Struct.new(
      :ipv_6_address,
      :public_ipv_6_dns_name,
      :is_primary_ipv_6)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a permission for a network interface.
    #
    # @!attribute [rw] network_interface_permission_id
    #   The ID of the network interface permission.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] aws_account_id
    #   The Amazon Web Services account ID.
    #   @return [String]
    #
    # @!attribute [rw] aws_service
    #   The Amazon Web Services service.
    #   @return [String]
    #
    # @!attribute [rw] permission
    #   The type of permission.
    #   @return [String]
    #
    # @!attribute [rw] permission_state
    #   Information about the state of the permission.
    #   @return [Types::NetworkInterfacePermissionState]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfacePermission AWS API Documentation
    #
    class NetworkInterfacePermission < Struct.new(
      :network_interface_permission_id,
      :network_interface_id,
      :aws_account_id,
      :aws_service,
      :permission,
      :permission_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of a network interface permission.
    #
    # @!attribute [rw] state
    #   The state of the permission.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   A status message, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfacePermissionState AWS API Documentation
    #
    class NetworkInterfacePermissionState < Struct.new(
      :state,
      :status_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the private IPv4 address of a network interface.
    #
    # @!attribute [rw] association
    #   The association information for an Elastic IP address (IPv4)
    #   associated with the network interface.
    #   @return [Types::NetworkInterfaceAssociation]
    #
    # @!attribute [rw] primary
    #   Indicates whether this IPv4 address is the primary private IPv4
    #   address of the network interface.
    #   @return [Boolean]
    #
    # @!attribute [rw] private_dns_name
    #   The private DNS name.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The private IPv4 address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NetworkInterfacePrivateIpAddress AWS API Documentation
    #
    class NetworkInterfacePrivateIpAddress < Struct.new(
      :association,
      :primary,
      :private_dns_name,
      :private_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the cores available to the neuron accelerator.
    #
    # @!attribute [rw] count
    #   The number of cores available to the neuron accelerator.
    #   @return [Integer]
    #
    # @!attribute [rw] version
    #   The version of the neuron accelerator.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NeuronDeviceCoreInfo AWS API Documentation
    #
    class NeuronDeviceCoreInfo < Struct.new(
      :count,
      :version)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the neuron accelerators for the instance type.
    #
    # @!attribute [rw] count
    #   The number of neuron accelerators for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] name
    #   The name of the neuron accelerator.
    #   @return [String]
    #
    # @!attribute [rw] core_info
    #   Describes the cores available to each neuron accelerator.
    #   @return [Types::NeuronDeviceCoreInfo]
    #
    # @!attribute [rw] memory_info
    #   Describes the memory available to each neuron accelerator.
    #   @return [Types::NeuronDeviceMemoryInfo]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NeuronDeviceInfo AWS API Documentation
    #
    class NeuronDeviceInfo < Struct.new(
      :count,
      :name,
      :core_info,
      :memory_info)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the memory available to the neuron accelerator.
    #
    # @!attribute [rw] size_in_mi_b
    #   The size of the memory available to the neuron accelerator, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NeuronDeviceMemoryInfo AWS API Documentation
    #
    class NeuronDeviceMemoryInfo < Struct.new(
      :size_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the neuron accelerators for the instance type.
    #
    # @!attribute [rw] neuron_devices
    #   Describes the neuron accelerators for the instance type.
    #   @return [Array<Types::NeuronDeviceInfo>]
    #
    # @!attribute [rw] total_neuron_device_memory_in_mi_b
    #   The total size of the memory for the neuron accelerators for the
    #   instance type, in MiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NeuronInfo AWS API Documentation
    #
    class NeuronInfo < Struct.new(
      :neuron_devices,
      :total_neuron_device_memory_in_mi_b)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a DHCP configuration option.
    #
    # @!attribute [rw] key
    #   The name of a DHCP option.
    #   @return [String]
    #
    # @!attribute [rw] values
    #   The values for the DHCP option.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NewDhcpConfiguration AWS API Documentation
    #
    class NewDhcpConfiguration < Struct.new(
      :key,
      :values)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the supported NitroTPM versions for the instance type.
    #
    # @!attribute [rw] supported_versions
    #   Indicates the supported NitroTPM versions.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/NitroTpmInfo AWS API Documentation
    #
    class NitroTpmInfo < Struct.new(
      :supported_versions)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for an OpenID Connect-compatible user-identity
    # trust provider.
    #
    # @!attribute [rw] issuer
    #   The OIDC issuer.
    #   @return [String]
    #
    # @!attribute [rw] authorization_endpoint
    #   The OIDC authorization endpoint.
    #   @return [String]
    #
    # @!attribute [rw] token_endpoint
    #   The OIDC token endpoint.
    #   @return [String]
    #
    # @!attribute [rw] user_info_endpoint
    #   The OIDC user info endpoint.
    #   @return [String]
    #
    # @!attribute [rw] client_id
    #   The client identifier.
    #   @return [String]
    #
    # @!attribute [rw] client_secret
    #   The client secret.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   The OpenID Connect (OIDC) scope specified.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/OidcOptions AWS API Documentation
    #
    class OidcOptions < Struct.new(
      :issuer,
      :authorization_endpoint,
      :token_endpoint,
      :user_info_endpoint,
      :client_id,
      :client_secret,
      :scope)
      SENSITIVE = [:client_secret]
      include Aws::Structure
    end

    # Describes the configuration of On-Demand Instances in an EC2 Fleet.
    #
    # @!attribute [rw] allocation_strategy
    #   The strategy that determines the order of the launch template
    #   overrides to use in fulfilling On-Demand capacity.
    #
    #   `lowest-price` - EC2 Fleet uses price to determine the order,
    #   launching the lowest price first.
    #
    #   `prioritized` - EC2 Fleet uses the priority that you assigned to
    #   each launch template override, launching the highest priority first.
    #
    #   Default: `lowest-price`
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_options
    #   The strategy for using unused Capacity Reservations for fulfilling
    #   On-Demand capacity.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Types::CapacityReservationOptions]
    #
    # @!attribute [rw] single_instance_type
    #   Indicates that the fleet uses a single instance type to launch all
    #   On-Demand Instances in the fleet.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Boolean]
    #
    # @!attribute [rw] single_availability_zone
    #   Indicates that the fleet launches all On-Demand Instances into a
    #   single Availability Zone.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Boolean]
    #
    # @!attribute [rw] min_target_capacity
    #   The minimum target capacity for On-Demand Instances in the fleet. If
    #   this minimum capacity isn't reached, no instances are launched.
    #
    #   Constraints: Maximum value of `1000`. Supported only for fleets of
    #   type `instant`.
    #
    #   At least one of the following must be specified:
    #   `SingleAvailabilityZone` \| `SingleInstanceType`
    #   @return [Integer]
    #
    # @!attribute [rw] max_total_price
    #   The maximum amount per hour for On-Demand Instances that you're
    #   willing to pay.
    #
    #   <note markdown="1"> If your fleet includes T instances that are configured as
    #   `unlimited`, and if their average CPU usage exceeds the baseline
    #   utilization, you will incur a charge for surplus credits. The
    #   `maxTotalPrice` does not account for surplus credits, and, if you
    #   use surplus credits, your final cost might be higher than what you
    #   specified for `maxTotalPrice`. For more information, see [Surplus
    #   credits can incur charges][1] in the *Amazon EC2 User Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/OnDemandOptions AWS API Documentation
    #
    class OnDemandOptions < Struct.new(
      :allocation_strategy,
      :capacity_reservation_options,
      :single_instance_type,
      :single_availability_zone,
      :min_target_capacity,
      :max_total_price)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration of On-Demand Instances in an EC2 Fleet.
    #
    # @!attribute [rw] allocation_strategy
    #   The strategy that determines the order of the launch template
    #   overrides to use in fulfilling On-Demand capacity.
    #
    #   `lowest-price` - EC2 Fleet uses price to determine the order,
    #   launching the lowest price first.
    #
    #   `prioritized` - EC2 Fleet uses the priority that you assigned to
    #   each launch template override, launching the highest priority first.
    #
    #   Default: `lowest-price`
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_options
    #   The strategy for using unused Capacity Reservations for fulfilling
    #   On-Demand capacity.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Types::CapacityReservationOptionsRequest]
    #
    # @!attribute [rw] single_instance_type
    #   Indicates that the fleet uses a single instance type to launch all
    #   On-Demand Instances in the fleet.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Boolean]
    #
    # @!attribute [rw] single_availability_zone
    #   Indicates that the fleet launches all On-Demand Instances into a
    #   single Availability Zone.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Boolean]
    #
    # @!attribute [rw] min_target_capacity
    #   The minimum target capacity for On-Demand Instances in the fleet. If
    #   this minimum capacity isn't reached, no instances are launched.
    #
    #   Constraints: Maximum value of `1000`. Supported only for fleets of
    #   type `instant`.
    #
    #   At least one of the following must be specified:
    #   `SingleAvailabilityZone` \| `SingleInstanceType`
    #   @return [Integer]
    #
    # @!attribute [rw] max_total_price
    #   The maximum amount per hour for On-Demand Instances that you're
    #   willing to pay.
    #
    #   <note markdown="1"> If your fleet includes T instances that are configured as
    #   `unlimited`, and if their average CPU usage exceeds the baseline
    #   utilization, you will incur a charge for surplus credits. The
    #   `MaxTotalPrice` does not account for surplus credits, and, if you
    #   use surplus credits, your final cost might be higher than what you
    #   specified for `MaxTotalPrice`. For more information, see [Surplus
    #   credits can incur charges][1] in the *Amazon EC2 User Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/OnDemandOptionsRequest AWS API Documentation
    #
    class OnDemandOptionsRequest < Struct.new(
      :allocation_strategy,
      :capacity_reservation_options,
      :single_instance_type,
      :single_availability_zone,
      :min_target_capacity,
      :max_total_price)
      SENSITIVE = []
      include Aws::Structure
    end

    # The service provider that manages the resource.
    #
    # @!attribute [rw] principal
    #   The service provider that manages the resource.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/OperatorRequest AWS API Documentation
    #
    class OperatorRequest < Struct.new(
      :principal)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes whether the resource is managed by a service provider and,
    # if so, describes the service provider that manages it.
    #
    # @!attribute [rw] managed
    #   If `true`, the resource is managed by a service provider.
    #   @return [Boolean]
    #
    # @!attribute [rw] principal
    #   If `managed` is `true`, then the principal is returned. The
    #   principal is the service provider that manages the resource.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/OperatorResponse AWS API Documentation
    #
    class OperatorResponse < Struct.new(
      :managed,
      :principal)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Outpost link aggregation group (LAG).
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Number (ARN) of the Outpost LAG.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Outpost LAG owner.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the Outpost LAG.
    #   @return [String]
    #
    # @!attribute [rw] outpost_lag_id
    #   The ID of the Outpost LAG.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_virtual_interface_ids
    #   The IDs of the local gateway virtual interfaces associated with the
    #   Outpost LAG.
    #   @return [Array<String>]
    #
    # @!attribute [rw] service_link_virtual_interface_ids
    #   The service link virtual interface IDs associated with the Outpost
    #   LAG.
    #   @return [Array<String>]
    #
    # @!attribute [rw] tags
    #   The tags associated with the Outpost LAG.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/OutpostLag AWS API Documentation
    #
    class OutpostLag < Struct.new(
      :outpost_arn,
      :owner_id,
      :state,
      :outpost_lag_id,
      :local_gateway_virtual_interface_ids,
      :service_link_virtual_interface_ids,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a packet header statement.
    #
    # @!attribute [rw] source_addresses
    #   The source addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] destination_addresses
    #   The destination addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] source_ports
    #   The source ports.
    #   @return [Array<String>]
    #
    # @!attribute [rw] destination_ports
    #   The destination ports.
    #   @return [Array<String>]
    #
    # @!attribute [rw] source_prefix_lists
    #   The source prefix lists.
    #   @return [Array<String>]
    #
    # @!attribute [rw] destination_prefix_lists
    #   The destination prefix lists.
    #   @return [Array<String>]
    #
    # @!attribute [rw] protocols
    #   The protocols.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PacketHeaderStatement AWS API Documentation
    #
    class PacketHeaderStatement < Struct.new(
      :source_addresses,
      :destination_addresses,
      :source_ports,
      :destination_ports,
      :source_prefix_lists,
      :destination_prefix_lists,
      :protocols)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a packet header statement.
    #
    # @!attribute [rw] source_addresses
    #   The source addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] destination_addresses
    #   The destination addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] source_ports
    #   The source ports.
    #   @return [Array<String>]
    #
    # @!attribute [rw] destination_ports
    #   The destination ports.
    #   @return [Array<String>]
    #
    # @!attribute [rw] source_prefix_lists
    #   The source prefix lists.
    #   @return [Array<String>]
    #
    # @!attribute [rw] destination_prefix_lists
    #   The destination prefix lists.
    #   @return [Array<String>]
    #
    # @!attribute [rw] protocols
    #   The protocols.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PacketHeaderStatementRequest AWS API Documentation
    #
    class PacketHeaderStatementRequest < Struct.new(
      :source_addresses,
      :destination_addresses,
      :source_ports,
      :destination_ports,
      :source_prefix_lists,
      :destination_prefix_lists,
      :protocols)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a path component.
    #
    # @!attribute [rw] sequence_number
    #   The sequence number.
    #   @return [Integer]
    #
    # @!attribute [rw] acl_rule
    #   The network ACL rule.
    #   @return [Types::AnalysisAclRule]
    #
    # @!attribute [rw] attached_to
    #   The resource to which the path component is attached.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] component
    #   The component.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] destination_vpc
    #   The destination VPC.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] outbound_header
    #   The outbound header.
    #   @return [Types::AnalysisPacketHeader]
    #
    # @!attribute [rw] inbound_header
    #   The inbound header.
    #   @return [Types::AnalysisPacketHeader]
    #
    # @!attribute [rw] route_table_route
    #   The route table route.
    #   @return [Types::AnalysisRouteTableRoute]
    #
    # @!attribute [rw] security_group_rule
    #   The security group rule.
    #   @return [Types::AnalysisSecurityGroupRule]
    #
    # @!attribute [rw] source_vpc
    #   The source VPC.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] subnet
    #   The subnet.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] vpc
    #   The component VPC.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] additional_details
    #   The additional details.
    #   @return [Array<Types::AdditionalDetail>]
    #
    # @!attribute [rw] transit_gateway
    #   The transit gateway.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] transit_gateway_route_table_route
    #   The route in a transit gateway route table.
    #   @return [Types::TransitGatewayRouteTableRoute]
    #
    # @!attribute [rw] explanations
    #   The explanation codes.
    #   @return [Array<Types::Explanation>]
    #
    # @!attribute [rw] elastic_load_balancer_listener
    #   The load balancer listener.
    #   @return [Types::AnalysisComponent]
    #
    # @!attribute [rw] firewall_stateless_rule
    #   The Network Firewall stateless rule.
    #   @return [Types::FirewallStatelessRule]
    #
    # @!attribute [rw] firewall_stateful_rule
    #   The Network Firewall stateful rule.
    #   @return [Types::FirewallStatefulRule]
    #
    # @!attribute [rw] service_name
    #   The name of the VPC endpoint service.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PathComponent AWS API Documentation
    #
    class PathComponent < Struct.new(
      :sequence_number,
      :acl_rule,
      :attached_to,
      :component,
      :destination_vpc,
      :outbound_header,
      :inbound_header,
      :route_table_route,
      :security_group_rule,
      :source_vpc,
      :subnet,
      :vpc,
      :additional_details,
      :transit_gateway,
      :transit_gateway_route_table_route,
      :explanations,
      :elastic_load_balancer_listener,
      :firewall_stateless_rule,
      :firewall_stateful_rule,
      :service_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a set of filters for a path analysis. Use path filters to
    # scope the analysis when there can be multiple resulting paths.
    #
    # @!attribute [rw] source_address
    #   The source IPv4 address.
    #   @return [String]
    #
    # @!attribute [rw] source_port_range
    #   The source port range.
    #   @return [Types::FilterPortRange]
    #
    # @!attribute [rw] destination_address
    #   The destination IPv4 address.
    #   @return [String]
    #
    # @!attribute [rw] destination_port_range
    #   The destination port range.
    #   @return [Types::FilterPortRange]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PathFilter AWS API Documentation
    #
    class PathFilter < Struct.new(
      :source_address,
      :source_port_range,
      :destination_address,
      :destination_port_range)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a set of filters for a path analysis. Use path filters to
    # scope the analysis when there can be multiple resulting paths.
    #
    # @!attribute [rw] source_address
    #   The source IPv4 address.
    #   @return [String]
    #
    # @!attribute [rw] source_port_range
    #   The source port range.
    #   @return [Types::RequestFilterPortRange]
    #
    # @!attribute [rw] destination_address
    #   The destination IPv4 address.
    #   @return [String]
    #
    # @!attribute [rw] destination_port_range
    #   The destination port range.
    #   @return [Types::RequestFilterPortRange]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PathRequestFilter AWS API Documentation
    #
    class PathRequestFilter < Struct.new(
      :source_address,
      :source_port_range,
      :destination_address,
      :destination_port_range)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a path statement.
    #
    # @!attribute [rw] packet_header_statement
    #   The packet header statement.
    #   @return [Types::PacketHeaderStatement]
    #
    # @!attribute [rw] resource_statement
    #   The resource statement.
    #   @return [Types::ResourceStatement]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PathStatement AWS API Documentation
    #
    class PathStatement < Struct.new(
      :packet_header_statement,
      :resource_statement)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a path statement.
    #
    # @!attribute [rw] packet_header_statement
    #   The packet header statement.
    #   @return [Types::PacketHeaderStatementRequest]
    #
    # @!attribute [rw] resource_statement
    #   The resource statement.
    #   @return [Types::ResourceStatementRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PathStatementRequest AWS API Documentation
    #
    class PathStatementRequest < Struct.new(
      :packet_header_statement,
      :resource_statement)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the data that identifies an Amazon FPGA image (AFI) on the
    # PCI bus.
    #
    # @!attribute [rw] device_id
    #   The ID of the device.
    #   @return [String]
    #
    # @!attribute [rw] vendor_id
    #   The ID of the vendor.
    #   @return [String]
    #
    # @!attribute [rw] subsystem_id
    #   The ID of the subsystem.
    #   @return [String]
    #
    # @!attribute [rw] subsystem_vendor_id
    #   The ID of the vendor for the subsystem.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PciId AWS API Documentation
    #
    class PciId < Struct.new(
      :device_id,
      :vendor_id,
      :subsystem_id,
      :subsystem_vendor_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # The status of the transit gateway peering attachment.
    #
    # @!attribute [rw] code
    #   The status code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The status message, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PeeringAttachmentStatus AWS API Documentation
    #
    class PeeringAttachmentStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the VPC peering connection options.
    #
    # @!attribute [rw] allow_dns_resolution_from_remote_vpc
    #   If true, the public DNS hostnames of instances in the specified VPC
    #   resolve to private IP addresses when queried from instances in the
    #   peer VPC.
    #   @return [Boolean]
    #
    # @!attribute [rw] allow_egress_from_local_classic_link_to_remote_vpc
    #   Deprecated.
    #   @return [Boolean]
    #
    # @!attribute [rw] allow_egress_from_local_vpc_to_remote_classic_link
    #   Deprecated.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PeeringConnectionOptions AWS API Documentation
    #
    class PeeringConnectionOptions < Struct.new(
      :allow_dns_resolution_from_remote_vpc,
      :allow_egress_from_local_classic_link_to_remote_vpc,
      :allow_egress_from_local_vpc_to_remote_classic_link)
      SENSITIVE = []
      include Aws::Structure
    end

    # The VPC peering connection options.
    #
    # @!attribute [rw] allow_dns_resolution_from_remote_vpc
    #   If true, enables a local VPC to resolve public DNS hostnames to
    #   private IP addresses when queried from instances in the peer VPC.
    #   @return [Boolean]
    #
    # @!attribute [rw] allow_egress_from_local_classic_link_to_remote_vpc
    #   Deprecated.
    #   @return [Boolean]
    #
    # @!attribute [rw] allow_egress_from_local_vpc_to_remote_classic_link
    #   Deprecated.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PeeringConnectionOptionsRequest AWS API Documentation
    #
    class PeeringConnectionOptionsRequest < Struct.new(
      :allow_dns_resolution_from_remote_vpc,
      :allow_egress_from_local_classic_link_to_remote_vpc,
      :allow_egress_from_local_vpc_to_remote_classic_link)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the transit gateway in the peering attachment.
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] core_network_id
    #   The ID of the core network where the transit gateway peer is
    #   located.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the transit
    #   gateway.
    #   @return [String]
    #
    # @!attribute [rw] region
    #   The Region of the transit gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PeeringTgwInfo AWS API Documentation
    #
    class PeeringTgwInfo < Struct.new(
      :transit_gateway_id,
      :core_network_id,
      :owner_id,
      :region)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specify an instance family to use as the baseline reference for CPU
    # performance. All instance types that match your specified attributes
    # will be compared against the CPU performance of the referenced
    # instance family, regardless of CPU manufacturer or architecture.
    #
    # <note markdown="1"> Currently, only one instance family can be specified in the list.
    #
    #  </note>
    #
    # @!attribute [rw] instance_family
    #   The instance family to use as a baseline reference.
    #
    #   <note markdown="1"> Ensure that you specify the correct value for the instance family.
    #   The instance family is everything before the period (`.`) in the
    #   instance type name. For example, in the instance type `c6i.large`,
    #   the instance family is `c6i`, not `c6`. For more information, see
    #   [Amazon EC2 instance type naming conventions][1] in *Amazon EC2
    #   Instance Types*.
    #
    #    </note>
    #
    #   The following instance families are *not supported* for performance
    #   protection:
    #
    #   * `c1`
    #
    #   * `g3` \| `g3s`
    #
    #   * `hpc7g`
    #
    #   * `m1` \| `m2`
    #
    #   * `mac1` \| `mac2` \| `mac2-m1ultra` \| `mac2-m2` \| `mac2-m2pro`
    #
    #   * `p3dn` \| `p4d` \| `p5`
    #
    #   * `t1`
    #
    #   * `u-12tb1` \| `u-18tb1` \| `u-24tb1` \| `u-3tb1` \| `u-6tb1` \|
    #     `u-9tb1` \| `u7i-12tb` \| `u7in-16tb` \| `u7in-24tb` \|
    #     `u7in-32tb`
    #
    #   If you enable performance protection by specifying a supported
    #   instance family, the returned instance types will exclude the above
    #   unsupported instance families.
    #
    #   If you specify an unsupported instance family as a value for
    #   baseline performance, the API returns an empty response for
    #   [GetInstanceTypesFromInstanceRequirements][2] and an exception for
    #   [CreateFleet][3], [RequestSpotFleet][4], [ModifyFleet][5], and
    #   [ModifySpotFleetRequest][6].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-type-names.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet
    #   [4]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet
    #   [5]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyFleet
    #   [6]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifySpotFleetRequest
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PerformanceFactorReference AWS API Documentation
    #
    class PerformanceFactorReference < Struct.new(
      :instance_family)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specify an instance family to use as the baseline reference for CPU
    # performance. All instance types that match your specified attributes
    # will be compared against the CPU performance of the referenced
    # instance family, regardless of CPU manufacturer or architecture.
    #
    # <note markdown="1"> Currently, only one instance family can be specified in the list.
    #
    #  </note>
    #
    # @!attribute [rw] instance_family
    #   The instance family to use as a baseline reference.
    #
    #   <note markdown="1"> Ensure that you specify the correct value for the instance family.
    #   The instance family is everything before the period (`.`) in the
    #   instance type name. For example, in the instance type `c6i.large`,
    #   the instance family is `c6i`, not `c6`. For more information, see
    #   [Amazon EC2 instance type naming conventions][1] in *Amazon EC2
    #   Instance Types*.
    #
    #    </note>
    #
    #   The following instance families are *not supported* for performance
    #   protection:
    #
    #   * `c1`
    #
    #   * `g3` \| `g3s`
    #
    #   * `hpc7g`
    #
    #   * `m1` \| `m2`
    #
    #   * `mac1` \| `mac2` \| `mac2-m1ultra` \| `mac2-m2` \| `mac2-m2pro`
    #
    #   * `p3dn` \| `p4d` \| `p5`
    #
    #   * `t1`
    #
    #   * `u-12tb1` \| `u-18tb1` \| `u-24tb1` \| `u-3tb1` \| `u-6tb1` \|
    #     `u-9tb1` \| `u7i-12tb` \| `u7in-16tb` \| `u7in-24tb` \|
    #     `u7in-32tb`
    #
    #   If you enable performance protection by specifying a supported
    #   instance family, the returned instance types will exclude the above
    #   unsupported instance families.
    #
    #   If you specify an unsupported instance family as a value for
    #   baseline performance, the API returns an empty response for
    #   [GetInstanceTypesFromInstanceRequirements][2] and an exception for
    #   [CreateFleet][3], [RequestSpotFleet][4], [ModifyFleet][5], and
    #   [ModifySpotFleetRequest][6].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-type-names.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet
    #   [4]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet
    #   [5]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyFleet
    #   [6]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifySpotFleetRequest
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PerformanceFactorReferenceRequest AWS API Documentation
    #
    class PerformanceFactorReferenceRequest < Struct.new(
      :instance_family)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Diffie-Hellmann group number for phase 1 IKE negotiations.
    #
    # @!attribute [rw] value
    #   The Diffie-Hellmann group number.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase1DHGroupNumbersListValue AWS API Documentation
    #
    class Phase1DHGroupNumbersListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specifies a Diffie-Hellman group number for the VPN tunnel for phase 1
    # IKE negotiations.
    #
    # @!attribute [rw] value
    #   The Diffie-Hellmann group number.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase1DHGroupNumbersRequestListValue AWS API Documentation
    #
    class Phase1DHGroupNumbersRequestListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The encryption algorithm for phase 1 IKE negotiations.
    #
    # @!attribute [rw] value
    #   The value for the encryption algorithm.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase1EncryptionAlgorithmsListValue AWS API Documentation
    #
    class Phase1EncryptionAlgorithmsListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specifies the encryption algorithm for the VPN tunnel for phase 1 IKE
    # negotiations.
    #
    # @!attribute [rw] value
    #   The value for the encryption algorithm.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase1EncryptionAlgorithmsRequestListValue AWS API Documentation
    #
    class Phase1EncryptionAlgorithmsRequestListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The integrity algorithm for phase 1 IKE negotiations.
    #
    # @!attribute [rw] value
    #   The value for the integrity algorithm.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase1IntegrityAlgorithmsListValue AWS API Documentation
    #
    class Phase1IntegrityAlgorithmsListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specifies the integrity algorithm for the VPN tunnel for phase 1 IKE
    # negotiations.
    #
    # @!attribute [rw] value
    #   The value for the integrity algorithm.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase1IntegrityAlgorithmsRequestListValue AWS API Documentation
    #
    class Phase1IntegrityAlgorithmsRequestListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Diffie-Hellmann group number for phase 2 IKE negotiations.
    #
    # @!attribute [rw] value
    #   The Diffie-Hellmann group number.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase2DHGroupNumbersListValue AWS API Documentation
    #
    class Phase2DHGroupNumbersListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specifies a Diffie-Hellman group number for the VPN tunnel for phase 2
    # IKE negotiations.
    #
    # @!attribute [rw] value
    #   The Diffie-Hellmann group number.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase2DHGroupNumbersRequestListValue AWS API Documentation
    #
    class Phase2DHGroupNumbersRequestListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The encryption algorithm for phase 2 IKE negotiations.
    #
    # @!attribute [rw] value
    #   The encryption algorithm.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase2EncryptionAlgorithmsListValue AWS API Documentation
    #
    class Phase2EncryptionAlgorithmsListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specifies the encryption algorithm for the VPN tunnel for phase 2 IKE
    # negotiations.
    #
    # @!attribute [rw] value
    #   The encryption algorithm.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase2EncryptionAlgorithmsRequestListValue AWS API Documentation
    #
    class Phase2EncryptionAlgorithmsRequestListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The integrity algorithm for phase 2 IKE negotiations.
    #
    # @!attribute [rw] value
    #   The integrity algorithm.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase2IntegrityAlgorithmsListValue AWS API Documentation
    #
    class Phase2IntegrityAlgorithmsListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Specifies the integrity algorithm for the VPN tunnel for phase 2 IKE
    # negotiations.
    #
    # @!attribute [rw] value
    #   The integrity algorithm.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Phase2IntegrityAlgorithmsRequestListValue AWS API Documentation
    #
    class Phase2IntegrityAlgorithmsRequestListValue < Struct.new(
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the placement of an instance.
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone of the instance.
    #
    #   On input, you can specify `AvailabilityZone` or
    #   `AvailabilityZoneId`, but not both. If you specify neither one,
    #   Amazon EC2 automatically selects an Availability Zone for you.
    #
    #   This parameter is not supported for [CreateFleet][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet
    #   @return [String]
    #
    # @!attribute [rw] affinity
    #   The affinity setting for the instance on the Dedicated Host.
    #
    #   This parameter is not supported for [CreateFleet][1] or
    #   [ImportInstance][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the placement group that the instance is in.
    #
    #   On input, you can specify `GroupId` or `GroupName`, but not both.
    #   @return [String]
    #
    # @!attribute [rw] partition_number
    #   The number of the partition that the instance is in. Valid only if
    #   the placement group strategy is set to `partition`.
    #
    #   This parameter is not supported for [CreateFleet][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet
    #   @return [Integer]
    #
    # @!attribute [rw] host_id
    #   The ID of the Dedicated Host on which the instance resides.
    #
    #   This parameter is not supported for [CreateFleet][1] or
    #   [ImportInstance][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   The tenancy of the instance. An instance with a tenancy of
    #   `dedicated` runs on single-tenant hardware.
    #
    #   This parameter is not supported for [CreateFleet][1]. The `host`
    #   tenancy is not supported for [ImportInstance][2] or for T3 instances
    #   that are configured for the `unlimited` CPU credit option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html
    #   @return [String]
    #
    # @!attribute [rw] spread_domain
    #   Reserved for future use.
    #   @return [String]
    #
    # @!attribute [rw] host_resource_group_arn
    #   The ARN of the host resource group in which to launch the instances.
    #
    #   On input, if you specify this parameter, either omit the **Tenancy**
    #   parameter or set it to `host`.
    #
    #   This parameter is not supported for [CreateFleet][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet
    #   @return [String]
    #
    # @!attribute [rw] group_id
    #   The ID of the placement group that the instance is in.
    #
    #   On input, you can specify `GroupId` or `GroupName`, but not both.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the instance.
    #
    #   On input, you can specify `AvailabilityZone` or
    #   `AvailabilityZoneId`, but not both. If you specify neither one,
    #   Amazon EC2 automatically selects an Availability Zone for you.
    #
    #   This parameter is not supported for [CreateFleet][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Placement AWS API Documentation
    #
    class Placement < Struct.new(
      :availability_zone_id,
      :affinity,
      :group_name,
      :partition_number,
      :host_id,
      :tenancy,
      :spread_domain,
      :host_resource_group_arn,
      :group_id,
      :availability_zone)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a placement group.
    #
    # @!attribute [rw] group_name
    #   The name of the placement group.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the placement group.
    #   @return [String]
    #
    # @!attribute [rw] strategy
    #   The placement strategy.
    #   @return [String]
    #
    # @!attribute [rw] partition_count
    #   The number of partitions. Valid only if **strategy** is set to
    #   `partition`.
    #   @return [Integer]
    #
    # @!attribute [rw] group_id
    #   The ID of the placement group.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags applied to the placement group.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] group_arn
    #   The Amazon Resource Name (ARN) of the placement group.
    #   @return [String]
    #
    # @!attribute [rw] spread_level
    #   The spread level for the placement group. *Only* Outpost placement
    #   groups can be spread across hosts.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PlacementGroup AWS API Documentation
    #
    class PlacementGroup < Struct.new(
      :group_name,
      :state,
      :strategy,
      :partition_count,
      :group_id,
      :tags,
      :group_arn,
      :spread_level)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the placement group support of the instance type.
    #
    # @!attribute [rw] supported_strategies
    #   The supported placement group types.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PlacementGroupInfo AWS API Documentation
    #
    class PlacementGroupInfo < Struct.new(
      :supported_strategies)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the placement of an instance.
    #
    # @!attribute [rw] group_name
    #   The name of the placement group that the instance is in.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PlacementResponse AWS API Documentation
    #
    class PlacementResponse < Struct.new(
      :group_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a CIDR block for an address pool.
    #
    # @!attribute [rw] cidr
    #   The CIDR block.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PoolCidrBlock AWS API Documentation
    #
    class PoolCidrBlock < Struct.new(
      :cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a range of ports.
    #
    # @!attribute [rw] from
    #   The first port in the range.
    #   @return [Integer]
    #
    # @!attribute [rw] to
    #   The last port in the range.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PortRange AWS API Documentation
    #
    class PortRange < Struct.new(
      :from,
      :to)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes prefixes for Amazon Web Services services.
    #
    # @!attribute [rw] cidrs
    #   The IP address range of the Amazon Web Services service.
    #   @return [Array<String>]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_name
    #   The name of the prefix.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrefixList AWS API Documentation
    #
    class PrefixList < Struct.new(
      :cidrs,
      :prefix_list_id,
      :prefix_list_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the resource with which a prefix list is associated.
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner
    #   The owner of the resource.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrefixListAssociation AWS API Documentation
    #
    class PrefixListAssociation < Struct.new(
      :resource_id,
      :resource_owner)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a prefix list entry.
    #
    # @!attribute [rw] cidr
    #   The CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrefixListEntry AWS API Documentation
    #
    class PrefixListEntry < Struct.new(
      :cidr,
      :description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a prefix list ID.
    #
    # @!attribute [rw] description
    #   A description for the security group rule that references this
    #   prefix list ID.
    #
    #   Constraints: Up to 255 characters in length. Allowed characters are
    #   a-z, A-Z, 0-9, spaces, and .\_-:/()#,@\[\]+=;\{}!$*
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrefixListId AWS API Documentation
    #
    class PrefixListId < Struct.new(
      :description,
      :prefix_list_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the price for a Reserved Instance.
    #
    # @!attribute [rw] active
    #   The current price schedule, as determined by the term remaining for
    #   the Reserved Instance in the listing.
    #
    #   A specific price schedule is always in effect, but only one price
    #   schedule can be active at any time. Take, for example, a Reserved
    #   Instance listing that has five months remaining in its term. When
    #   you specify price schedules for five months and two months, this
    #   means that schedule 1, covering the first three months of the
    #   remaining term, will be active during months 5, 4, and 3. Then
    #   schedule 2, covering the last two months of the term, will be active
    #   for months 2 and 1.
    #   @return [Boolean]
    #
    # @!attribute [rw] currency_code
    #   The currency for transacting the Reserved Instance resale. At this
    #   time, the only supported currency is `USD`.
    #   @return [String]
    #
    # @!attribute [rw] price
    #   The fixed price for the term.
    #   @return [Float]
    #
    # @!attribute [rw] term
    #   The number of months remaining in the reservation. For example, 2 is
    #   the second to the last month before the capacity reservation
    #   expires.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PriceSchedule AWS API Documentation
    #
    class PriceSchedule < Struct.new(
      :active,
      :currency_code,
      :price,
      :term)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the price for a Reserved Instance.
    #
    # @!attribute [rw] term
    #   The number of months remaining in the reservation. For example, 2 is
    #   the second to the last month before the capacity reservation
    #   expires.
    #   @return [Integer]
    #
    # @!attribute [rw] price
    #   The fixed price for the term.
    #   @return [Float]
    #
    # @!attribute [rw] currency_code
    #   The currency for transacting the Reserved Instance resale. At this
    #   time, the only supported currency is `USD`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PriceScheduleSpecification AWS API Documentation
    #
    class PriceScheduleSpecification < Struct.new(
      :term,
      :price,
      :currency_code)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Reserved Instance offering.
    #
    # @!attribute [rw] count
    #   The number of reservations available for the price.
    #   @return [Integer]
    #
    # @!attribute [rw] price
    #   The price per instance.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PricingDetail AWS API Documentation
    #
    class PricingDetail < Struct.new(
      :count,
      :price)
      SENSITIVE = []
      include Aws::Structure
    end

    # PrincipalIdFormat description
    #
    # @!attribute [rw] arn
    #   PrincipalIdFormatARN description
    #   @return [String]
    #
    # @!attribute [rw] statuses
    #   PrincipalIdFormatStatuses description
    #   @return [Array<Types::IdFormat>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrincipalIdFormat AWS API Documentation
    #
    class PrincipalIdFormat < Struct.new(
      :arn,
      :statuses)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the Private DNS name for interface endpoints.
    #
    # @!attribute [rw] private_dns_name
    #   The private DNS name assigned to the VPC endpoint service.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrivateDnsDetails AWS API Documentation
    #
    class PrivateDnsDetails < Struct.new(
      :private_dns_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the private DNS name for the service endpoint.
    #
    # @!attribute [rw] state
    #   The verification state of the VPC endpoint service.
    #
    #   &gt;Consumers of the endpoint service can use the private name only
    #   when the state is `verified`.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The endpoint service verification type, for example TXT.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value the service provider adds to the private DNS name domain
    #   record before verification.
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name of the record subdomain the service provider needs to
    #   create. The service provider adds the `value` text to the `name`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrivateDnsNameConfiguration AWS API Documentation
    #
    class PrivateDnsNameConfiguration < Struct.new(
      :state,
      :type,
      :value,
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for instance hostnames.
    #
    # @!attribute [rw] hostname_type
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] enable_resource_name_dns_a_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS A records.
    #   @return [Boolean]
    #
    # @!attribute [rw] enable_resource_name_dns_aaaa_record
    #   Indicates whether to respond to DNS queries for instance hostname
    #   with DNS AAAA records.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrivateDnsNameOptionsOnLaunch AWS API Documentation
    #
    class PrivateDnsNameOptionsOnLaunch < Struct.new(
      :hostname_type,
      :enable_resource_name_dns_a_record,
      :enable_resource_name_dns_aaaa_record)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for instance hostnames.
    #
    # @!attribute [rw] hostname_type
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] enable_resource_name_dns_a_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS A records.
    #   @return [Boolean]
    #
    # @!attribute [rw] enable_resource_name_dns_aaaa_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS AAAA records.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrivateDnsNameOptionsRequest AWS API Documentation
    #
    class PrivateDnsNameOptionsRequest < Struct.new(
      :hostname_type,
      :enable_resource_name_dns_a_record,
      :enable_resource_name_dns_aaaa_record)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for instance hostnames.
    #
    # @!attribute [rw] hostname_type
    #   The type of hostname to assign to an instance.
    #   @return [String]
    #
    # @!attribute [rw] enable_resource_name_dns_a_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS A records.
    #   @return [Boolean]
    #
    # @!attribute [rw] enable_resource_name_dns_aaaa_record
    #   Indicates whether to respond to DNS queries for instance hostnames
    #   with DNS AAAA records.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrivateDnsNameOptionsResponse AWS API Documentation
    #
    class PrivateDnsNameOptionsResponse < Struct.new(
      :hostname_type,
      :enable_resource_name_dns_a_record,
      :enable_resource_name_dns_aaaa_record)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a secondary private IPv4 address for a network interface.
    #
    # @!attribute [rw] primary
    #   Indicates whether the private IPv4 address is the primary private
    #   IPv4 address. Only one IPv4 address can be designated as primary.
    #   @return [Boolean]
    #
    # @!attribute [rw] private_ip_address
    #   The private IPv4 address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PrivateIpAddressSpecification AWS API Documentation
    #
    class PrivateIpAddressSpecification < Struct.new(
      :primary,
      :private_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the processor used by the instance type.
    #
    # @!attribute [rw] supported_architectures
    #   The architectures supported by the instance type.
    #   @return [Array<String>]
    #
    # @!attribute [rw] sustained_clock_speed_in_ghz
    #   The speed of the processor, in GHz.
    #   @return [Float]
    #
    # @!attribute [rw] supported_features
    #   Indicates whether the instance type supports AMD SEV-SNP. If the
    #   request returns `amd-sev-snp`, AMD SEV-SNP is supported. Otherwise,
    #   it is not supported. For more information, see [ AMD SEV-SNP][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] manufacturer
    #   The manufacturer of the processor.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProcessorInfo AWS API Documentation
    #
    class ProcessorInfo < Struct.new(
      :supported_architectures,
      :sustained_clock_speed_in_ghz,
      :supported_features,
      :manufacturer)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a product code.
    #
    # @!attribute [rw] product_code_id
    #   The product code.
    #   @return [String]
    #
    # @!attribute [rw] product_code_type
    #   The type of product code.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProductCode AWS API Documentation
    #
    class ProductCode < Struct.new(
      :product_code_id,
      :product_code_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a virtual private gateway propagating route.
    #
    # @!attribute [rw] gateway_id
    #   The ID of the virtual private gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PropagatingVgw AWS API Documentation
    #
    class PropagatingVgw < Struct.new(
      :gateway_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cidr
    #   The public IPv4 or IPv6 address range, in CIDR notation. The most
    #   specific IPv4 prefix that you can specify is /24. The most specific
    #   IPv6 address range that you can bring is /48 for CIDRs that are
    #   publicly advertisable and /56 for CIDRs that are not publicly
    #   advertisable. The address range cannot overlap with another address
    #   range that you've brought to this or another Region.
    #   @return [String]
    #
    # @!attribute [rw] cidr_authorization_context
    #   A signed document that proves that you are authorized to bring the
    #   specified IP address range to Amazon using BYOIP.
    #   @return [Types::CidrAuthorizationContext]
    #
    # @!attribute [rw] publicly_advertisable
    #   (IPv6 only) Indicate whether the address range will be publicly
    #   advertised to the internet.
    #
    #   Default: true
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   A description for the address range and the address pool.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] pool_tag_specifications
    #   The tags to apply to the address pool.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] multi_region
    #   Reserved.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_border_group
    #   If you have [Local Zones][1] enabled, you can choose a network
    #   border group for Local Zones when you provision and advertise a
    #   BYOIPv4 CIDR. Choose the network border group carefully as the EIP
    #   and the Amazon Web Services resource it is associated with must
    #   reside in the same network border group.
    #
    #   You can provision BYOIP address ranges to and advertise them in the
    #   following Local Zone network border groups:
    #
    #   * us-east-1-dfw-2
    #
    #   * us-west-2-lax-1
    #
    #   * us-west-2-phx-2
    #
    #   <note markdown="1"> You cannot provision or advertise BYOIPv6 address ranges in Local
    #   Zones at this time.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/local-zones/latest/ug/how-local-zones-work.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionByoipCidrRequest AWS API Documentation
    #
    class ProvisionByoipCidrRequest < Struct.new(
      :cidr,
      :cidr_authorization_context,
      :publicly_advertisable,
      :description,
      :dry_run,
      :pool_tag_specifications,
      :multi_region,
      :network_border_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] byoip_cidr
    #   Information about the address range.
    #   @return [Types::ByoipCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionByoipCidrResult AWS API Documentation
    #
    class ProvisionByoipCidrResult < Struct.new(
      :byoip_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_id
    #   An IPAM ID.
    #   @return [String]
    #
    # @!attribute [rw] asn
    #   A public 2-byte or 4-byte ASN.
    #   @return [String]
    #
    # @!attribute [rw] asn_authorization_context
    #   An ASN authorization context.
    #   @return [Types::AsnAuthorizationContext]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionIpamByoasnRequest AWS API Documentation
    #
    class ProvisionIpamByoasnRequest < Struct.new(
      :dry_run,
      :ipam_id,
      :asn,
      :asn_authorization_context)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] byoasn
    #   An ASN and BYOIP CIDR association.
    #   @return [Types::Byoasn]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionIpamByoasnResult AWS API Documentation
    #
    class ProvisionIpamByoasnResult < Struct.new(
      :byoasn)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the IPAM pool to which you want to assign a CIDR.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   The CIDR you want to assign to the IPAM pool. Either
    #   "NetmaskLength" or "Cidr" is required. This value will be null
    #   if you specify "NetmaskLength" and will be filled in during the
    #   provisioning process.
    #   @return [String]
    #
    # @!attribute [rw] cidr_authorization_context
    #   A signed document that proves that you are authorized to bring a
    #   specified IP address range to Amazon using BYOIP. This option only
    #   applies to IPv4 and IPv6 pools in the public scope.
    #   @return [Types::IpamCidrAuthorizationContext]
    #
    # @!attribute [rw] netmask_length
    #   The netmask length of the CIDR you'd like to provision to a pool.
    #   Can be used for provisioning Amazon-provided IPv6 CIDRs to top-level
    #   pools and for provisioning CIDRs to pools with source pools. Cannot
    #   be used to provision BYOIP CIDRs to top-level pools. Either
    #   "NetmaskLength" or "Cidr" is required.
    #   @return [Integer]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] verification_method
    #   The method for verifying control of a public IP address range.
    #   Defaults to `remarks-x509` if not specified. This option only
    #   applies to IPv4 and IPv6 pools in the public scope.
    #   @return [String]
    #
    # @!attribute [rw] ipam_external_resource_verification_token_id
    #   Verification token ID. This option only applies to IPv4 and IPv6
    #   pools in the public scope.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionIpamPoolCidrRequest AWS API Documentation
    #
    class ProvisionIpamPoolCidrRequest < Struct.new(
      :dry_run,
      :ipam_pool_id,
      :cidr,
      :cidr_authorization_context,
      :netmask_length,
      :client_token,
      :verification_method,
      :ipam_external_resource_verification_token_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] ipam_pool_cidr
    #   Information about the provisioned CIDR.
    #   @return [Types::IpamPoolCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionIpamPoolCidrResult AWS API Documentation
    #
    class ProvisionIpamPoolCidrResult < Struct.new(
      :ipam_pool_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the IPAM pool you would like to use to allocate this CIDR.
    #   @return [String]
    #
    # @!attribute [rw] pool_id
    #   The ID of the public IPv4 pool you would like to use for this CIDR.
    #   @return [String]
    #
    # @!attribute [rw] netmask_length
    #   The netmask length of the CIDR you would like to allocate to the
    #   public IPv4 pool. The least specific netmask length you can define
    #   is 24.
    #   @return [Integer]
    #
    # @!attribute [rw] network_border_group
    #   The Availability Zone (AZ) or Local Zone (LZ) network border group
    #   that the resource that the IP address is assigned to is in. Defaults
    #   to an AZ network border group. For more information on available
    #   Local Zones, see [Local Zone availability][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#byoip-zone-avail
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionPublicIpv4PoolCidrRequest AWS API Documentation
    #
    class ProvisionPublicIpv4PoolCidrRequest < Struct.new(
      :dry_run,
      :ipam_pool_id,
      :pool_id,
      :netmask_length,
      :network_border_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] pool_id
    #   The ID of the pool that you want to provision the CIDR to.
    #   @return [String]
    #
    # @!attribute [rw] pool_address_range
    #   Information about the address range of the public IPv4 pool.
    #   @return [Types::PublicIpv4PoolRange]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionPublicIpv4PoolCidrResult AWS API Documentation
    #
    class ProvisionPublicIpv4PoolCidrResult < Struct.new(
      :pool_id,
      :pool_address_range)
      SENSITIVE = []
      include Aws::Structure
    end

    # Reserved. If you need to sustain traffic greater than the [documented
    # limits][1], contact Amazon Web Services Support.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-gateways
    #
    # @!attribute [rw] provision_time
    #   Reserved.
    #   @return [Time]
    #
    # @!attribute [rw] provisioned
    #   Reserved.
    #   @return [String]
    #
    # @!attribute [rw] request_time
    #   Reserved.
    #   @return [Time]
    #
    # @!attribute [rw] requested
    #   Reserved.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   Reserved.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ProvisionedBandwidth AWS API Documentation
    #
    class ProvisionedBandwidth < Struct.new(
      :provision_time,
      :provisioned,
      :request_time,
      :requested,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # The status of an updated pointer (PTR) record for an Elastic IP
    # address.
    #
    # @!attribute [rw] value
    #   The value for the PTR record update.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status of the PTR record update.
    #   @return [String]
    #
    # @!attribute [rw] reason
    #   The reason for the PTR record update.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PtrUpdateStatus AWS API Documentation
    #
    class PtrUpdateStatus < Struct.new(
      :value,
      :status,
      :reason)
      SENSITIVE = []
      include Aws::Structure
    end

    # Public hostname type options. For more information, see [EC2 instance
    # hostnames, DNS names, and domains][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html
    #
    # @!attribute [rw] dns_hostname_type
    #   The public hostname type. For more information, see [EC2 instance
    #   hostnames, DNS names, and domains][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html
    #   @return [String]
    #
    # @!attribute [rw] public_ipv_4_dns_name
    #   An IPv4-enabled public hostname for a network interface. Requests
    #   from within the VPC resolve to the private primary IPv4 address of
    #   the network interface. Requests from the internet resolve to the
    #   public IPv4 address of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] public_ipv_6_dns_name
    #   An IPv6-enabled public hostname for a network interface. Requests
    #   from within the VPC or from the internet resolve to the IPv6 GUA of
    #   the network interface.
    #   @return [String]
    #
    # @!attribute [rw] public_dual_stack_dns_name
    #   A dual-stack public hostname for a network interface. Requests from
    #   within the VPC resolve to both the private IPv4 address and the IPv6
    #   Global Unicast Address of the network interface. Requests from the
    #   internet resolve to both the public IPv4 and the IPv6 GUA address of
    #   the network interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PublicIpDnsNameOptions AWS API Documentation
    #
    class PublicIpDnsNameOptions < Struct.new(
      :dns_hostname_type,
      :public_ipv_4_dns_name,
      :public_ipv_6_dns_name,
      :public_dual_stack_dns_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv4 address pool.
    #
    # @!attribute [rw] pool_id
    #   The ID of the address pool.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the address pool.
    #   @return [String]
    #
    # @!attribute [rw] pool_address_ranges
    #   The address ranges.
    #   @return [Array<Types::PublicIpv4PoolRange>]
    #
    # @!attribute [rw] total_address_count
    #   The total number of addresses.
    #   @return [Integer]
    #
    # @!attribute [rw] total_available_address_count
    #   The total number of available addresses.
    #   @return [Integer]
    #
    # @!attribute [rw] network_border_group
    #   The name of the location from which the address pool is advertised.
    #   A network border group is a unique set of Availability Zones or
    #   Local Zones from where Amazon Web Services advertises public IP
    #   addresses.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags for the address pool.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PublicIpv4Pool AWS API Documentation
    #
    class PublicIpv4Pool < Struct.new(
      :pool_id,
      :description,
      :pool_address_ranges,
      :total_address_count,
      :total_available_address_count,
      :network_border_group,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an address range of an IPv4 address pool.
    #
    # @!attribute [rw] first_address
    #   The first IP address in the range.
    #   @return [String]
    #
    # @!attribute [rw] last_address
    #   The last IP address in the range.
    #   @return [String]
    #
    # @!attribute [rw] address_count
    #   The number of addresses in the range.
    #   @return [Integer]
    #
    # @!attribute [rw] available_address_count
    #   The number of available addresses in the range.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PublicIpv4PoolRange AWS API Documentation
    #
    class PublicIpv4PoolRange < Struct.new(
      :first_address,
      :last_address,
      :address_count,
      :available_address_count)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the result of the purchase.
    #
    # @!attribute [rw] currency_code
    #   The currency in which the `UpfrontPrice` and `HourlyPrice` amounts
    #   are specified. At this time, the only supported currency is `USD`.
    #   @return [String]
    #
    # @!attribute [rw] duration
    #   The duration of the reservation's term in seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] host_id_set
    #   The IDs of the Dedicated Hosts associated with the reservation.
    #   @return [Array<String>]
    #
    # @!attribute [rw] host_reservation_id
    #   The ID of the reservation.
    #   @return [String]
    #
    # @!attribute [rw] hourly_price
    #   The hourly price of the reservation per hour.
    #   @return [String]
    #
    # @!attribute [rw] instance_family
    #   The instance family on the Dedicated Host that the reservation can
    #   be associated with.
    #   @return [String]
    #
    # @!attribute [rw] payment_option
    #   The payment option for the reservation.
    #   @return [String]
    #
    # @!attribute [rw] upfront_price
    #   The upfront price of the reservation.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Purchase AWS API Documentation
    #
    class Purchase < Struct.new(
      :currency_code,
      :duration,
      :host_id_set,
      :host_reservation_id,
      :hourly_price,
      :instance_family,
      :payment_option,
      :upfront_price)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_block_extension_offering_id
    #   The ID of the Capacity Block extension offering to purchase.
    #   @return [String]
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity reservation to be extended.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseCapacityBlockExtensionRequest AWS API Documentation
    #
    class PurchaseCapacityBlockExtensionRequest < Struct.new(
      :capacity_block_extension_offering_id,
      :capacity_reservation_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_block_extensions
    #   The purchased Capacity Block extensions.
    #   @return [Array<Types::CapacityBlockExtension>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseCapacityBlockExtensionResult AWS API Documentation
    #
    class PurchaseCapacityBlockExtensionResult < Struct.new(
      :capacity_block_extensions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the Capacity Block during launch.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] capacity_block_offering_id
    #   The ID of the Capacity Block offering.
    #   @return [String]
    #
    # @!attribute [rw] instance_platform
    #   The type of operating system for which to reserve capacity.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseCapacityBlockRequest AWS API Documentation
    #
    class PurchaseCapacityBlockRequest < Struct.new(
      :dry_run,
      :tag_specifications,
      :capacity_block_offering_id,
      :instance_platform)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] capacity_reservation
    #   The Capacity Reservation.
    #   @return [Types::CapacityReservation]
    #
    # @!attribute [rw] capacity_blocks
    #   The Capacity Block.
    #   @return [Array<Types::CapacityBlock>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseCapacityBlockResult AWS API Documentation
    #
    class PurchaseCapacityBlockResult < Struct.new(
      :capacity_reservation,
      :capacity_blocks)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] currency_code
    #   The currency in which the `totalUpfrontPrice`, `LimitPrice`, and
    #   `totalHourlyPrice` amounts are specified. At this time, the only
    #   supported currency is `USD`.
    #   @return [String]
    #
    # @!attribute [rw] host_id_set
    #   The IDs of the Dedicated Hosts with which the reservation will be
    #   associated.
    #   @return [Array<String>]
    #
    # @!attribute [rw] limit_price
    #   The specified limit is checked against the total upfront cost of the
    #   reservation (calculated as the offering's upfront cost multiplied
    #   by the host count). If the total upfront cost is greater than the
    #   specified price limit, the request fails. This is used to ensure
    #   that the purchase does not exceed the expected upfront cost of the
    #   purchase. At this time, the only supported currency is `USD`. For
    #   example, to indicate a limit price of USD 100, specify 100.00.
    #   @return [String]
    #
    # @!attribute [rw] offering_id
    #   The ID of the offering.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the Dedicated Host Reservation during purchase.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservationRequest AWS API Documentation
    #
    class PurchaseHostReservationRequest < Struct.new(
      :client_token,
      :currency_code,
      :host_id_set,
      :limit_price,
      :offering_id,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] currency_code
    #   The currency in which the `totalUpfrontPrice` and `totalHourlyPrice`
    #   amounts are specified. At this time, the only supported currency is
    #   `USD`.
    #   @return [String]
    #
    # @!attribute [rw] purchase
    #   Describes the details of the purchase.
    #   @return [Array<Types::Purchase>]
    #
    # @!attribute [rw] total_hourly_price
    #   The total hourly price of the reservation calculated per hour.
    #   @return [String]
    #
    # @!attribute [rw] total_upfront_price
    #   The total amount charged to your account when you purchase the
    #   reservation.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseHostReservationResult AWS API Documentation
    #
    class PurchaseHostReservationResult < Struct.new(
      :client_token,
      :currency_code,
      :purchase,
      :total_hourly_price,
      :total_upfront_price)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a request to purchase Scheduled Instances.
    #
    # @!attribute [rw] instance_count
    #   The number of instances.
    #   @return [Integer]
    #
    # @!attribute [rw] purchase_token
    #   The purchase token.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseRequest AWS API Documentation
    #
    class PurchaseRequest < Struct.new(
      :instance_count,
      :purchase_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for PurchaseReservedInstancesOffering.
    #
    # @!attribute [rw] instance_count
    #   The number of Reserved Instances to purchase.
    #   @return [Integer]
    #
    # @!attribute [rw] reserved_instances_offering_id
    #   The ID of the Reserved Instance offering to purchase.
    #   @return [String]
    #
    # @!attribute [rw] purchase_time
    #   The time at which to purchase the Reserved Instance, in UTC format
    #   (for example, *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] limit_price
    #   Specified for Reserved Instance Marketplace offerings to limit the
    #   total order and ensure that the Reserved Instances are not purchased
    #   at unexpected prices.
    #   @return [Types::ReservedInstanceLimitPrice]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOfferingRequest AWS API Documentation
    #
    class PurchaseReservedInstancesOfferingRequest < Struct.new(
      :instance_count,
      :reserved_instances_offering_id,
      :purchase_time,
      :dry_run,
      :limit_price)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of PurchaseReservedInstancesOffering.
    #
    # @!attribute [rw] reserved_instances_id
    #   The IDs of the purchased Reserved Instances. If your purchase
    #   crosses into a discounted pricing tier, the final Reserved Instances
    #   IDs might change. For more information, see [Crossing pricing
    #   tiers][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseReservedInstancesOfferingResult AWS API Documentation
    #
    class PurchaseReservedInstancesOfferingResult < Struct.new(
      :reserved_instances_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for PurchaseScheduledInstances.
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that ensures the idempotency of
    #   the request. For more information, see [Ensuring Idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] purchase_requests
    #   The purchase requests.
    #   @return [Array<Types::PurchaseRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstancesRequest AWS API Documentation
    #
    class PurchaseScheduledInstancesRequest < Struct.new(
      :client_token,
      :dry_run,
      :purchase_requests)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of PurchaseScheduledInstances.
    #
    # @!attribute [rw] scheduled_instance_set
    #   Information about the Scheduled Instances.
    #   @return [Array<Types::ScheduledInstance>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/PurchaseScheduledInstancesResult AWS API Documentation
    #
    class PurchaseScheduledInstancesResult < Struct.new(
      :scheduled_instance_set)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_ids
    #   The instance IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RebootInstancesRequest AWS API Documentation
    #
    class RebootInstancesRequest < Struct.new(
      :instance_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a recurring charge.
    #
    # @!attribute [rw] amount
    #   The amount of the recurring charge.
    #   @return [Float]
    #
    # @!attribute [rw] frequency
    #   The frequency of the recurring charge.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RecurringCharge AWS API Documentation
    #
    class RecurringCharge < Struct.new(
      :amount,
      :frequency)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the security group that is referenced in the security group
    # rule.
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] peering_status
    #   The status of a VPC peering connection, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] user_id
    #   The Amazon Web Services account ID.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of the VPC peering connection (if applicable).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReferencedSecurityGroup AWS API Documentation
    #
    class ReferencedSecurityGroup < Struct.new(
      :group_id,
      :peering_status,
      :user_id,
      :vpc_id,
      :vpc_peering_connection_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Region.
    #
    # @!attribute [rw] opt_in_status
    #   The Region opt-in status. The possible values are
    #   `opt-in-not-required`, `opted-in`, and `not-opted-in`.
    #   @return [String]
    #
    # @!attribute [rw] region_name
    #   The name of the Region.
    #   @return [String]
    #
    # @!attribute [rw] endpoint
    #   The Region service endpoint.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Region AWS API Documentation
    #
    class Region < Struct.new(
      :opt_in_status,
      :region_name,
      :endpoint)
      SENSITIVE = []
      include Aws::Structure
    end

    # A summary report for the attribute for a Region.
    #
    # @!attribute [rw] region_name
    #   The Amazon Web Services Region.
    #   @return [String]
    #
    # @!attribute [rw] number_of_matched_accounts
    #   The number of accounts in the Region with the same configuration
    #   value for the attribute that is most frequently observed.
    #   @return [Integer]
    #
    # @!attribute [rw] number_of_unmatched_accounts
    #   The number of accounts in the Region with a configuration value
    #   different from the most frequently observed value for the attribute.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegionalSummary AWS API Documentation
    #
    class RegionalSummary < Struct.new(
      :region_name,
      :number_of_matched_accounts,
      :number_of_unmatched_accounts)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for RegisterImage.
    #
    # @!attribute [rw] image_location
    #   The full path to your AMI manifest in Amazon S3 storage. The
    #   specified bucket must have the `aws-exec-read` canned access control
    #   list (ACL) to ensure that it can be accessed by Amazon EC2. For more
    #   information, see [Canned ACL][1] in the *Amazon S3 Service Developer
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl
    #   @return [String]
    #
    # @!attribute [rw] billing_products
    #   The billing product codes. Your account must be authorized to
    #   specify billing product codes.
    #
    #   If your account is not authorized to specify billing product codes,
    #   you can publish AMIs that include billable software and list them on
    #   the Amazon Web Services Marketplace. You must first register as a
    #   seller on the Amazon Web Services Marketplace. For more information,
    #   see [Getting started as an Amazon Web Services Marketplace
    #   seller][1] and [AMI-based products in Amazon Web Services
    #   Marketplace][2] in the *Amazon Web Services Marketplace Seller
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html
    #   [2]: https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html
    #   @return [Array<String>]
    #
    # @!attribute [rw] boot_mode
    #   The boot mode of the AMI. A value of `uefi-preferred` indicates that
    #   the AMI supports both UEFI and Legacy BIOS.
    #
    #   <note markdown="1"> The operating system contained in the AMI must be configured to
    #   support the specified boot mode.
    #
    #    </note>
    #
    #   For more information, see [Instance launch behavior with Amazon EC2
    #   boot modes][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html
    #   @return [String]
    #
    # @!attribute [rw] tpm_support
    #   Set to `v2.0` to enable Trusted Platform Module (TPM) support. For
    #   more information, see [NitroTPM][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html
    #   @return [String]
    #
    # @!attribute [rw] uefi_data
    #   Base64 representation of the non-volatile UEFI variable store. To
    #   retrieve the UEFI data, use the [GetInstanceUefiData][1] command.
    #   You can inspect and modify the UEFI data by using the
    #   [python-uefivars tool][2] on GitHub. For more information, see [UEFI
    #   Secure Boot for Amazon EC2 instances][3] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData
    #   [2]: https://github.com/awslabs/python-uefivars
    #   [3]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html
    #   @return [String]
    #
    # @!attribute [rw] imds_support
    #   Set to `v2.0` to indicate that IMDSv2 is specified in the AMI.
    #   Instances launched from this AMI will have `HttpTokens`
    #   automatically set to `required` so that, by default, the instance
    #   requires that IMDSv2 is used when requesting instance metadata. In
    #   addition, `HttpPutResponseHopLimit` is set to `2`. For more
    #   information, see [Configure the AMI][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #   <note markdown="1"> If you set the value to `v2.0`, make sure that your AMI software can
    #   support IMDSv2.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the AMI.
    #
    #   To tag the AMI, the value for `ResourceType` must be `image`. If you
    #   specify another value for `ResourceType`, the request fails.
    #
    #   To tag an AMI after it has been registered, see [CreateTags][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] name
    #   A name for your AMI.
    #
    #   Constraints: 3-128 alphanumeric characters, parentheses (()), square
    #   brackets (\[\]), spaces ( ), periods (.), slashes (/), dashes (-),
    #   single quotes ('), at-signs (@), or underscores(\_)
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for your AMI.
    #   @return [String]
    #
    # @!attribute [rw] architecture
    #   The architecture of the AMI.
    #
    #   Default: For Amazon EBS-backed AMIs, `i386`. For instance
    #   store-backed AMIs, the architecture specified in the manifest file.
    #   @return [String]
    #
    # @!attribute [rw] kernel_id
    #   The ID of the kernel.
    #   @return [String]
    #
    # @!attribute [rw] ramdisk_id
    #   The ID of the RAM disk.
    #   @return [String]
    #
    # @!attribute [rw] root_device_name
    #   The device name of the root device volume (for example,
    #   `/dev/sda1`).
    #   @return [String]
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mapping entries.
    #
    #   If you specify an Amazon EBS volume using the ID of an Amazon EBS
    #   snapshot, you can't specify the encryption state of the volume.
    #
    #   If you create an AMI on an Outpost, then all backing snapshots must
    #   be on the same Outpost or in the Region of that Outpost. AMIs on an
    #   Outpost that include local snapshots can be used to launch instances
    #   on the same Outpost only. For more information, [Create AMIs from
    #   local snapshots][1] in the *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#ami
    #   @return [Array<Types::BlockDeviceMapping>]
    #
    # @!attribute [rw] virtualization_type
    #   The type of virtualization (`hvm` \| `paravirtual`).
    #
    #   Default: `paravirtual`
    #   @return [String]
    #
    # @!attribute [rw] sriov_net_support
    #   Set to `simple` to enable enhanced networking with the Intel 82599
    #   Virtual Function interface for the AMI and any instances that you
    #   launch from the AMI.
    #
    #   There is no way to disable `sriovNetSupport` at this time.
    #
    #   This option is supported only for HVM AMIs. Specifying this option
    #   with a PV AMI can make instances launched from the AMI unreachable.
    #   @return [String]
    #
    # @!attribute [rw] ena_support
    #   Set to `true` to enable enhanced networking with ENA for the AMI and
    #   any instances that you launch from the AMI.
    #
    #   This option is supported only for HVM AMIs. Specifying this option
    #   with a PV AMI can make instances launched from the AMI unreachable.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImageRequest AWS API Documentation
    #
    class RegisterImageRequest < Struct.new(
      :image_location,
      :billing_products,
      :boot_mode,
      :tpm_support,
      :uefi_data,
      :imds_support,
      :tag_specifications,
      :dry_run,
      :name,
      :description,
      :architecture,
      :kernel_id,
      :ramdisk_id,
      :root_device_name,
      :block_device_mappings,
      :virtualization_type,
      :sriov_net_support,
      :ena_support)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of RegisterImage.
    #
    # @!attribute [rw] image_id
    #   The ID of the newly registered AMI.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterImageResult AWS API Documentation
    #
    class RegisterImageResult < Struct.new(
      :image_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_tag_attribute
    #   Information about the tag keys to register.
    #   @return [Types::RegisterInstanceTagAttributeRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterInstanceEventNotificationAttributesRequest AWS API Documentation
    #
    class RegisterInstanceEventNotificationAttributesRequest < Struct.new(
      :dry_run,
      :instance_tag_attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_tag_attribute
    #   The resulting set of tag keys.
    #   @return [Types::InstanceTagNotificationAttribute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterInstanceEventNotificationAttributesResult AWS API Documentation
    #
    class RegisterInstanceEventNotificationAttributesResult < Struct.new(
      :instance_tag_attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the tag keys to register for the current Region. You
    # can either specify individual tag keys or register all tag keys in the
    # current Region. You must specify either `IncludeAllTagsOfInstance` or
    # `InstanceTagKeys` in the request
    #
    # @!attribute [rw] include_all_tags_of_instance
    #   Indicates whether to register all tag keys in the current Region.
    #   Specify `true` to register all tag keys.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_tag_keys
    #   The tag keys to register.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterInstanceTagAttributeRequest AWS API Documentation
    #
    class RegisterInstanceTagAttributeRequest < Struct.new(
      :include_all_tags_of_instance,
      :instance_tag_keys)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] group_ip_address
    #   The IP address assigned to the transit gateway multicast group.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_ids
    #   The group members' network interface IDs to register with the
    #   transit gateway multicast group.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterTransitGatewayMulticastGroupMembersRequest AWS API Documentation
    #
    class RegisterTransitGatewayMulticastGroupMembersRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :group_ip_address,
      :network_interface_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] registered_multicast_group_members
    #   Information about the registered transit gateway multicast group
    #   members.
    #   @return [Types::TransitGatewayMulticastRegisteredGroupMembers]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterTransitGatewayMulticastGroupMembersResult AWS API Documentation
    #
    class RegisterTransitGatewayMulticastGroupMembersResult < Struct.new(
      :registered_multicast_group_members)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] group_ip_address
    #   The IP address assigned to the transit gateway multicast group.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_ids
    #   The group sources' network interface IDs to register with the
    #   transit gateway multicast group.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterTransitGatewayMulticastGroupSourcesRequest AWS API Documentation
    #
    class RegisterTransitGatewayMulticastGroupSourcesRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :group_ip_address,
      :network_interface_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] registered_multicast_group_sources
    #   Information about the transit gateway multicast group sources.
    #   @return [Types::TransitGatewayMulticastRegisteredGroupSources]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RegisterTransitGatewayMulticastGroupSourcesResult AWS API Documentation
    #
    class RegisterTransitGatewayMulticastGroupSourcesResult < Struct.new(
      :registered_multicast_group_sources)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] capacity_reservation_id
    #   The ID of the Capacity Reservation for which to reject the request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectCapacityReservationBillingOwnershipRequest AWS API Documentation
    #
    class RejectCapacityReservationBillingOwnershipRequest < Struct.new(
      :dry_run,
      :capacity_reservation_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectCapacityReservationBillingOwnershipResult AWS API Documentation
    #
    class RejectCapacityReservationBillingOwnershipResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets to associate with the transit gateway
    #   multicast domain.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayMulticastDomainAssociationsRequest AWS API Documentation
    #
    class RejectTransitGatewayMulticastDomainAssociationsRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :transit_gateway_attachment_id,
      :subnet_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] associations
    #   Information about the multicast domain associations.
    #   @return [Types::TransitGatewayMulticastDomainAssociations]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayMulticastDomainAssociationsResult AWS API Documentation
    #
    class RejectTransitGatewayMulticastDomainAssociationsResult < Struct.new(
      :associations)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway peering attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayPeeringAttachmentRequest AWS API Documentation
    #
    class RejectTransitGatewayPeeringAttachmentRequest < Struct.new(
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_peering_attachment
    #   The transit gateway peering attachment.
    #   @return [Types::TransitGatewayPeeringAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayPeeringAttachmentResult AWS API Documentation
    #
    class RejectTransitGatewayPeeringAttachmentResult < Struct.new(
      :transit_gateway_peering_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayVpcAttachmentRequest AWS API Documentation
    #
    class RejectTransitGatewayVpcAttachmentRequest < Struct.new(
      :transit_gateway_attachment_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_vpc_attachment
    #   Information about the attachment.
    #   @return [Types::TransitGatewayVpcAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectTransitGatewayVpcAttachmentResult AWS API Documentation
    #
    class RejectTransitGatewayVpcAttachmentResult < Struct.new(
      :transit_gateway_vpc_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_id
    #   The ID of the service.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_ids
    #   The IDs of the VPC endpoints.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcEndpointConnectionsRequest AWS API Documentation
    #
    class RejectVpcEndpointConnectionsRequest < Struct.new(
      :dry_run,
      :service_id,
      :vpc_endpoint_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] unsuccessful
    #   Information about the endpoints that were not rejected, if
    #   applicable.
    #   @return [Array<Types::UnsuccessfulItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcEndpointConnectionsResult AWS API Documentation
    #
    class RejectVpcEndpointConnectionsResult < Struct.new(
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of the VPC peering connection.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnectionRequest AWS API Documentation
    #
    class RejectVpcPeeringConnectionRequest < Struct.new(
      :dry_run,
      :vpc_peering_connection_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RejectVpcPeeringConnectionResult AWS API Documentation
    #
    class RejectVpcPeeringConnectionResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_id
    #   The allocation ID. This parameter is required.
    #   @return [String]
    #
    # @!attribute [rw] public_ip
    #   Deprecated.
    #   @return [String]
    #
    # @!attribute [rw] network_border_group
    #   The set of Availability Zones, Local Zones, or Wavelength Zones from
    #   which Amazon Web Services advertises IP addresses.
    #
    #   If you provide an incorrect network border group, you receive an
    #   `InvalidAddress.NotFound` error.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseAddressRequest AWS API Documentation
    #
    class ReleaseAddressRequest < Struct.new(
      :allocation_id,
      :public_ip,
      :network_border_group,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] host_ids
    #   The IDs of the Dedicated Hosts to release.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHostsRequest AWS API Documentation
    #
    class ReleaseHostsRequest < Struct.new(
      :host_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] successful
    #   The IDs of the Dedicated Hosts that were successfully released.
    #   @return [Array<String>]
    #
    # @!attribute [rw] unsuccessful
    #   The IDs of the Dedicated Hosts that could not be released, including
    #   an error message.
    #   @return [Array<Types::UnsuccessfulItem>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseHostsResult AWS API Documentation
    #
    class ReleaseHostsResult < Struct.new(
      :successful,
      :unsuccessful)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   A check for 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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipam_pool_id
    #   The ID of the IPAM pool which contains the allocation you want to
    #   release.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   The CIDR of the allocation you want to release.
    #   @return [String]
    #
    # @!attribute [rw] ipam_pool_allocation_id
    #   The ID of the allocation.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseIpamPoolAllocationRequest AWS API Documentation
    #
    class ReleaseIpamPoolAllocationRequest < Struct.new(
      :dry_run,
      :ipam_pool_id,
      :cidr,
      :ipam_pool_allocation_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] success
    #   Indicates if the release was successful.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReleaseIpamPoolAllocationResult AWS API Documentation
    #
    class ReleaseIpamPoolAllocationResult < Struct.new(
      :success)
      SENSITIVE = []
      include Aws::Structure
    end

    # Remove an operating Region from an IPAM. Operating Regions are Amazon
    # Web Services Regions where the IPAM is allowed to manage IP address
    # CIDRs. IPAM only discovers and monitors resources in the Amazon Web
    # Services Regions you select as operating Regions.
    #
    # For more information about operating Regions, see [Create an IPAM][1]
    # in the *Amazon VPC IPAM User Guide*
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html
    #
    # @!attribute [rw] region_name
    #   The name of the operating Region you want to remove.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RemoveIpamOperatingRegion AWS API Documentation
    #
    class RemoveIpamOperatingRegion < Struct.new(
      :region_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Remove an Organizational Unit (OU) exclusion to your IPAM. If your
    # IPAM is integrated with Amazon Web Services Organizations and you add
    # an organizational unit (OU) exclusion, IPAM will not manage the IP
    # addresses in accounts in that OU exclusion. There is a limit on the
    # number of exclusions you can create. For more information, see [Quotas
    # for your IPAM][1] in the *Amazon VPC IPAM User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html
    #
    # @!attribute [rw] organizations_entity_path
    #   An Amazon Web Services Organizations entity path. Build the path for
    #   the OU(s) using Amazon Web Services Organizations IDs separated by a
    #   `/`. Include all child OUs by ending the path with `/*`.
    #
    #   * Example 1
    #
    #     * Path to a child OU:
    #       `o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/ou-jkl0-awsddddd/`
    #
    #     * In this example, `o-a1b2c3d4e5` is the organization ID,
    #       `r-f6g7h8i9j0example` is the root ID , `ou-ghi0-awsccccc` is an
    #       OU ID, and `ou-jkl0-awsddddd` is a child OU ID.
    #
    #     * IPAM will not manage the IP addresses in accounts in the child
    #       OU.
    #   * Example 2
    #
    #     * Path where all child OUs will be part of the exclusion:
    #       `o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/*`
    #
    #     * In this example, IPAM will not manage the IP addresses in
    #       accounts in the OU (`ou-ghi0-awsccccc`) or in accounts in any
    #       OUs that are children of the OU.
    #
    #   For more information on how to construct an entity path, see
    #   [Understand the Amazon Web Services Organizations entity path][1] in
    #   the *Amazon Web Services Identity and Access Management User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_last-accessed-view-data-orgs.html#access_policies_access-advisor-viewing-orgs-entity-path
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RemoveIpamOrganizationalUnitExclusion AWS API Documentation
    #
    class RemoveIpamOrganizationalUnitExclusion < Struct.new(
      :organizations_entity_path)
      SENSITIVE = []
      include Aws::Structure
    end

    # An entry for a prefix list.
    #
    # @!attribute [rw] cidr
    #   The CIDR block.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RemovePrefixListEntry AWS API Documentation
    #
    class RemovePrefixListEntry < Struct.new(
      :cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] iam_instance_profile
    #   The IAM instance profile.
    #   @return [Types::IamInstanceProfileSpecification]
    #
    # @!attribute [rw] association_id
    #   The ID of the existing IAM instance profile association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociationRequest AWS API Documentation
    #
    class ReplaceIamInstanceProfileAssociationRequest < Struct.new(
      :iam_instance_profile,
      :association_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] iam_instance_profile_association
    #   Information about the IAM instance profile association.
    #   @return [Types::IamInstanceProfileAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceIamInstanceProfileAssociationResult AWS API Documentation
    #
    class ReplaceIamInstanceProfileAssociationResult < Struct.new(
      :iam_instance_profile_association)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_criteria
    #   The list of criteria that are evaluated to determine whether AMIs
    #   are discoverable and usable in the account in the specified Amazon
    #   Web Services Region.
    #   @return [Array<Types::ImageCriterionRequest>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceImageCriteriaInAllowedImagesSettingsRequest AWS API Documentation
    #
    class ReplaceImageCriteriaInAllowedImagesSettingsRequest < Struct.new(
      :image_criteria,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return_value
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceImageCriteriaInAllowedImagesSettingsResult AWS API Documentation
    #
    class ReplaceImageCriteriaInAllowedImagesSettingsResult < Struct.new(
      :return_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] association_id
    #   The ID of the current association between the original network ACL
    #   and the subnet.
    #   @return [String]
    #
    # @!attribute [rw] network_acl_id
    #   The ID of the new network ACL to associate with the subnet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociationRequest AWS API Documentation
    #
    class ReplaceNetworkAclAssociationRequest < Struct.new(
      :dry_run,
      :association_id,
      :network_acl_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] new_association_id
    #   The ID of the new association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclAssociationResult AWS API Documentation
    #
    class ReplaceNetworkAclAssociationResult < Struct.new(
      :new_association_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_acl_id
    #   The ID of the ACL.
    #   @return [String]
    #
    # @!attribute [rw] rule_number
    #   The rule number of the entry to replace.
    #   @return [Integer]
    #
    # @!attribute [rw] protocol
    #   The protocol number. A value of "-1" means all protocols. If you
    #   specify "-1" or a protocol number other than "6" (TCP), "17"
    #   (UDP), or "1" (ICMP), traffic on all ports is allowed, regardless
    #   of any ports or ICMP types or codes that you specify. If you specify
    #   protocol "58" (ICMPv6) and specify an IPv4 CIDR block, traffic for
    #   all ICMP types and codes allowed, regardless of any that you
    #   specify. If you specify protocol "58" (ICMPv6) and specify an IPv6
    #   CIDR block, you must specify an ICMP type and code.
    #   @return [String]
    #
    # @!attribute [rw] rule_action
    #   Indicates whether to allow or deny the traffic that matches the
    #   rule.
    #   @return [String]
    #
    # @!attribute [rw] egress
    #   Indicates whether to replace the egress rule.
    #
    #   Default: If no value is specified, we replace the ingress rule.
    #   @return [Boolean]
    #
    # @!attribute [rw] cidr_block
    #   The IPv4 network range to allow or deny, in CIDR notation (for
    #   example `172.16.0.0/24`).
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   The IPv6 network range to allow or deny, in CIDR notation (for
    #   example `2001:bd8:1234:1a00::/64`).
    #   @return [String]
    #
    # @!attribute [rw] icmp_type_code
    #   ICMP protocol: The ICMP or ICMPv6 type and code. Required if
    #   specifying protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6
    #   CIDR block.
    #   @return [Types::IcmpTypeCode]
    #
    # @!attribute [rw] port_range
    #   TCP or UDP protocols: The range of ports the rule applies to.
    #   Required if specifying protocol 6 (TCP) or 17 (UDP).
    #   @return [Types::PortRange]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceNetworkAclEntryRequest AWS API Documentation
    #
    class ReplaceNetworkAclEntryRequest < Struct.new(
      :dry_run,
      :network_acl_id,
      :rule_number,
      :protocol,
      :rule_action,
      :egress,
      :cidr_block,
      :ipv_6_cidr_block,
      :icmp_type_code,
      :port_range)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a root volume replacement task.
    #
    # @!attribute [rw] replace_root_volume_task_id
    #   The ID of the root volume replacement task.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance for which the root volume replacement task
    #   was created.
    #   @return [String]
    #
    # @!attribute [rw] task_state
    #   The state of the task. The task can be in one of the following
    #   states:
    #
    #   * `pending` - the replacement volume is being created.
    #
    #   * `in-progress` - the original volume is being detached and the
    #     replacement volume is being attached.
    #
    #   * `succeeded` - the replacement volume has been successfully
    #     attached to the instance and the instance is available.
    #
    #   * `failing` - the replacement task is in the process of failing.
    #
    #   * `failed` - the replacement task has failed but the original root
    #     volume is still attached.
    #
    #   * `failing-detached` - the replacement task is in the process of
    #     failing. The instance might have no root volume attached.
    #
    #   * `failed-detached` - the replacement task has failed and the
    #     instance has no root volume attached.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The time the task was started.
    #   @return [String]
    #
    # @!attribute [rw] complete_time
    #   The time the task completed.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the task.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI used to create the replacement root volume.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot used to create the replacement root volume.
    #   @return [String]
    #
    # @!attribute [rw] delete_replaced_root_volume
    #   Indicates whether the original root volume is to be deleted after
    #   the root volume replacement task completes.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRootVolumeTask AWS API Documentation
    #
    class ReplaceRootVolumeTask < Struct.new(
      :replace_root_volume_task_id,
      :instance_id,
      :task_state,
      :start_time,
      :complete_time,
      :tags,
      :image_id,
      :snapshot_id,
      :delete_replaced_root_volume)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] destination_prefix_list_id
    #   The ID of the prefix list for the route.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_id
    #   The ID of a VPC endpoint. Supported for Gateway Load Balancer
    #   endpoints only.
    #   @return [String]
    #
    # @!attribute [rw] local_target
    #   Specifies whether to reset the local route to its default target
    #   (`local`).
    #   @return [Boolean]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of a transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] carrier_gateway_id
    #   \[IPv4 traffic only\] The ID of a carrier gateway.
    #   @return [String]
    #
    # @!attribute [rw] core_network_arn
    #   The Amazon Resource Name (ARN) of the core network.
    #   @return [String]
    #
    # @!attribute [rw] odb_network_arn
    #   The Amazon Resource Name (ARN) of the ODB network.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @!attribute [rw] destination_cidr_block
    #   The IPv4 CIDR address block used for the destination match. The
    #   value that you provide must match the CIDR of an existing route in
    #   the table.
    #   @return [String]
    #
    # @!attribute [rw] gateway_id
    #   The ID of an internet gateway or virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] destination_ipv_6_cidr_block
    #   The IPv6 CIDR address block used for the destination match. The
    #   value that you provide must match the CIDR of an existing route in
    #   the table.
    #   @return [String]
    #
    # @!attribute [rw] egress_only_internet_gateway_id
    #   \[IPv6 traffic only\] The ID of an egress-only internet gateway.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of a NAT instance in your VPC.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of a network interface.
    #   @return [String]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of a VPC peering connection.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway_id
    #   \[IPv4 traffic only\] The ID of a NAT gateway.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteRequest AWS API Documentation
    #
    class ReplaceRouteRequest < Struct.new(
      :destination_prefix_list_id,
      :vpc_endpoint_id,
      :local_target,
      :transit_gateway_id,
      :local_gateway_id,
      :carrier_gateway_id,
      :core_network_arn,
      :odb_network_arn,
      :dry_run,
      :route_table_id,
      :destination_cidr_block,
      :gateway_id,
      :destination_ipv_6_cidr_block,
      :egress_only_internet_gateway_id,
      :instance_id,
      :network_interface_id,
      :vpc_peering_connection_id,
      :nat_gateway_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] association_id
    #   The association ID.
    #   @return [String]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the new route table to associate with the subnet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociationRequest AWS API Documentation
    #
    class ReplaceRouteTableAssociationRequest < Struct.new(
      :dry_run,
      :association_id,
      :route_table_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] new_association_id
    #   The ID of the new association.
    #   @return [String]
    #
    # @!attribute [rw] association_state
    #   The state of the association.
    #   @return [Types::RouteTableAssociationState]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceRouteTableAssociationResult AWS API Documentation
    #
    class ReplaceRouteTableAssociationResult < Struct.new(
      :new_association_id,
      :association_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] destination_cidr_block
    #   The CIDR range used for the destination match. Routing decisions are
    #   based on the most specific match.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] blackhole
    #   Indicates whether traffic matching this route is to be dropped.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceTransitGatewayRouteRequest AWS API Documentation
    #
    class ReplaceTransitGatewayRouteRequest < Struct.new(
      :destination_cidr_block,
      :transit_gateway_route_table_id,
      :transit_gateway_attachment_id,
      :blackhole,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] route
    #   Information about the modified route.
    #   @return [Types::TransitGatewayRoute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceTransitGatewayRouteResult AWS API Documentation
    #
    class ReplaceTransitGatewayRouteResult < Struct.new(
      :route)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpn_connection_id
    #   The ID of the Site-to-Site VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] vpn_tunnel_outside_ip_address
    #   The external IP address of the VPN tunnel.
    #   @return [String]
    #
    # @!attribute [rw] apply_pending_maintenance
    #   Trigger pending tunnel endpoint maintenance.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceVpnTunnelRequest AWS API Documentation
    #
    class ReplaceVpnTunnelRequest < Struct.new(
      :vpn_connection_id,
      :vpn_tunnel_outside_ip_address,
      :apply_pending_maintenance,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Confirmation of replace tunnel operation.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReplaceVpnTunnelResult AWS API Documentation
    #
    class ReplaceVpnTunnelResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instances
    #   The instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] status
    #   The status of all instances listed.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The time at which the reported instance health state began.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The time at which the reported instance health state ended.
    #   @return [Time]
    #
    # @!attribute [rw] reason_codes
    #   The reason codes that describe the health state of your instance.
    #
    #   * `instance-stuck-in-state`: My instance is stuck in a state.
    #
    #   * `unresponsive`: My instance is unresponsive.
    #
    #   * `not-accepting-credentials`: My instance is not accepting my
    #     credentials.
    #
    #   * `password-not-available`: A password is not available for my
    #     instance.
    #
    #   * `performance-network`: My instance is experiencing performance
    #     problems that I believe are network related.
    #
    #   * `performance-instance-store`: My instance is experiencing
    #     performance problems that I believe are related to the instance
    #     stores.
    #
    #   * `performance-ebs-volume`: My instance is experiencing performance
    #     problems that I believe are related to an EBS volume.
    #
    #   * `performance-other`: My instance is experiencing performance
    #     problems.
    #
    #   * `other`: \[explain using the description parameter\]
    #   @return [Array<String>]
    #
    # @!attribute [rw] description
    #   Descriptive text about the health state of your instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReportInstanceStatusRequest AWS API Documentation
    #
    class ReportInstanceStatusRequest < Struct.new(
      :dry_run,
      :instances,
      :status,
      :start_time,
      :end_time,
      :reason_codes,
      :description)
      SENSITIVE = [:description]
      include Aws::Structure
    end

    # Describes a port range.
    #
    # @!attribute [rw] from_port
    #   The first port in the range.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   The last port in the range.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestFilterPortRange AWS API Documentation
    #
    class RequestFilterPortRange < Struct.new(
      :from_port,
      :to_port)
      SENSITIVE = []
      include Aws::Structure
    end

    # A tag on an IPAM resource.
    #
    # @!attribute [rw] key
    #   The key of a tag assigned to the resource. Use this filter to find
    #   all resources assigned a tag with a specific key, regardless of the
    #   tag value.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value for the tag.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestIpamResourceTag AWS API Documentation
    #
    class RequestIpamResourceTag < Struct.new(
      :key,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The information to include in the launch template.
    #
    # <note markdown="1"> You must specify at least one parameter for the launch template data.
    #
    #  </note>
    #
    # @!attribute [rw] kernel_id
    #   The ID of the kernel.
    #
    #   We recommend that you use PV-GRUB instead of kernels and RAM disks.
    #   For more information, see [User provided kernels][1] in the *Amazon
    #   Linux 2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/linux/al2/ug/UserProvidedKernels.html
    #   @return [String]
    #
    # @!attribute [rw] ebs_optimized
    #   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.
    #   @return [Boolean]
    #
    # @!attribute [rw] iam_instance_profile
    #   The name or Amazon Resource Name (ARN) of an IAM instance profile.
    #   @return [Types::LaunchTemplateIamInstanceProfileSpecificationRequest]
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mapping.
    #   @return [Array<Types::LaunchTemplateBlockDeviceMappingRequest>]
    #
    # @!attribute [rw] network_interfaces
    #   The network interfaces for the instance.
    #   @return [Array<Types::LaunchTemplateInstanceNetworkInterfaceSpecificationRequest>]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI in the format `ami-0ac394d6a3example`.
    #
    #   Alternatively, you can specify a Systems Manager parameter, using
    #   one of the following formats. The Systems Manager parameter will
    #   resolve to an AMI ID on launch.
    #
    #   To reference a public parameter:
    #
    #   * `resolve:ssm:public-parameter `
    #
    #   ^
    #
    #   To reference a parameter stored in the same account:
    #
    #   * `resolve:ssm:parameter-name `
    #
    #   * `resolve:ssm:parameter-name:version-number `
    #
    #   * `resolve:ssm:parameter-name:label `
    #
    #   To reference a parameter shared from another Amazon Web Services
    #   account:
    #
    #   * `resolve:ssm:parameter-ARN `
    #
    #   * `resolve:ssm:parameter-ARN:version-number `
    #
    #   * `resolve:ssm:parameter-ARN:label `
    #
    #   For more information, see [Use a Systems Manager parameter instead
    #   of an AMI ID][1] in the *Amazon EC2 User Guide*.
    #
    #   <note markdown="1"> If the launch template will be used for an EC2 Fleet or Spot Fleet,
    #   note the following:
    #
    #    * Only EC2 Fleets of type `instant` support specifying a Systems
    #     Manager parameter.
    #
    #   * For EC2 Fleets of type `maintain` or `request`, or for Spot
    #     Fleets, you must specify the AMI ID.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type. For more information, see [Amazon EC2 instance
    #   types][1] in the *Amazon EC2 User Guide*.
    #
    #   If you specify `InstanceType`, you can't specify
    #   `InstanceRequirements`.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
    #   @return [String]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair. You can create a key pair using
    #   [CreateKeyPair][1] or [ImportKeyPair][2].
    #
    #   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.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html
    #   @return [String]
    #
    # @!attribute [rw] monitoring
    #   The monitoring for the instance.
    #   @return [Types::LaunchTemplatesMonitoringRequest]
    #
    # @!attribute [rw] placement
    #   The placement for the instance.
    #   @return [Types::LaunchTemplatePlacementRequest]
    #
    # @!attribute [rw] ram_disk_id
    #   The ID of the RAM disk.
    #
    #   We recommend that you use PV-GRUB instead of kernels and RAM disks.
    #   For more information, see [User provided kernels][1] in the *Amazon
    #   EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html
    #   @return [String]
    #
    # @!attribute [rw] disable_api_termination
    #   Indicates whether termination protection is enabled for the
    #   instance. The default is `false`, which means that you can terminate
    #   the instance using the Amazon EC2 console, command line tools, or
    #   API. You can enable termination protection when you launch an
    #   instance, while the instance is running, or while the instance is
    #   stopped.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_initiated_shutdown_behavior
    #   Indicates whether an instance stops or terminates when you initiate
    #   shutdown from the instance (using the operating system command for
    #   system shutdown).
    #
    #   Default: `stop`
    #   @return [String]
    #
    # @!attribute [rw] user_data
    #   The user data to make available to the instance. You must provide
    #   base64-encoded text. User data is limited to 16 KB. For more
    #   information, see [Run commands when you launch an EC2 instance with
    #   user data input][1] in the *Amazon EC2 User Guide*.
    #
    #   If you are creating the launch template for use with Batch, the user
    #   data must be provided in the [MIME multi-part archive format][2].
    #   For more information, see [Amazon EC2 user data in launch
    #   templates][3] in the *Batch User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
    #   [2]: https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive
    #   [3]: https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html#lt-user-data
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the resources that are created during instance
    #   launch. These tags are not applied to the launch template.
    #   @return [Array<Types::LaunchTemplateTagSpecificationRequest>]
    #
    # @!attribute [rw] elastic_gpu_specifications
    #   Deprecated.
    #
    #   <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #    </note>
    #   @return [Array<Types::ElasticGpuSpecification>]
    #
    # @!attribute [rw] elastic_inference_accelerators
    #   <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #    </note>
    #
    #   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.
    #
    #   You cannot specify accelerators from different generations in the
    #   same request.
    #   @return [Array<Types::LaunchTemplateElasticInferenceAccelerator>]
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of the security groups.
    #
    #   If you specify a network interface, you must specify any security
    #   groups as part of the network interface instead of using this
    #   parameter.
    #   @return [Array<String>]
    #
    # @!attribute [rw] security_groups
    #   The names of the security groups. For a nondefault VPC, you must use
    #   security group IDs instead.
    #
    #   If you specify a network interface, you must specify any security
    #   groups as part of the network interface instead of using this
    #   parameter.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_market_options
    #   The market (purchasing) option for the instances.
    #   @return [Types::LaunchTemplateInstanceMarketOptionsRequest]
    #
    # @!attribute [rw] credit_specification
    #   The credit option for CPU usage of the instance. Valid only for T
    #   instances.
    #   @return [Types::CreditSpecificationRequest]
    #
    # @!attribute [rw] cpu_options
    #   The CPU options for the instance. For more information, see [CPU
    #   options for Amazon EC2 instances][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html
    #   @return [Types::LaunchTemplateCpuOptionsRequest]
    #
    # @!attribute [rw] capacity_reservation_specification
    #   The Capacity Reservation targeting option. If you do not specify
    #   this parameter, the instance's Capacity Reservation preference
    #   defaults to `open`, which enables it to run in any open Capacity
    #   Reservation that has matching attributes (instance type, platform,
    #   Availability Zone).
    #   @return [Types::LaunchTemplateCapacityReservationSpecificationRequest]
    #
    # @!attribute [rw] license_specifications
    #   The license configurations.
    #   @return [Array<Types::LaunchTemplateLicenseConfigurationRequest>]
    #
    # @!attribute [rw] hibernation_options
    #   Indicates whether an instance is enabled for hibernation. This
    #   parameter is valid only if the instance meets the [hibernation
    #   prerequisites][1]. For more information, see [Hibernate your Amazon
    #   EC2 instance][2] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html
    #   @return [Types::LaunchTemplateHibernationOptionsRequest]
    #
    # @!attribute [rw] metadata_options
    #   The metadata options for the instance. For more information, see
    #   [Configure the Instance Metadata Service options][1] in the *Amazon
    #   EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html
    #   @return [Types::LaunchTemplateInstanceMetadataOptionsRequest]
    #
    # @!attribute [rw] enclave_options
    #   Indicates whether the instance is enabled for Amazon Web Services
    #   Nitro Enclaves. For more information, see [What is Nitro
    #   Enclaves?][1] in the *Amazon Web Services Nitro Enclaves User
    #   Guide*.
    #
    #   You can't enable Amazon Web Services Nitro Enclaves and hibernation
    #   on the same instance.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html
    #   @return [Types::LaunchTemplateEnclaveOptionsRequest]
    #
    # @!attribute [rw] instance_requirements
    #   The attributes for the instance types. When you specify instance
    #   attributes, Amazon EC2 will identify instance types with these
    #   attributes.
    #
    #   You must specify `VCpuCount` and `MemoryMiB`. All other attributes
    #   are optional. Any unspecified optional attribute is set to its
    #   default.
    #
    #   When you specify multiple attributes, you get instance types that
    #   satisfy all of the specified attributes. If you specify multiple
    #   values for an attribute, you get instance types that satisfy any of
    #   the specified values.
    #
    #   To limit the list of instance types from which Amazon EC2 can
    #   identify matching instance types, you can use one of the following
    #   parameters, but not both in the same request:
    #
    #   * `AllowedInstanceTypes` - The instance types to include in the
    #     list. All other instance types are ignored, even if they match
    #     your specified attributes.
    #
    #   * `ExcludedInstanceTypes` - The instance types to exclude from the
    #     list, even if they match your specified attributes.
    #
    #   <note markdown="1"> If you specify `InstanceRequirements`, you can't specify
    #   `InstanceType`.
    #
    #    Attribute-based instance type selection is only supported when using
    #   Auto Scaling groups, EC2 Fleet, and Spot Fleet to launch instances.
    #   If you plan to use the launch template in the [launch instance
    #   wizard][1], or with the [RunInstances][2] API or
    #   [AWS::EC2::Instance][3] Amazon Web Services CloudFormation resource,
    #   you can't specify `InstanceRequirements`.
    #
    #    </note>
    #
    #   For more information, see [Specify attributes for instance type
    #   selection for EC2 Fleet or Spot Fleet][4] and [Spot placement
    #   score][5] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html
    #   [3]: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html
    #   [4]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html
    #   [5]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html
    #   @return [Types::InstanceRequirementsRequest]
    #
    # @!attribute [rw] private_dns_name_options
    #   The options for the instance hostname. The default values are
    #   inherited from the subnet.
    #   @return [Types::LaunchTemplatePrivateDnsNameOptionsRequest]
    #
    # @!attribute [rw] maintenance_options
    #   The maintenance options for the instance.
    #   @return [Types::LaunchTemplateInstanceMaintenanceOptionsRequest]
    #
    # @!attribute [rw] disable_api_stop
    #   Indicates whether to enable the instance for stop protection. For
    #   more information, see [Enable stop protection for your EC2
    #   instances][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html
    #   @return [Boolean]
    #
    # @!attribute [rw] operator
    #   The entity that manages the launch template.
    #   @return [Types::OperatorRequest]
    #
    # @!attribute [rw] network_performance_options
    #   Contains launch template settings to boost network performance for
    #   the type of workload that runs on your instance.
    #   @return [Types::LaunchTemplateNetworkPerformanceOptionsRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestLaunchTemplateData AWS API Documentation
    #
    class RequestLaunchTemplateData < Struct.new(
      :kernel_id,
      :ebs_optimized,
      :iam_instance_profile,
      :block_device_mappings,
      :network_interfaces,
      :image_id,
      :instance_type,
      :key_name,
      :monitoring,
      :placement,
      :ram_disk_id,
      :disable_api_termination,
      :instance_initiated_shutdown_behavior,
      :user_data,
      :tag_specifications,
      :elastic_gpu_specifications,
      :elastic_inference_accelerators,
      :security_group_ids,
      :security_groups,
      :instance_market_options,
      :credit_specification,
      :cpu_options,
      :capacity_reservation_specification,
      :license_specifications,
      :hibernation_options,
      :metadata_options,
      :enclave_options,
      :instance_requirements,
      :private_dns_name_options,
      :maintenance_options,
      :disable_api_stop,
      :operator,
      :network_performance_options)
      SENSITIVE = [:user_data]
      include Aws::Structure
    end

    # Contains the parameters for RequestSpotFleet.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_fleet_request_config
    #   The configuration for the Spot Fleet request.
    #   @return [Types::SpotFleetRequestConfigData]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleetRequest AWS API Documentation
    #
    class RequestSpotFleetRequest < Struct.new(
      :dry_run,
      :spot_fleet_request_config)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of RequestSpotFleet.
    #
    # @!attribute [rw] spot_fleet_request_id
    #   The ID of the Spot Fleet request.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotFleetResponse AWS API Documentation
    #
    class RequestSpotFleetResponse < Struct.new(
      :spot_fleet_request_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for RequestSpotInstances.
    #
    # @!attribute [rw] launch_specification
    #   The launch specification.
    #   @return [Types::RequestSpotLaunchSpecification]
    #
    # @!attribute [rw] tag_specifications
    #   The key-value pair for tagging the Spot Instance request on
    #   creation. The value for `ResourceType` must be
    #   `spot-instances-request`, otherwise the Spot Instance request fails.
    #   To tag the Spot Instance request after it has been created, see
    #   [CreateTags][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] instance_interruption_behavior
    #   The behavior when a Spot Instance is interrupted. The default is
    #   `terminate`.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] spot_price
    #   The maximum price per unit hour that you are 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.
    #
    #   If you specify a maximum price, your instances will be interrupted
    #   more frequently than if you do not specify this parameter.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [Ensuring
    #   idempotency in Amazon EC2 API requests][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The maximum number of Spot Instances to launch.
    #
    #   Default: 1
    #   @return [Integer]
    #
    # @!attribute [rw] type
    #   The Spot Instance request type.
    #
    #   Default: `one-time`
    #   @return [String]
    #
    # @!attribute [rw] valid_from
    #   The start date of the request. If this is a one-time request, the
    #   request becomes active at this date and time and remains active
    #   until all instances launch, the request expires, or the request is
    #   canceled. If the request is persistent, the request becomes active
    #   at this date and time and remains active until it expires or is
    #   canceled.
    #
    #   The specified start date and time cannot be equal to the current
    #   date and time. You must specify a start date and time that occurs
    #   after the current date and time.
    #   @return [Time]
    #
    # @!attribute [rw] valid_until
    #   The end date of the request, in UTC format
    #   (*YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #
    #   * For a persistent request, the request remains active until the
    #     `ValidUntil` date and time is reached. Otherwise, the request
    #     remains active until you cancel it.
    #
    #   * For a one-time request, the request remains active until all
    #     instances launch, the request is canceled, or the `ValidUntil`
    #     date and time is reached. By default, the request is valid for 7
    #     days from the date the request was created.
    #   @return [Time]
    #
    # @!attribute [rw] launch_group
    #   The instance launch group. Launch groups are Spot Instances that
    #   launch together and terminate together.
    #
    #   Default: Instances are launched and terminated individually
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_group
    #   The user-specified name for a logical grouping of requests.
    #
    #   When you specify an Availability Zone group in a Spot Instance
    #   request, all Spot Instances in the request are launched in the same
    #   Availability Zone. Instance proximity is maintained with this
    #   parameter, but the choice of Availability Zone is not. The group
    #   applies only to requests for Spot Instances of the same instance
    #   type. Any additional Spot Instance requests that are specified with
    #   the same Availability Zone group name are launched in that same
    #   Availability Zone, as long as at least one instance from the group
    #   is still active.
    #
    #   If there is no active instance running in the Availability Zone
    #   group that you specify for a new Spot Instance request (all
    #   instances are terminated, the request is expired, or the maximum
    #   price you specified falls below current Spot price), then Amazon EC2
    #   launches the instance in any Availability Zone where the constraint
    #   can be met. Consequently, the subsequent set of Spot Instances could
    #   be placed in a different zone from the original request, even if you
    #   specified the same Availability Zone group.
    #
    #   Default: Instances are launched in any available Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] block_duration_minutes
    #   Deprecated.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstancesRequest AWS API Documentation
    #
    class RequestSpotInstancesRequest < Struct.new(
      :launch_specification,
      :tag_specifications,
      :instance_interruption_behavior,
      :dry_run,
      :spot_price,
      :client_token,
      :instance_count,
      :type,
      :valid_from,
      :valid_until,
      :launch_group,
      :availability_zone_group,
      :block_duration_minutes)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the output of RequestSpotInstances.
    #
    # @!attribute [rw] spot_instance_requests
    #   The Spot Instance requests.
    #   @return [Array<Types::SpotInstanceRequest>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotInstancesResult AWS API Documentation
    #
    class RequestSpotInstancesResult < Struct.new(
      :spot_instance_requests)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the launch specification for an instance.
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of the security groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] security_groups
    #   Not supported.
    #   @return [Array<String>]
    #
    # @!attribute [rw] addressing_type
    #   Deprecated.
    #   @return [String]
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mapping entries. You can't specify both a snapshot
    #   ID and an encryption value. This is because only blank volumes can
    #   be encrypted on creation. If a snapshot is the basis for a volume,
    #   it is not blank and its encryption status is used for the volume
    #   encryption status.
    #   @return [Array<Types::BlockDeviceMapping>]
    #
    # @!attribute [rw] ebs_optimized
    #   Indicates whether the instance is 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.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] iam_instance_profile
    #   The IAM instance profile.
    #   @return [Types::IamInstanceProfileSpecification]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type. Only one instance type can be specified.
    #   @return [String]
    #
    # @!attribute [rw] kernel_id
    #   The ID of the kernel.
    #   @return [String]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] monitoring
    #   Indicates whether basic or detailed monitoring is enabled for the
    #   instance.
    #
    #   Default: Disabled
    #   @return [Types::RunInstancesMonitoringEnabled]
    #
    # @!attribute [rw] network_interfaces
    #   The network interfaces. If you specify a network interface, you must
    #   specify subnet IDs and security group IDs using the network
    #   interface.
    #   @return [Array<Types::InstanceNetworkInterfaceSpecification>]
    #
    # @!attribute [rw] placement
    #   The placement information for the instance.
    #   @return [Types::SpotPlacement]
    #
    # @!attribute [rw] ramdisk_id
    #   The ID of the RAM disk.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which to launch the instance.
    #   @return [String]
    #
    # @!attribute [rw] user_data
    #   The base64-encoded user data that instances use when starting up.
    #   User data is limited to 16 KB.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RequestSpotLaunchSpecification AWS API Documentation
    #
    class RequestSpotLaunchSpecification < Struct.new(
      :security_group_ids,
      :security_groups,
      :addressing_type,
      :block_device_mappings,
      :ebs_optimized,
      :iam_instance_profile,
      :image_id,
      :instance_type,
      :kernel_id,
      :key_name,
      :monitoring,
      :network_interfaces,
      :placement,
      :ramdisk_id,
      :subnet_id,
      :user_data)
      SENSITIVE = [:user_data]
      include Aws::Structure
    end

    # Describes a launch request for one or more instances, and includes
    # owner, requester, and security group information that applies to all
    # instances in the launch request.
    #
    # @!attribute [rw] reservation_id
    #   The ID of the reservation.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the reservation.
    #   @return [String]
    #
    # @!attribute [rw] requester_id
    #   The ID of the requester that launched the instances on your behalf
    #   (for example, Amazon Web Services Management Console or Auto
    #   Scaling).
    #   @return [String]
    #
    # @!attribute [rw] groups
    #   Not supported.
    #   @return [Array<Types::GroupIdentifier>]
    #
    # @!attribute [rw] instances
    #   The instances.
    #   @return [Array<Types::Instance>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Reservation AWS API Documentation
    #
    class Reservation < Struct.new(
      :reservation_id,
      :owner_id,
      :requester_id,
      :groups,
      :instances)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about an instance type to use in a Capacity Reservation
    # Fleet.
    #
    # @!attribute [rw] instance_type
    #   The instance type for which the Capacity Reservation Fleet reserves
    #   capacity.
    #   @return [String]
    #
    # @!attribute [rw] instance_platform
    #   The type of operating system for which the Capacity Reservation
    #   Fleet reserves capacity.
    #   @return [String]
    #
    # @!attribute [rw] weight
    #   The number of capacity units provided by the specified instance
    #   type. This value, together with the total target capacity that you
    #   specify for the Fleet determine the number of instances for which
    #   the Fleet reserves capacity. Both values are based on units that
    #   make sense for your workload. For more information, see [Total
    #   target capacity][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity
    #   @return [Float]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which the Capacity Reservation Fleet
    #   reserves the capacity. A Capacity Reservation Fleet can't span
    #   Availability Zones. All instance type specifications that you
    #   specify for the Fleet must use the same Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone in which the Capacity Reservation
    #   Fleet reserves the capacity. A Capacity Reservation Fleet can't
    #   span Availability Zones. All instance type specifications that you
    #   specify for the Fleet must use the same Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] ebs_optimized
    #   Indicates whether the Capacity Reservation Fleet supports
    #   EBS-optimized instances types. This optimization provides dedicated
    #   throughput to Amazon EBS and an optimized configuration stack to
    #   provide optimal I/O performance. This optimization isn't available
    #   with all instance types. Additional usage charges apply when using
    #   EBS-optimized instance types.
    #   @return [Boolean]
    #
    # @!attribute [rw] priority
    #   The priority to assign to the instance type. This value is used to
    #   determine which of the instance types specified for the Fleet should
    #   be prioritized for use. A lower value indicates a high priority. For
    #   more information, see [Instance type priority][1] in the *Amazon EC2
    #   User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservationFleetInstanceSpecification AWS API Documentation
    #
    class ReservationFleetInstanceSpecification < Struct.new(
      :instance_type,
      :instance_platform,
      :weight,
      :availability_zone,
      :availability_zone_id,
      :ebs_optimized,
      :priority)
      SENSITIVE = []
      include Aws::Structure
    end

    # The cost associated with the Reserved Instance.
    #
    # @!attribute [rw] hourly_price
    #   The hourly rate of the reservation.
    #   @return [String]
    #
    # @!attribute [rw] remaining_total_value
    #   The balance of the total value (the sum of remainingUpfrontValue +
    #   hourlyPrice * number of hours remaining).
    #   @return [String]
    #
    # @!attribute [rw] remaining_upfront_value
    #   The remaining upfront cost of the reservation.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservationValue AWS API Documentation
    #
    class ReservationValue < Struct.new(
      :hourly_price,
      :remaining_total_value,
      :remaining_upfront_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the limit price of a Reserved Instance offering.
    #
    # @!attribute [rw] amount
    #   Used for Reserved Instance Marketplace offerings. Specifies the
    #   limit price on the total order (instanceCount * price).
    #   @return [Float]
    #
    # @!attribute [rw] currency_code
    #   The currency in which the `limitPrice` amount is specified. At this
    #   time, the only supported currency is `USD`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstanceLimitPrice AWS API Documentation
    #
    class ReservedInstanceLimitPrice < Struct.new(
      :amount,
      :currency_code)
      SENSITIVE = []
      include Aws::Structure
    end

    # The total value of the Convertible Reserved Instance.
    #
    # @!attribute [rw] reservation_value
    #   The total value of the Convertible Reserved Instance that you are
    #   exchanging.
    #   @return [Types::ReservationValue]
    #
    # @!attribute [rw] reserved_instance_id
    #   The ID of the Convertible Reserved Instance that you are exchanging.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstanceReservationValue AWS API Documentation
    #
    class ReservedInstanceReservationValue < Struct.new(
      :reservation_value,
      :reserved_instance_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Reserved Instance.
    #
    # @!attribute [rw] currency_code
    #   The currency of the Reserved Instance. It's specified using ISO
    #   4217 standard currency codes. At this time, the only supported
    #   currency is `USD`.
    #   @return [String]
    #
    # @!attribute [rw] instance_tenancy
    #   The tenancy of the instance.
    #   @return [String]
    #
    # @!attribute [rw] offering_class
    #   The offering class of the Reserved Instance.
    #   @return [String]
    #
    # @!attribute [rw] offering_type
    #   The Reserved Instance offering type.
    #   @return [String]
    #
    # @!attribute [rw] recurring_charges
    #   The recurring charge tag assigned to the resource.
    #   @return [Array<Types::RecurringCharge>]
    #
    # @!attribute [rw] scope
    #   The scope of the Reserved Instance.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the resource.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] reserved_instances_id
    #   The ID of the Reserved Instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type on which the Reserved Instance can be used.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which the Reserved Instance can be used.
    #   @return [String]
    #
    # @!attribute [rw] start
    #   The date and time the Reserved Instance started.
    #   @return [Time]
    #
    # @!attribute [rw] end
    #   The time when the Reserved Instance expires.
    #   @return [Time]
    #
    # @!attribute [rw] duration
    #   The duration of the Reserved Instance, in seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] usage_price
    #   The usage price of the Reserved Instance, per hour.
    #   @return [Float]
    #
    # @!attribute [rw] fixed_price
    #   The purchase price of the Reserved Instance.
    #   @return [Float]
    #
    # @!attribute [rw] instance_count
    #   The number of reservations purchased.
    #   @return [Integer]
    #
    # @!attribute [rw] product_description
    #   The Reserved Instance product platform description.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the Reserved Instance purchase.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstances AWS API Documentation
    #
    class ReservedInstances < Struct.new(
      :currency_code,
      :instance_tenancy,
      :offering_class,
      :offering_type,
      :recurring_charges,
      :scope,
      :tags,
      :availability_zone_id,
      :reserved_instances_id,
      :instance_type,
      :availability_zone,
      :start,
      :end,
      :duration,
      :usage_price,
      :fixed_price,
      :instance_count,
      :product_description,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration settings for the modified Reserved
    # Instances.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone for the modified Reserved Instances.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of modified Reserved Instances.
    #
    #   <note markdown="1"> This is a required field for a request.
    #
    #    </note>
    #   @return [Integer]
    #
    # @!attribute [rw] instance_type
    #   The instance type for the modified Reserved Instances.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The network platform of the modified Reserved Instances.
    #   @return [String]
    #
    # @!attribute [rw] scope
    #   Whether the Reserved Instance is applied to instances in a Region or
    #   instances in a specific Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesConfiguration AWS API Documentation
    #
    class ReservedInstancesConfiguration < Struct.new(
      :availability_zone,
      :instance_count,
      :instance_type,
      :platform,
      :scope,
      :availability_zone_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the ID of a Reserved Instance.
    #
    # @!attribute [rw] reserved_instances_id
    #   The ID of the Reserved Instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesId AWS API Documentation
    #
    class ReservedInstancesId < Struct.new(
      :reserved_instances_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Reserved Instance listing.
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive key supplied by the client to ensure that
    #   the request is idempotent. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] create_date
    #   The time the listing was created.
    #   @return [Time]
    #
    # @!attribute [rw] instance_counts
    #   The number of instances in this state.
    #   @return [Array<Types::InstanceCount>]
    #
    # @!attribute [rw] price_schedules
    #   The price of the Reserved Instance listing.
    #   @return [Array<Types::PriceSchedule>]
    #
    # @!attribute [rw] reserved_instances_id
    #   The ID of the Reserved Instance.
    #   @return [String]
    #
    # @!attribute [rw] reserved_instances_listing_id
    #   The ID of the Reserved Instance listing.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status of the Reserved Instance listing.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The reason for the current status of the Reserved Instance listing.
    #   The response can be blank.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the resource.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] update_date
    #   The last modified timestamp of the listing.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesListing AWS API Documentation
    #
    class ReservedInstancesListing < Struct.new(
      :client_token,
      :create_date,
      :instance_counts,
      :price_schedules,
      :reserved_instances_id,
      :reserved_instances_listing_id,
      :status,
      :status_message,
      :tags,
      :update_date)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Reserved Instance modification.
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive key supplied by the client to ensure that
    #   the request is idempotent. For more information, see [Ensuring
    #   Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] create_date
    #   The time when the modification request was created.
    #   @return [Time]
    #
    # @!attribute [rw] effective_date
    #   The time for the modification to become effective.
    #   @return [Time]
    #
    # @!attribute [rw] modification_results
    #   Contains target configurations along with their corresponding new
    #   Reserved Instance IDs.
    #   @return [Array<Types::ReservedInstancesModificationResult>]
    #
    # @!attribute [rw] reserved_instances_ids
    #   The IDs of one or more Reserved Instances.
    #   @return [Array<Types::ReservedInstancesId>]
    #
    # @!attribute [rw] reserved_instances_modification_id
    #   A unique ID for the Reserved Instance modification.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status of the Reserved Instances modification request.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The reason for the status.
    #   @return [String]
    #
    # @!attribute [rw] update_date
    #   The time when the modification request was last updated.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesModification AWS API Documentation
    #
    class ReservedInstancesModification < Struct.new(
      :client_token,
      :create_date,
      :effective_date,
      :modification_results,
      :reserved_instances_ids,
      :reserved_instances_modification_id,
      :status,
      :status_message,
      :update_date)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the modification request/s.
    #
    # @!attribute [rw] reserved_instances_id
    #   The ID for the Reserved Instances that were created as part of the
    #   modification request. This field is only available when the
    #   modification is fulfilled.
    #   @return [String]
    #
    # @!attribute [rw] target_configuration
    #   The target Reserved Instances configurations supplied as part of the
    #   modification request.
    #   @return [Types::ReservedInstancesConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesModificationResult AWS API Documentation
    #
    class ReservedInstancesModificationResult < Struct.new(
      :reserved_instances_id,
      :target_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Reserved Instance offering.
    #
    # @!attribute [rw] currency_code
    #   The currency of the Reserved Instance offering you are purchasing.
    #   It's specified using ISO 4217 standard currency codes. At this
    #   time, the only supported currency is `USD`.
    #   @return [String]
    #
    # @!attribute [rw] instance_tenancy
    #   The tenancy of the instance.
    #   @return [String]
    #
    # @!attribute [rw] marketplace
    #   Indicates whether the offering is available through the Reserved
    #   Instance Marketplace (resale) or Amazon Web Services. If it's a
    #   Reserved Instance Marketplace offering, this is `true`.
    #   @return [Boolean]
    #
    # @!attribute [rw] offering_class
    #   If `convertible` it can be exchanged for Reserved Instances of the
    #   same or higher monetary value, with different configurations. If
    #   `standard`, it is not possible to perform an exchange.
    #   @return [String]
    #
    # @!attribute [rw] offering_type
    #   The Reserved Instance offering type.
    #   @return [String]
    #
    # @!attribute [rw] pricing_details
    #   The pricing details of the Reserved Instance offering.
    #   @return [Array<Types::PricingDetail>]
    #
    # @!attribute [rw] recurring_charges
    #   The recurring charge tag assigned to the resource.
    #   @return [Array<Types::RecurringCharge>]
    #
    # @!attribute [rw] scope
    #   Whether the Reserved Instance is applied to instances in a Region or
    #   an Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] reserved_instances_offering_id
    #   The ID of the Reserved Instance offering. This is the offering ID
    #   used in GetReservedInstancesExchangeQuote to confirm that an
    #   exchange can be made.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type on which the Reserved Instance can be used.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone in which the Reserved Instance can be used.
    #   @return [String]
    #
    # @!attribute [rw] duration
    #   The duration of the Reserved Instance, in seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] usage_price
    #   The usage price of the Reserved Instance, per hour.
    #   @return [Float]
    #
    # @!attribute [rw] fixed_price
    #   The purchase price of the Reserved Instance.
    #   @return [Float]
    #
    # @!attribute [rw] product_description
    #   The Reserved Instance product platform description.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ReservedInstancesOffering AWS API Documentation
    #
    class ReservedInstancesOffering < Struct.new(
      :currency_code,
      :instance_tenancy,
      :marketplace,
      :offering_class,
      :offering_type,
      :pricing_details,
      :recurring_charges,
      :scope,
      :availability_zone_id,
      :reserved_instances_offering_id,
      :instance_type,
      :availability_zone,
      :duration,
      :usage_price,
      :fixed_price,
      :product_description)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] allocation_id
    #   \[EC2-VPC\] The allocation ID.
    #   @return [String]
    #
    # @!attribute [rw] attribute
    #   The attribute of the IP address.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetAddressAttributeRequest AWS API Documentation
    #
    class ResetAddressAttributeRequest < Struct.new(
      :allocation_id,
      :attribute,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] address
    #   Information about the IP address.
    #   @return [Types::AddressAttribute]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetAddressAttributeResult AWS API Documentation
    #
    class ResetAddressAttributeResult < Struct.new(
      :address)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetEbsDefaultKmsKeyIdRequest AWS API Documentation
    #
    class ResetEbsDefaultKmsKeyIdRequest < Struct.new(
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] kms_key_id
    #   The Amazon Resource Name (ARN) of the default KMS key for EBS
    #   encryption by default.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetEbsDefaultKmsKeyIdResult AWS API Documentation
    #
    class ResetEbsDefaultKmsKeyIdResult < Struct.new(
      :kms_key_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] fpga_image_id
    #   The ID of the AFI.
    #   @return [String]
    #
    # @!attribute [rw] attribute
    #   The attribute.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetFpgaImageAttributeRequest AWS API Documentation
    #
    class ResetFpgaImageAttributeRequest < Struct.new(
      :dry_run,
      :fpga_image_id,
      :attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Is `true` if the request succeeds, and an error otherwise.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetFpgaImageAttributeResult AWS API Documentation
    #
    class ResetFpgaImageAttributeResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for ResetImageAttribute.
    #
    # @!attribute [rw] attribute
    #   The attribute to reset (currently you can only reset the launch
    #   permission attribute).
    #   @return [String]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetImageAttributeRequest AWS API Documentation
    #
    class ResetImageAttributeRequest < Struct.new(
      :attribute,
      :image_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] attribute
    #   The attribute to reset.
    #
    #   You can only reset the following attributes: `kernel` \| `ramdisk`
    #   \| `sourceDestCheck`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetInstanceAttributeRequest AWS API Documentation
    #
    class ResetInstanceAttributeRequest < Struct.new(
      :dry_run,
      :instance_id,
      :attribute)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for ResetNetworkInterfaceAttribute.
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] source_dest_check
    #   The source/destination checking attribute. Resets the value to
    #   `true`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetNetworkInterfaceAttributeRequest AWS API Documentation
    #
    class ResetNetworkInterfaceAttributeRequest < Struct.new(
      :dry_run,
      :network_interface_id,
      :source_dest_check)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] attribute
    #   The attribute to reset. Currently, only the attribute for permission
    #   to create volumes can be reset.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResetSnapshotAttributeRequest AWS API Documentation
    #
    class ResetSnapshotAttributeRequest < Struct.new(
      :attribute,
      :snapshot_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a resource statement.
    #
    # @!attribute [rw] resources
    #   The resources.
    #   @return [Array<String>]
    #
    # @!attribute [rw] resource_types
    #   The resource types.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResourceStatement AWS API Documentation
    #
    class ResourceStatement < Struct.new(
      :resources,
      :resource_types)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a resource statement.
    #
    # @!attribute [rw] resources
    #   The resources.
    #   @return [Array<String>]
    #
    # @!attribute [rw] resource_types
    #   The resource types.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResourceStatementRequest AWS API Documentation
    #
    class ResourceStatementRequest < Struct.new(
      :resources,
      :resource_types)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options that affect the scope of the response.
    #
    # @!attribute [rw] option_name
    #   The name of the option.
    #
    #   * For `ec2:Instance`:
    #
    #     Specify `state-name` - The current state of the EC2 instance.
    #
    #   * For `ec2:LaunchTemplate`:
    #
    #     Specify `version-depth` - The number of launch template versions
    #     to check, starting from the most recent version.
    #   @return [String]
    #
    # @!attribute [rw] option_values
    #   A value for the specified option.
    #
    #   * For `state-name`:
    #
    #     * Valid values: `pending` \| `running` \| `shutting-down` \|
    #       `terminated` \| `stopping` \| `stopped`
    #
    #     * Default: All states
    #   * For `version-depth`:
    #
    #     * Valid values: Integers between `1` and `10000`
    #
    #     * Default: `10`
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResourceTypeOption AWS API Documentation
    #
    class ResourceTypeOption < Struct.new(
      :option_name,
      :option_values)
      SENSITIVE = []
      include Aws::Structure
    end

    # A resource type to check for image references. Associated options can
    # also be specified if the resource type is an EC2 instance or launch
    # template.
    #
    # @!attribute [rw] resource_type
    #   The resource type.
    #   @return [String]
    #
    # @!attribute [rw] resource_type_options
    #   The options that affect the scope of the response. Valid only when
    #   `ResourceType` is `ec2:Instance` or `ec2:LaunchTemplate`.
    #   @return [Array<Types::ResourceTypeOption>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResourceTypeRequest AWS API Documentation
    #
    class ResourceTypeRequest < Struct.new(
      :resource_type,
      :resource_type_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the error that's returned when you cannot delete a launch
    # template version.
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The error message, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResponseError AWS API Documentation
    #
    class ResponseError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The information for a launch template.
    #
    # @!attribute [rw] kernel_id
    #   The ID of the kernel, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] ebs_optimized
    #   Indicates whether the instance is optimized for Amazon EBS I/O.
    #   @return [Boolean]
    #
    # @!attribute [rw] iam_instance_profile
    #   The IAM instance profile.
    #   @return [Types::LaunchTemplateIamInstanceProfileSpecification]
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mappings.
    #   @return [Array<Types::LaunchTemplateBlockDeviceMapping>]
    #
    # @!attribute [rw] network_interfaces
    #   The network interfaces.
    #   @return [Array<Types::LaunchTemplateInstanceNetworkInterfaceSpecification>]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI or a Systems Manager parameter. The Systems
    #   Manager parameter will resolve to the ID of the AMI at instance
    #   launch.
    #
    #   The value depends on what you specified in the request. The possible
    #   values are:
    #
    #   * If an AMI ID was specified in the request, then this is the AMI
    #     ID.
    #
    #   * If a Systems Manager parameter was specified in the request, and
    #     `ResolveAlias` was configured as `true`, then this is the AMI ID
    #     that the parameter is mapped to in the Parameter Store.
    #
    #   * If a Systems Manager parameter was specified in the request, and
    #     `ResolveAlias` was configured as `false`, then this is the
    #     parameter value.
    #
    #   For more information, see [Use a Systems Manager parameter instead
    #   of an AMI ID][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] monitoring
    #   The monitoring for the instance.
    #   @return [Types::LaunchTemplatesMonitoring]
    #
    # @!attribute [rw] placement
    #   The placement of the instance.
    #   @return [Types::LaunchTemplatePlacement]
    #
    # @!attribute [rw] ram_disk_id
    #   The ID of the RAM disk, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] disable_api_termination
    #   If set to `true`, indicates that the instance cannot be terminated
    #   using the Amazon EC2 console, command line tool, or API.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_initiated_shutdown_behavior
    #   Indicates whether an instance stops or terminates when you initiate
    #   shutdown from the instance (using the operating system command for
    #   system shutdown).
    #   @return [String]
    #
    # @!attribute [rw] user_data
    #   The user data for the instance.
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags that are applied to the resources that are created during
    #   instance launch.
    #   @return [Array<Types::LaunchTemplateTagSpecification>]
    #
    # @!attribute [rw] elastic_gpu_specifications
    #   Deprecated.
    #
    #   <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #    </note>
    #   @return [Array<Types::ElasticGpuSpecificationResponse>]
    #
    # @!attribute [rw] elastic_inference_accelerators
    #   <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #    </note>
    #
    #   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.
    #
    #   You cannot specify accelerators from different generations in the
    #   same request.
    #   @return [Array<Types::LaunchTemplateElasticInferenceAcceleratorResponse>]
    #
    # @!attribute [rw] security_group_ids
    #   The security group IDs.
    #   @return [Array<String>]
    #
    # @!attribute [rw] security_groups
    #   The security group names.
    #   @return [Array<String>]
    #
    # @!attribute [rw] instance_market_options
    #   The market (purchasing) option for the instances.
    #   @return [Types::LaunchTemplateInstanceMarketOptions]
    #
    # @!attribute [rw] credit_specification
    #   The credit option for CPU usage of the instance.
    #   @return [Types::CreditSpecification]
    #
    # @!attribute [rw] cpu_options
    #   The CPU options for the instance. For more information, see [CPU
    #   options for Amazon EC2 instances][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html
    #   @return [Types::LaunchTemplateCpuOptions]
    #
    # @!attribute [rw] capacity_reservation_specification
    #   Information about the Capacity Reservation targeting option.
    #   @return [Types::LaunchTemplateCapacityReservationSpecificationResponse]
    #
    # @!attribute [rw] license_specifications
    #   The license configurations.
    #   @return [Array<Types::LaunchTemplateLicenseConfiguration>]
    #
    # @!attribute [rw] hibernation_options
    #   Indicates whether an instance is configured for hibernation. For
    #   more information, see [Hibernate your Amazon EC2 instance][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html
    #   @return [Types::LaunchTemplateHibernationOptions]
    #
    # @!attribute [rw] metadata_options
    #   The metadata options for the instance. For more information, see
    #   [Configure the Instance Metadata Service options][1] in the *Amazon
    #   EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html
    #   @return [Types::LaunchTemplateInstanceMetadataOptions]
    #
    # @!attribute [rw] enclave_options
    #   Indicates whether the instance is enabled for Amazon Web Services
    #   Nitro Enclaves.
    #   @return [Types::LaunchTemplateEnclaveOptions]
    #
    # @!attribute [rw] instance_requirements
    #   The attributes for the instance types. When you specify instance
    #   attributes, Amazon EC2 will identify instance types with these
    #   attributes.
    #
    #   If you specify `InstanceRequirements`, you can't specify
    #   `InstanceTypes`.
    #   @return [Types::InstanceRequirements]
    #
    # @!attribute [rw] private_dns_name_options
    #   The options for the instance hostname.
    #   @return [Types::LaunchTemplatePrivateDnsNameOptions]
    #
    # @!attribute [rw] maintenance_options
    #   The maintenance options for your instance.
    #   @return [Types::LaunchTemplateInstanceMaintenanceOptions]
    #
    # @!attribute [rw] disable_api_stop
    #   Indicates whether the instance is enabled for stop protection. For
    #   more information, see [Enable stop protection for your EC2
    #   instances][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html
    #   @return [Boolean]
    #
    # @!attribute [rw] operator
    #   The entity that manages the launch template.
    #   @return [Types::OperatorResponse]
    #
    # @!attribute [rw] network_performance_options
    #   Contains the launch template settings for network performance
    #   options for your instance.
    #   @return [Types::LaunchTemplateNetworkPerformanceOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ResponseLaunchTemplateData AWS API Documentation
    #
    class ResponseLaunchTemplateData < Struct.new(
      :kernel_id,
      :ebs_optimized,
      :iam_instance_profile,
      :block_device_mappings,
      :network_interfaces,
      :image_id,
      :instance_type,
      :key_name,
      :monitoring,
      :placement,
      :ram_disk_id,
      :disable_api_termination,
      :instance_initiated_shutdown_behavior,
      :user_data,
      :tag_specifications,
      :elastic_gpu_specifications,
      :elastic_inference_accelerators,
      :security_group_ids,
      :security_groups,
      :instance_market_options,
      :credit_specification,
      :cpu_options,
      :capacity_reservation_specification,
      :license_specifications,
      :hibernation_options,
      :metadata_options,
      :enclave_options,
      :instance_requirements,
      :private_dns_name_options,
      :maintenance_options,
      :disable_api_stop,
      :operator,
      :network_performance_options)
      SENSITIVE = [:user_data]
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] public_ip
    #   The Elastic IP address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassicRequest AWS API Documentation
    #
    class RestoreAddressToClassicRequest < Struct.new(
      :dry_run,
      :public_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] public_ip
    #   The Elastic IP address.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The move status for the IP address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreAddressToClassicResult AWS API Documentation
    #
    class RestoreAddressToClassicResult < Struct.new(
      :public_ip,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] image_id
    #   The ID of the AMI to restore.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreImageFromRecycleBinRequest AWS API Documentation
    #
    class RestoreImageFromRecycleBinRequest < Struct.new(
      :image_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreImageFromRecycleBinResult AWS API Documentation
    #
    class RestoreImageFromRecycleBinResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] previous_version
    #   The version to restore.
    #   @return [Integer]
    #
    # @!attribute [rw] current_version
    #   The current version number for the prefix list.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreManagedPrefixListVersionRequest AWS API Documentation
    #
    class RestoreManagedPrefixListVersionRequest < Struct.new(
      :dry_run,
      :prefix_list_id,
      :previous_version,
      :current_version)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] prefix_list
    #   Information about the prefix list.
    #   @return [Types::ManagedPrefixList]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreManagedPrefixListVersionResult AWS API Documentation
    #
    class RestoreManagedPrefixListVersionResult < Struct.new(
      :prefix_list)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot to restore.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreSnapshotFromRecycleBinRequest AWS API Documentation
    #
    class RestoreSnapshotFromRecycleBinRequest < Struct.new(
      :snapshot_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The ARN of the Outpost on which the snapshot is stored. For more
    #   information, see [Amazon EBS local snapshots on Outposts][1] in the
    #   *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description for the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the snapshot is encrypted.
    #   @return [Boolean]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the EBS
    #   snapshot.
    #   @return [String]
    #
    # @!attribute [rw] progress
    #   The progress of the snapshot, as a percentage.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The time stamp when the snapshot was initiated.
    #   @return [Time]
    #
    # @!attribute [rw] state
    #   The state of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume that was used to create the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   The size of the volume, in GiB.
    #   @return [Integer]
    #
    # @!attribute [rw] sse_type
    #   Reserved for future use.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreSnapshotFromRecycleBinResult AWS API Documentation
    #
    class RestoreSnapshotFromRecycleBinResult < Struct.new(
      :snapshot_id,
      :outpost_arn,
      :description,
      :encrypted,
      :owner_id,
      :progress,
      :start_time,
      :state,
      :volume_id,
      :volume_size,
      :sse_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot to restore.
    #   @return [String]
    #
    # @!attribute [rw] temporary_restore_days
    #   Specifies the number of days for which to temporarily restore an
    #   archived snapshot. Required for temporary restores only. The
    #   snapshot will be automatically re-archived after this period.
    #
    #   To temporarily restore an archived snapshot, specify the number of
    #   days and omit the **PermanentRestore** parameter or set it to
    #   `false`.
    #   @return [Integer]
    #
    # @!attribute [rw] permanent_restore
    #   Indicates whether to permanently restore an archived snapshot. To
    #   permanently restore an archived snapshot, specify `true` and omit
    #   the **RestoreSnapshotTierRequest$TemporaryRestoreDays** parameter.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreSnapshotTierRequest AWS API Documentation
    #
    class RestoreSnapshotTierRequest < Struct.new(
      :snapshot_id,
      :temporary_restore_days,
      :permanent_restore,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] restore_start_time
    #   The date and time when the snapshot restore process started.
    #   @return [Time]
    #
    # @!attribute [rw] restore_duration
    #   For temporary restores only. The number of days for which the
    #   archived snapshot is temporarily restored.
    #   @return [Integer]
    #
    # @!attribute [rw] is_permanent_restore
    #   Indicates whether the snapshot is permanently restored. `true`
    #   indicates a permanent restore. `false` indicates a temporary
    #   restore.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RestoreSnapshotTierResult AWS API Documentation
    #
    class RestoreSnapshotTierResult < Struct.new(
      :snapshot_id,
      :restore_start_time,
      :restore_duration,
      :is_permanent_restore)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint with which the authorization rule
    #   is associated.
    #   @return [String]
    #
    # @!attribute [rw] target_network_cidr
    #   The IPv4 address range, in CIDR notation, of the network for which
    #   access is being removed.
    #   @return [String]
    #
    # @!attribute [rw] access_group_id
    #   The ID of the Active Directory group for which to revoke access.
    #   @return [String]
    #
    # @!attribute [rw] revoke_all_groups
    #   Indicates whether access should be revoked for all groups for a
    #   single `TargetNetworkCidr` that earlier authorized ingress for all
    #   groups using `AuthorizeAllGroups`. This does not impact other
    #   authorization rules that allowed ingress to the same
    #   `TargetNetworkCidr` with a specific `AccessGroupId`.
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeClientVpnIngressRequest AWS API Documentation
    #
    class RevokeClientVpnIngressRequest < Struct.new(
      :client_vpn_endpoint_id,
      :target_network_cidr,
      :access_group_id,
      :revoke_all_groups,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] status
    #   The current state of the authorization rule.
    #   @return [Types::ClientVpnAuthorizationRuleStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeClientVpnIngressResult AWS API Documentation
    #
    class RevokeClientVpnIngressResult < Struct.new(
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] security_group_rule_ids
    #   The IDs of the security group rules.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] source_security_group_name
    #   Not supported. Use a set of IP permissions to specify a destination
    #   security group.
    #   @return [String]
    #
    # @!attribute [rw] source_security_group_owner_id
    #   Not supported. Use a set of IP permissions to specify a destination
    #   security group.
    #   @return [String]
    #
    # @!attribute [rw] ip_protocol
    #   Not supported. Use a set of IP permissions to specify the protocol
    #   name or number.
    #   @return [String]
    #
    # @!attribute [rw] from_port
    #   Not supported. Use a set of IP permissions to specify the port.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   Not supported. Use a set of IP permissions to specify the port.
    #   @return [Integer]
    #
    # @!attribute [rw] cidr_ip
    #   Not supported. Use a set of IP permissions to specify the CIDR.
    #   @return [String]
    #
    # @!attribute [rw] ip_permissions
    #   The sets of IP permissions. You can't specify a destination
    #   security group and a CIDR IP address range in the same set of
    #   permissions.
    #   @return [Array<Types::IpPermission>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgressRequest AWS API Documentation
    #
    class RevokeSecurityGroupEgressRequest < Struct.new(
      :security_group_rule_ids,
      :dry_run,
      :group_id,
      :source_security_group_name,
      :source_security_group_owner_id,
      :ip_protocol,
      :from_port,
      :to_port,
      :cidr_ip,
      :ip_permissions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @!attribute [rw] unknown_ip_permissions
    #   The outbound rules that were unknown to the service. In some cases,
    #   `unknownIpPermissionSet` might be in a different format from the
    #   request parameter.
    #   @return [Array<Types::IpPermission>]
    #
    # @!attribute [rw] revoked_security_group_rules
    #   Details about the revoked security group rules.
    #   @return [Array<Types::RevokedSecurityGroupRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupEgressResult AWS API Documentation
    #
    class RevokeSecurityGroupEgressResult < Struct.new(
      :return,
      :unknown_ip_permissions,
      :revoked_security_group_rules)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] cidr_ip
    #   The CIDR IP address range. You can't specify this parameter when
    #   specifying a source security group.
    #   @return [String]
    #
    # @!attribute [rw] from_port
    #   If the protocol is TCP or UDP, this is the start of the port range.
    #   If the protocol is ICMP, this is the ICMP type or -1 (all ICMP
    #   types).
    #   @return [Integer]
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   \[Default VPC\] The name 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.
    #   @return [String]
    #
    # @!attribute [rw] ip_permissions
    #   The sets of IP permissions. You can't specify a source security
    #   group and a CIDR IP address range in the same set of permissions.
    #   @return [Array<Types::IpPermission>]
    #
    # @!attribute [rw] ip_protocol
    #   The IP protocol name (`tcp`, `udp`, `icmp`) or number (see [Protocol
    #   Numbers][1]). Use `-1` to specify all.
    #
    #
    #
    #   [1]: http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
    #   @return [String]
    #
    # @!attribute [rw] source_security_group_name
    #   \[Default VPC\] The name of the source security group. You can't
    #   specify this parameter in combination with the following parameters:
    #   the CIDR IP address range, the start of the port range, the IP
    #   protocol, and the end of the port range. The source security group
    #   must be in the same VPC. To revoke a specific rule for an IP
    #   protocol and port range, use a set of IP permissions instead.
    #   @return [String]
    #
    # @!attribute [rw] source_security_group_owner_id
    #   Not supported.
    #   @return [String]
    #
    # @!attribute [rw] to_port
    #   If the protocol is TCP or UDP, this is the end of the port range. If
    #   the protocol is ICMP, this is the ICMP code or -1 (all ICMP codes).
    #   @return [Integer]
    #
    # @!attribute [rw] security_group_rule_ids
    #   The IDs of the security group rules.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngressRequest AWS API Documentation
    #
    class RevokeSecurityGroupIngressRequest < Struct.new(
      :cidr_ip,
      :from_port,
      :group_id,
      :group_name,
      :ip_permissions,
      :ip_protocol,
      :source_security_group_name,
      :source_security_group_owner_id,
      :to_port,
      :security_group_rule_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @!attribute [rw] unknown_ip_permissions
    #   The inbound rules that were unknown to the service. In some cases,
    #   `unknownIpPermissionSet` might be in a different format from the
    #   request parameter.
    #   @return [Array<Types::IpPermission>]
    #
    # @!attribute [rw] revoked_security_group_rules
    #   Details about the revoked security group rules.
    #   @return [Array<Types::RevokedSecurityGroupRule>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokeSecurityGroupIngressResult AWS API Documentation
    #
    class RevokeSecurityGroupIngressResult < Struct.new(
      :return,
      :unknown_ip_permissions,
      :revoked_security_group_rules)
      SENSITIVE = []
      include Aws::Structure
    end

    # A security group rule removed with [RevokeSecurityGroupEgress][1] or
    # [RevokeSecurityGroupIngress][2].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RevokeSecurityGroupEgress.html
    # [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RevokeSecurityGroupIngress.html
    #
    # @!attribute [rw] security_group_rule_id
    #   A security group rule ID.
    #   @return [String]
    #
    # @!attribute [rw] group_id
    #   A security group ID.
    #   @return [String]
    #
    # @!attribute [rw] is_egress
    #   Defines if a security group rule is an outbound rule.
    #   @return [Boolean]
    #
    # @!attribute [rw] ip_protocol
    #   The security group rule's protocol.
    #   @return [String]
    #
    # @!attribute [rw] from_port
    #   The 'from' port number of the security group rule.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   The 'to' port number of the security group rule.
    #   @return [Integer]
    #
    # @!attribute [rw] cidr_ipv_4
    #   The IPv4 CIDR of the traffic source.
    #   @return [String]
    #
    # @!attribute [rw] cidr_ipv_6
    #   The IPv6 CIDR of the traffic source.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of a prefix list that's the traffic source.
    #   @return [String]
    #
    # @!attribute [rw] referenced_group_id
    #   The ID of a referenced security group.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the revoked security group rule.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RevokedSecurityGroupRule AWS API Documentation
    #
    class RevokedSecurityGroupRule < Struct.new(
      :security_group_rule_id,
      :group_id,
      :is_egress,
      :ip_protocol,
      :from_port,
      :to_port,
      :cidr_ipv_4,
      :cidr_ipv_6,
      :prefix_list_id,
      :referenced_group_id,
      :description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route in a route table.
    #
    # @!attribute [rw] destination_cidr_block
    #   The IPv4 CIDR block used for the destination match.
    #   @return [String]
    #
    # @!attribute [rw] destination_ipv_6_cidr_block
    #   The IPv6 CIDR block used for the destination match.
    #   @return [String]
    #
    # @!attribute [rw] destination_prefix_list_id
    #   The prefix of the Amazon Web Services service.
    #   @return [String]
    #
    # @!attribute [rw] egress_only_internet_gateway_id
    #   The ID of the egress-only internet gateway.
    #   @return [String]
    #
    # @!attribute [rw] gateway_id
    #   The ID of a gateway attached to your VPC.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of a NAT instance in your VPC.
    #   @return [String]
    #
    # @!attribute [rw] instance_owner_id
    #   The ID of Amazon Web Services account that owns the instance.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway_id
    #   The ID of a NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of a transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] local_gateway_id
    #   The ID of the local gateway.
    #   @return [String]
    #
    # @!attribute [rw] carrier_gateway_id
    #   The ID of the carrier gateway.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] origin
    #   Describes how the route was created.
    #
    #   * `CreateRouteTable` - The route was automatically created when the
    #     route table was created.
    #
    #   * `CreateRoute` - The route was manually added to the route table.
    #
    #   * `EnableVgwRoutePropagation` - The route was propagated by route
    #     propagation.
    #
    #   * `Advertisement` - The route was created dynamically by Amazon VPC
    #     Route Server.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the route. The `blackhole` state indicates that the
    #   route's target isn't available (for example, the specified gateway
    #   isn't attached to the VPC, or the specified NAT instance has been
    #   terminated).
    #   @return [String]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of a VPC peering connection.
    #   @return [String]
    #
    # @!attribute [rw] core_network_arn
    #   The Amazon Resource Name (ARN) of the core network.
    #   @return [String]
    #
    # @!attribute [rw] odb_network_arn
    #   The Amazon Resource Name (ARN) of the ODB network.
    #   @return [String]
    #
    # @!attribute [rw] ip_address
    #   The next hop IP address for routes propagated by VPC Route Server
    #   into VPC route tables.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Route AWS API Documentation
    #
    class Route < Struct.new(
      :destination_cidr_block,
      :destination_ipv_6_cidr_block,
      :destination_prefix_list_id,
      :egress_only_internet_gateway_id,
      :gateway_id,
      :instance_id,
      :instance_owner_id,
      :nat_gateway_id,
      :transit_gateway_id,
      :local_gateway_id,
      :carrier_gateway_id,
      :network_interface_id,
      :origin,
      :state,
      :vpc_peering_connection_id,
      :core_network_arn,
      :odb_network_arn,
      :ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route server and its configuration.
    #
    # Amazon VPC Route Server simplifies routing for traffic between
    # workloads that are deployed within a VPC and its internet gateways.
    # With this feature, VPC Route Server dynamically updates VPC and
    # internet gateway route tables with your preferred IPv4 or IPv6 routes
    # to achieve routing fault tolerance for those workloads. This enables
    # you to automatically reroute traffic within a VPC, which increases the
    # manageability of VPC routing and interoperability with third-party
    # workloads.
    #
    # Route server supports the follow route table types:
    #
    # * VPC route tables not associated with subnets
    #
    # * Subnet route tables
    #
    # * Internet gateway route tables
    #
    # Route server does not support route tables associated with virtual
    # private gateways. To propagate routes into a transit gateway route
    # table, use [Transit Gateway Connect][1].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html
    #
    # @!attribute [rw] route_server_id
    #   The unique identifier of the route server.
    #   @return [String]
    #
    # @!attribute [rw] amazon_side_asn
    #   The Border Gateway Protocol (BGP) Autonomous System Number (ASN) for
    #   the appliance. Valid values are from 1 to 4294967295. We recommend
    #   using a private ASN in the 64512–65534 (16-bit ASN) or
    #   4200000000–4294967294 (32-bit ASN) range.
    #   @return [Integer]
    #
    # @!attribute [rw] state
    #   The current state of the route server.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the route server.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] persist_routes_state
    #   The current state of route persistence for the route server.
    #   @return [String]
    #
    # @!attribute [rw] persist_routes_duration
    #   The number of minutes a route server will wait after BGP is
    #   re-established to unpersist the routes in the FIB and RIB. Value
    #   must be in the range of 1-5. The default value is 1. Only valid if
    #   `persistRoutesState` is 'enabled'.
    #
    #   If you set the duration to 1 minute, then when your network
    #   appliance re-establishes BGP with route server, it has 1 minute to
    #   relearn it's adjacent network and advertise those routes to route
    #   server before route server resumes normal functionality. In most
    #   cases, 1 minute is probably sufficient. If, however, you have
    #   concerns that your BGP network may not be capable of fully
    #   re-establishing and re-learning everything in 1 minute, you can
    #   increase the duration up to 5 minutes.
    #   @return [Integer]
    #
    # @!attribute [rw] sns_notifications_enabled
    #   Indicates whether SNS notifications are enabled for the route
    #   server. Enabling SNS notifications persists BGP status changes to an
    #   SNS topic provisioned by Amazon Web Services.
    #   @return [Boolean]
    #
    # @!attribute [rw] sns_topic_arn
    #   The ARN of the SNS topic where notifications are published.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServer AWS API Documentation
    #
    class RouteServer < Struct.new(
      :route_server_id,
      :amazon_side_asn,
      :state,
      :tags,
      :persist_routes_state,
      :persist_routes_duration,
      :sns_notifications_enabled,
      :sns_topic_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the association between a route server and a VPC.
    #
    # A route server association is the connection established between a
    # route server and a VPC.
    #
    # @!attribute [rw] route_server_id
    #   The ID of the associated route server.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the associated VPC.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerAssociation AWS API Documentation
    #
    class RouteServerAssociation < Struct.new(
      :route_server_id,
      :vpc_id,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # The current status of Bidirectional Forwarding Detection (BFD) for a
    # BGP session.
    #
    # @!attribute [rw] status
    #   The operational status of the BFD session.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerBfdStatus AWS API Documentation
    #
    class RouteServerBfdStatus < Struct.new(
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # The BGP configuration options for a route server peer.
    #
    # @!attribute [rw] peer_asn
    #   The Border Gateway Protocol (BGP) Autonomous System Number (ASN) for
    #   the appliance. Valid values are from 1 to 4294967295. We recommend
    #   using a private ASN in the 64512–65534 (16-bit ASN) or
    #   4200000000–4294967294 (32-bit ASN) range.
    #   @return [Integer]
    #
    # @!attribute [rw] peer_liveness_detection
    #   The liveness detection protocol used for the BGP peer.
    #
    #   The requested liveness detection protocol for the BGP peer.
    #
    #   * `bgp-keepalive`: The standard BGP keep alive mechanism
    #     ([RFC4271][1]) that is stable but may take longer to fail-over in
    #     cases of network impact or router failure.
    #
    #   * `bfd`: An additional Bidirectional Forwarding Detection (BFD)
    #     protocol ([RFC5880][2]) that enables fast failover by using more
    #     sensitive liveness detection.
    #
    #   Defaults to `bgp-keepalive`.
    #
    #
    #
    #   [1]: https://www.rfc-editor.org/rfc/rfc4271#page-21
    #   [2]: https://www.rfc-editor.org/rfc/rfc5880
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerBgpOptions AWS API Documentation
    #
    class RouteServerBgpOptions < Struct.new(
      :peer_asn,
      :peer_liveness_detection)
      SENSITIVE = []
      include Aws::Structure
    end

    # The BGP configuration options requested for a route server peer.
    #
    # @!attribute [rw] peer_asn
    #   The Border Gateway Protocol (BGP) Autonomous System Number (ASN) for
    #   the appliance. Valid values are from 1 to 4294967295. We recommend
    #   using a private ASN in the 64512–65534 (16-bit ASN) or
    #   4200000000–4294967294 (32-bit ASN) range.
    #   @return [Integer]
    #
    # @!attribute [rw] peer_liveness_detection
    #   The requested liveness detection protocol for the BGP peer.
    #
    #   * `bgp-keepalive`: The standard BGP keep alive mechanism
    #     ([RFC4271][1]) that is stable but may take longer to fail-over in
    #     cases of network impact or router failure.
    #
    #   * `bfd`: An additional Bidirectional Forwarding Detection (BFD)
    #     protocol ([RFC5880][2]) that enables fast failover by using more
    #     sensitive liveness detection.
    #
    #   Defaults to `bgp-keepalive`.
    #
    #
    #
    #   [1]: https://www.rfc-editor.org/rfc/rfc4271#page-21
    #   [2]: https://www.rfc-editor.org/rfc/rfc5880
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerBgpOptionsRequest AWS API Documentation
    #
    class RouteServerBgpOptionsRequest < Struct.new(
      :peer_asn,
      :peer_liveness_detection)
      SENSITIVE = []
      include Aws::Structure
    end

    # The current status of a BGP session.
    #
    # @!attribute [rw] status
    #   The operational status of the BGP session. The status enables you to
    #   monitor session liveness if you lack monitoring on your
    #   router/appliance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerBgpStatus AWS API Documentation
    #
    class RouteServerBgpStatus < Struct.new(
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route server endpoint and its properties.
    #
    # A route server endpoint is an Amazon Web Services-managed component
    # inside a subnet that facilitates [BGP (Border Gateway Protocol)][1]
    # connections between your route server and your BGP peers.
    #
    #
    #
    # [1]: https://en.wikipedia.org/wiki/Border_Gateway_Protocol
    #
    # @!attribute [rw] route_server_id
    #   The ID of the route server associated with this endpoint.
    #   @return [String]
    #
    # @!attribute [rw] route_server_endpoint_id
    #   The unique identifier of the route server endpoint.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC containing the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet to place the route server endpoint into.
    #   @return [String]
    #
    # @!attribute [rw] eni_id
    #   The ID of the Elastic network interface for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] eni_address
    #   The IP address of the Elastic network interface for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the route server endpoint.
    #   @return [String]
    #
    # @!attribute [rw] failure_reason
    #   The reason for any failure in endpoint creation or operation.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the route server endpoint.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerEndpoint AWS API Documentation
    #
    class RouteServerEndpoint < Struct.new(
      :route_server_id,
      :route_server_endpoint_id,
      :vpc_id,
      :subnet_id,
      :eni_id,
      :eni_address,
      :state,
      :failure_reason,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a BGP peer configuration for a route server endpoint.
    #
    # A route server peer is a session between a route server endpoint and
    # the device deployed in Amazon Web Services (such as a firewall
    # appliance or other network security function running on an EC2
    # instance). The device must meet these requirements:
    #
    # * Have an elastic network interface in the VPC
    #
    # * Support BGP (Border Gateway Protocol)
    #
    # * Can initiate BGP sessions
    #
    # @!attribute [rw] route_server_peer_id
    #   The unique identifier of the route server peer.
    #   @return [String]
    #
    # @!attribute [rw] route_server_endpoint_id
    #   The ID of the route server endpoint associated with this peer.
    #   @return [String]
    #
    # @!attribute [rw] route_server_id
    #   The ID of the route server associated with this peer.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC containing the route server peer.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet containing the route server peer.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the route server peer.
    #   @return [String]
    #
    # @!attribute [rw] failure_reason
    #   The reason for any failure in peer creation or operation.
    #   @return [String]
    #
    # @!attribute [rw] endpoint_eni_id
    #   The ID of the Elastic network interface for the route server
    #   endpoint.
    #   @return [String]
    #
    # @!attribute [rw] endpoint_eni_address
    #   The IP address of the Elastic network interface for the route server
    #   endpoint.
    #   @return [String]
    #
    # @!attribute [rw] peer_address
    #   The IPv4 address of the peer device.
    #   @return [String]
    #
    # @!attribute [rw] bgp_options
    #   The BGP configuration options for this peer, including ASN
    #   (Autonomous System Number) and BFD (Bidrectional Forwarding
    #   Detection) settings.
    #   @return [Types::RouteServerBgpOptions]
    #
    # @!attribute [rw] bgp_status
    #   The current status of the BGP session with this peer.
    #   @return [Types::RouteServerBgpStatus]
    #
    # @!attribute [rw] bfd_status
    #   The current status of the BFD session with this peer.
    #   @return [Types::RouteServerBfdStatus]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the route server peer.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerPeer AWS API Documentation
    #
    class RouteServerPeer < Struct.new(
      :route_server_peer_id,
      :route_server_endpoint_id,
      :route_server_id,
      :vpc_id,
      :subnet_id,
      :state,
      :failure_reason,
      :endpoint_eni_id,
      :endpoint_eni_address,
      :peer_address,
      :bgp_options,
      :bgp_status,
      :bfd_status,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the route propagation configuration between a route server
    # and a route table.
    #
    # When enabled, route server propagation installs the routes in the FIB
    # on the route table you've specified. Route server supports IPv4 and
    # IPv6 route propagation.
    #
    # @!attribute [rw] route_server_id
    #   The ID of the route server configured for route propagation.
    #   @return [String]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table configured for route server propagation.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of route propagation.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerPropagation AWS API Documentation
    #
    class RouteServerPropagation < Struct.new(
      :route_server_id,
      :route_table_id,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route in the route server's routing database.
    #
    # @!attribute [rw] route_server_endpoint_id
    #   The ID of the route server endpoint that received this route.
    #   @return [String]
    #
    # @!attribute [rw] route_server_peer_id
    #   The ID of the route server peer that advertised this route.
    #   @return [String]
    #
    # @!attribute [rw] route_installation_details
    #   Details about the installation status of this route in route tables.
    #   @return [Array<Types::RouteServerRouteInstallationDetail>]
    #
    # @!attribute [rw] route_status
    #   The current status of the route in the routing database. Values are
    #   `in-rib` or `in-fib` depending on if the routes are in the RIB or
    #   the FIB database.
    #
    #   The [Routing Information Base (RIB)][1] serves as a database that
    #   stores all the routing information and network topology data
    #   collected by a router or routing system, such as routes learned from
    #   BGP peers. The RIB is constantly updated as new routing information
    #   is received or existing routes change. This ensures that the route
    #   server always has the most current view of the network topology and
    #   can make optimal routing decisions.
    #
    #   The [Forwarding Information Base (FIB)][2] serves as a forwarding
    #   table for what route server has determined are the best-path routes
    #   in the RIB after evaluating all available routing information and
    #   policies. The FIB routes are installed on the route tables. The FIB
    #   is recomputed whenever there are changes to the RIB.
    #
    #
    #
    #   [1]: https://en.wikipedia.org/wiki/Routing_table
    #   [2]: https://en.wikipedia.org/wiki/Forwarding_information_base
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   The destination CIDR block of the route.
    #   @return [String]
    #
    # @!attribute [rw] as_paths
    #   The AS path attributes of the BGP route.
    #   @return [Array<String>]
    #
    # @!attribute [rw] med
    #   The Multi-Exit Discriminator (MED) value of the BGP route.
    #   @return [Integer]
    #
    # @!attribute [rw] next_hop_ip
    #   The IP address for the next hop.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerRoute AWS API Documentation
    #
    class RouteServerRoute < Struct.new(
      :route_server_endpoint_id,
      :route_server_peer_id,
      :route_installation_details,
      :route_status,
      :prefix,
      :as_paths,
      :med,
      :next_hop_ip)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the installation status of a route in a route table.
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table where the route is being installed.
    #   @return [String]
    #
    # @!attribute [rw] route_installation_status
    #   The current installation status of the route in the route table.
    #   @return [String]
    #
    # @!attribute [rw] route_installation_status_reason
    #   The reason for the current installation status of the route.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteServerRouteInstallationDetail AWS API Documentation
    #
    class RouteServerRouteInstallationDetail < Struct.new(
      :route_table_id,
      :route_installation_status,
      :route_installation_status_reason)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route table.
    #
    # @!attribute [rw] associations
    #   The associations between the route table and your subnets or
    #   gateways.
    #   @return [Array<Types::RouteTableAssociation>]
    #
    # @!attribute [rw] propagating_vgws
    #   Any virtual private gateway (VGW) propagating routes.
    #   @return [Array<Types::PropagatingVgw>]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @!attribute [rw] routes
    #   The routes in the route table.
    #   @return [Array<Types::Route>]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the route table.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the route table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteTable AWS API Documentation
    #
    class RouteTable < Struct.new(
      :associations,
      :propagating_vgws,
      :route_table_id,
      :routes,
      :tags,
      :vpc_id,
      :owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an association between a route table and a subnet or
    # gateway.
    #
    # @!attribute [rw] main
    #   Indicates whether this is the main route table.
    #   @return [Boolean]
    #
    # @!attribute [rw] route_table_association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] route_table_id
    #   The ID of the route table.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet. A subnet ID is not returned for an implicit
    #   association.
    #   @return [String]
    #
    # @!attribute [rw] gateway_id
    #   The ID of the internet gateway or virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] public_ipv_4_pool
    #   The ID of a public IPv4 pool. A public IPv4 pool is a pool of IPv4
    #   addresses that you've brought to Amazon Web Services with BYOIP.
    #   @return [String]
    #
    # @!attribute [rw] association_state
    #   The state of the association.
    #   @return [Types::RouteTableAssociationState]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteTableAssociation AWS API Documentation
    #
    class RouteTableAssociation < Struct.new(
      :main,
      :route_table_association_id,
      :route_table_id,
      :subnet_id,
      :gateway_id,
      :public_ipv_4_pool,
      :association_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of an association between a route table and a
    # subnet or gateway.
    #
    # @!attribute [rw] state
    #   The state of the association.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   The status message, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RouteTableAssociationState AWS API Documentation
    #
    class RouteTableAssociationState < Struct.new(
      :state,
      :status_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the rule options for a stateful rule group.
    #
    # @!attribute [rw] rule_group_arn
    #   The ARN of the rule group.
    #   @return [String]
    #
    # @!attribute [rw] rule_options
    #   The rule options.
    #   @return [Array<Types::RuleOption>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RuleGroupRuleOptionsPair AWS API Documentation
    #
    class RuleGroupRuleOptionsPair < Struct.new(
      :rule_group_arn,
      :rule_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the type of a stateful rule group.
    #
    # @!attribute [rw] rule_group_arn
    #   The ARN of the rule group.
    #   @return [String]
    #
    # @!attribute [rw] rule_group_type
    #   The rule group type. The possible values are `Domain List` and
    #   `Suricata`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RuleGroupTypePair AWS API Documentation
    #
    class RuleGroupTypePair < Struct.new(
      :rule_group_arn,
      :rule_group_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes additional settings for a stateful rule.
    #
    # @!attribute [rw] keyword
    #   The Suricata keyword.
    #   @return [String]
    #
    # @!attribute [rw] settings
    #   The settings for the keyword.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RuleOption AWS API Documentation
    #
    class RuleOption < Struct.new(
      :keyword,
      :settings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the monitoring of an instance.
    #
    # @!attribute [rw] enabled
    #   Indicates whether detailed monitoring is enabled. Otherwise, basic
    #   monitoring is enabled.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstancesMonitoringEnabled AWS API Documentation
    #
    class RunInstancesMonitoringEnabled < Struct.new(
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] block_device_mappings
    #   The block device mapping, which defines the EBS volumes and instance
    #   store volumes to attach to the instance at launch. For more
    #   information, see [Block device mappings][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html
    #   @return [Array<Types::BlockDeviceMapping>]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI. An AMI ID is required to launch an instance and
    #   must be specified here or in a launch template.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type. For more information, see [Amazon EC2 Instance
    #   Types Guide][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/instance-types.html
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_address_count
    #   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.
    #
    #   You cannot specify this option and the network interfaces option in
    #   the same request.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_addresses
    #   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.
    #
    #   You cannot specify this option and the network interfaces option in
    #   the same request.
    #   @return [Array<Types::InstanceIpv6Address>]
    #
    # @!attribute [rw] kernel_id
    #   The ID of the kernel.
    #
    #   We recommend that you use PV-GRUB instead of kernels and RAM disks.
    #   For more information, see [PV-GRUB][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html
    #   @return [String]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair. For more information, see [Create a key
    #   pair for your EC2 instance][1].
    #
    #   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.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-key-pairs.html
    #   @return [String]
    #
    # @!attribute [rw] max_count
    #   The maximum number of instances to launch. If you specify a value
    #   that is more capacity than Amazon EC2 can launch in the target
    #   Availability Zone, Amazon EC2 launches the largest possible number
    #   of instances above the specified minimum count.
    #
    #   Constraints: Between 1 and the quota for the specified instance type
    #   for your account for this Region. For more information, see [Amazon
    #   EC2 instance type quotas][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-quotas.html
    #   @return [Integer]
    #
    # @!attribute [rw] min_count
    #   The minimum number of instances to launch. If you specify a value
    #   that is more capacity than Amazon EC2 can provide in the target
    #   Availability Zone, Amazon EC2 does not launch any instances.
    #
    #   Constraints: Between 1 and the quota for the specified instance type
    #   for your account for this Region. For more information, see [Amazon
    #   EC2 instance type quotas][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/instancetypes/ec2-instance-quotas.html
    #   @return [Integer]
    #
    # @!attribute [rw] monitoring
    #   Specifies whether detailed monitoring is enabled for the instance.
    #   @return [Types::RunInstancesMonitoringEnabled]
    #
    # @!attribute [rw] placement
    #   The placement for the instance.
    #   @return [Types::Placement]
    #
    # @!attribute [rw] ramdisk_id
    #   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.
    #
    #   We recommend that you use PV-GRUB instead of kernels and RAM disks.
    #   For more information, see [PV-GRUB][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html
    #   @return [String]
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of the security groups.
    #
    #   If you specify a network interface, you must specify any security
    #   groups as part of the network interface instead of using this
    #   parameter.
    #   @return [Array<String>]
    #
    # @!attribute [rw] security_groups
    #   \[Default VPC\] The names of the security groups.
    #
    #   If you specify a network interface, you must specify any security
    #   groups as part of the network interface instead of using this
    #   parameter.
    #
    #   Default: Amazon EC2 uses the default security group.
    #   @return [Array<String>]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet to launch the instance into.
    #
    #   If you specify a network interface, you must specify any subnets as
    #   part of the network interface instead of using this parameter.
    #   @return [String]
    #
    # @!attribute [rw] user_data
    #   The user data to make available to the instance. User data must be
    #   base64-encoded. Depending on the tool or SDK that you're using, the
    #   base64-encoding might be performed for you. For more information,
    #   see [Run commands at launch using instance user data][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
    #   @return [String]
    #
    # @!attribute [rw] elastic_gpu_specification
    #   An elastic GPU to associate with the instance.
    #
    #   <note markdown="1"> Amazon Elastic Graphics reached end of life on January 8, 2024.
    #
    #    </note>
    #   @return [Array<Types::ElasticGpuSpecification>]
    #
    # @!attribute [rw] elastic_inference_accelerators
    #   An elastic inference accelerator to associate with the instance.
    #
    #   <note markdown="1"> Amazon Elastic Inference is no longer available.
    #
    #    </note>
    #   @return [Array<Types::ElasticInferenceAccelerator>]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply to the resources that are created during instance
    #   launch.
    #
    #   You can specify tags for the following resources only:
    #
    #   * Instances
    #
    #   * Volumes
    #
    #   * Spot Instance requests
    #
    #   * Network interfaces
    #
    #   To tag a resource after it has been created, see [CreateTags][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] launch_template
    #   The launch template. Any additional parameters that you specify for
    #   the new instance overwrite the corresponding parameters included in
    #   the launch template.
    #   @return [Types::LaunchTemplateSpecification]
    #
    # @!attribute [rw] instance_market_options
    #   The market (purchasing) option for the instances.
    #
    #   For RunInstances, persistent Spot Instance requests are only
    #   supported when **InstanceInterruptionBehavior** is set to either
    #   `hibernate` or `stop`.
    #   @return [Types::InstanceMarketOptionsRequest]
    #
    # @!attribute [rw] credit_specification
    #   The credit option for CPU usage of the burstable performance
    #   instance. Valid values are `standard` and `unlimited`. To change
    #   this attribute after launch, use [
    #   ModifyInstanceCreditSpecification][1]. For more information, see
    #   [Burstable performance instances][2] in the *Amazon EC2 User Guide*.
    #
    #   Default: `standard` (T2 instances) or `unlimited` (T3/T3a/T4g
    #   instances)
    #
    #   For T3 instances with `host` tenancy, only `standard` is supported.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html
    #   @return [Types::CreditSpecificationRequest]
    #
    # @!attribute [rw] cpu_options
    #   The CPU options for the instance. For more information, see
    #   [Optimize CPU options][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html
    #   @return [Types::CpuOptionsRequest]
    #
    # @!attribute [rw] capacity_reservation_specification
    #   Information about the Capacity Reservation targeting option. If you
    #   do not specify this parameter, the instance's Capacity Reservation
    #   preference defaults to `open`, which enables it to run in any open
    #   Capacity Reservation that has matching attributes (instance type,
    #   platform, Availability Zone, and tenancy).
    #   @return [Types::CapacityReservationSpecification]
    #
    # @!attribute [rw] hibernation_options
    #   Indicates whether an instance is enabled for hibernation. This
    #   parameter is valid only if the instance meets the [hibernation
    #   prerequisites][1]. For more information, see [Hibernate your Amazon
    #   EC2 instance][2] in the *Amazon EC2 User Guide*.
    #
    #   You can't enable hibernation and Amazon Web Services Nitro Enclaves
    #   on the same instance.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html
    #   @return [Types::HibernationOptionsRequest]
    #
    # @!attribute [rw] license_specifications
    #   The license configurations.
    #   @return [Array<Types::LicenseConfigurationRequest>]
    #
    # @!attribute [rw] metadata_options
    #   The metadata options for the instance. For more information, see
    #   [Configure the Instance Metadata Service options][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html
    #   @return [Types::InstanceMetadataOptionsRequest]
    #
    # @!attribute [rw] enclave_options
    #   Indicates whether the instance is enabled for Amazon Web Services
    #   Nitro Enclaves. For more information, see [Amazon Web Services Nitro
    #   Enclaves User Guide][1].
    #
    #   You can't enable Amazon Web Services Nitro Enclaves and hibernation
    #   on the same instance.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/enclaves/latest/user/
    #   @return [Types::EnclaveOptionsRequest]
    #
    # @!attribute [rw] private_dns_name_options
    #   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.
    #   @return [Types::PrivateDnsNameOptionsRequest]
    #
    # @!attribute [rw] maintenance_options
    #   The maintenance and recovery options for the instance.
    #   @return [Types::InstanceMaintenanceOptionsRequest]
    #
    # @!attribute [rw] disable_api_stop
    #   Indicates whether an instance is enabled for stop protection. For
    #   more information, see [Enable stop protection for your EC2
    #   instances][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-stop-protection.html
    #   @return [Boolean]
    #
    # @!attribute [rw] enable_primary_ipv_6
    #   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.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_performance_options
    #   Contains settings for the network performance options for the
    #   instance.
    #   @return [Types::InstanceNetworkPerformanceOptionsRequest]
    #
    # @!attribute [rw] operator
    #   Reserved for internal use.
    #   @return [Types::OperatorRequest]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] disable_api_termination
    #   Indicates whether termination protection is enabled for the
    #   instance. The default is `false`, which means that you can terminate
    #   the instance using the Amazon EC2 console, command line tools, or
    #   API. You can enable termination protection when you launch an
    #   instance, while the instance is running, or while the instance is
    #   stopped.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_initiated_shutdown_behavior
    #   Indicates whether an instance stops or terminates when you initiate
    #   shutdown from the instance (using the operating system command for
    #   system shutdown).
    #
    #   Default: `stop`
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The primary IPv4 address. You must specify a value from the IPv4
    #   address range of the subnet.
    #
    #   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.
    #
    #   You cannot specify this option and the network interfaces option in
    #   the same request.
    #   @return [String]
    #
    # @!attribute [rw] client_token
    #   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.
    #
    #   For more information, see [Ensuring idempotency in Amazon EC2 API
    #   requests][1].
    #
    #   Constraints: Maximum 64 ASCII characters
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] additional_info
    #   Reserved.
    #   @return [String]
    #
    # @!attribute [rw] network_interfaces
    #   The network interfaces to associate with the instance.
    #   @return [Array<Types::InstanceNetworkInterfaceSpecification>]
    #
    # @!attribute [rw] iam_instance_profile
    #   The name or Amazon Resource Name (ARN) of an IAM instance profile.
    #   @return [Types::IamInstanceProfileSpecification]
    #
    # @!attribute [rw] ebs_optimized
    #   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.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunInstancesRequest AWS API Documentation
    #
    class RunInstancesRequest < Struct.new(
      :block_device_mappings,
      :image_id,
      :instance_type,
      :ipv_6_address_count,
      :ipv_6_addresses,
      :kernel_id,
      :key_name,
      :max_count,
      :min_count,
      :monitoring,
      :placement,
      :ramdisk_id,
      :security_group_ids,
      :security_groups,
      :subnet_id,
      :user_data,
      :elastic_gpu_specification,
      :elastic_inference_accelerators,
      :tag_specifications,
      :launch_template,
      :instance_market_options,
      :credit_specification,
      :cpu_options,
      :capacity_reservation_specification,
      :hibernation_options,
      :license_specifications,
      :metadata_options,
      :enclave_options,
      :private_dns_name_options,
      :maintenance_options,
      :disable_api_stop,
      :enable_primary_ipv_6,
      :network_performance_options,
      :operator,
      :dry_run,
      :disable_api_termination,
      :instance_initiated_shutdown_behavior,
      :private_ip_address,
      :client_token,
      :additional_info,
      :network_interfaces,
      :iam_instance_profile,
      :ebs_optimized)
      SENSITIVE = [:user_data]
      include Aws::Structure
    end

    # Contains the parameters for RunScheduledInstances.
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that ensures the idempotency of
    #   the request. For more information, see [Ensuring Idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_count
    #   The number of instances.
    #
    #   Default: 1
    #   @return [Integer]
    #
    # @!attribute [rw] launch_specification
    #   The launch specification. You must match the instance type,
    #   Availability Zone, network, and platform of the schedule that you
    #   purchased.
    #   @return [Types::ScheduledInstancesLaunchSpecification]
    #
    # @!attribute [rw] scheduled_instance_id
    #   The Scheduled Instance ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstancesRequest AWS API Documentation
    #
    class RunScheduledInstancesRequest < Struct.new(
      :client_token,
      :dry_run,
      :instance_count,
      :launch_specification,
      :scheduled_instance_id)
      SENSITIVE = [:launch_specification]
      include Aws::Structure
    end

    # Contains the output of RunScheduledInstances.
    #
    # @!attribute [rw] instance_id_set
    #   The IDs of the newly launched instances.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/RunScheduledInstancesResult AWS API Documentation
    #
    class RunScheduledInstancesResult < Struct.new(
      :instance_id_set)
      SENSITIVE = []
      include Aws::Structure
    end

    # The tags to apply to the AMI object that will be stored in the Amazon
    # S3 bucket. For more information, see [Categorizing your storage using
    # tags][1] in the *Amazon Simple Storage Service User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html
    #
    # @!attribute [rw] key
    #   The key of the tag.
    #
    #   Constraints: Tag keys are case-sensitive and can be up to 128
    #   Unicode characters in length. May not begin with `aws`:.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the tag.
    #
    #   Constraints: Tag values are case-sensitive and can be up to 256
    #   Unicode characters in length.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/S3ObjectTag AWS API Documentation
    #
    class S3ObjectTag < Struct.new(
      :key,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the storage parameters for Amazon S3 and Amazon S3 buckets
    # for an instance store-backed AMI.
    #
    # @!attribute [rw] aws_access_key_id
    #   The access key ID of the owner of the bucket. Before you specify a
    #   value for your access key ID, review and follow the guidance in
    #   [Best Practices for Amazon Web Services accounts][1] in the *Account
    #   ManagementReference Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/accounts/latest/reference/best-practices.html
    #   @return [String]
    #
    # @!attribute [rw] bucket
    #   The bucket in which to store the AMI. You can specify a bucket that
    #   you already own or a new bucket that Amazon EC2 creates on your
    #   behalf. If you specify a bucket that belongs to someone else, Amazon
    #   EC2 returns an error.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   The beginning of the file name of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] upload_policy
    #   An Amazon S3 upload policy that gives Amazon EC2 permission to
    #   upload items into Amazon S3 on your behalf.
    #   @return [String]
    #
    # @!attribute [rw] upload_policy_signature
    #   The signature of the JSON document.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/S3Storage AWS API Documentation
    #
    class S3Storage < Struct.new(
      :aws_access_key_id,
      :bucket,
      :prefix,
      :upload_policy,
      :upload_policy_signature)
      SENSITIVE = [:upload_policy_signature]
      include Aws::Structure
    end

    # Describes a Scheduled Instance.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] create_date
    #   The date when the Scheduled Instance was purchased.
    #   @return [Time]
    #
    # @!attribute [rw] hourly_price
    #   The hourly price for a single instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_count
    #   The number of instances.
    #   @return [Integer]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] network_platform
    #   The network platform.
    #   @return [String]
    #
    # @!attribute [rw] next_slot_start_time
    #   The time for the next schedule to start.
    #   @return [Time]
    #
    # @!attribute [rw] platform
    #   The platform (`Linux/UNIX` or `Windows`).
    #   @return [String]
    #
    # @!attribute [rw] previous_slot_end_time
    #   The time that the previous schedule ended or will end.
    #   @return [Time]
    #
    # @!attribute [rw] recurrence
    #   The schedule recurrence.
    #   @return [Types::ScheduledInstanceRecurrence]
    #
    # @!attribute [rw] scheduled_instance_id
    #   The Scheduled Instance ID.
    #   @return [String]
    #
    # @!attribute [rw] slot_duration_in_hours
    #   The number of hours in the schedule.
    #   @return [Integer]
    #
    # @!attribute [rw] term_end_date
    #   The end date for the Scheduled Instance.
    #   @return [Time]
    #
    # @!attribute [rw] term_start_date
    #   The start date for the Scheduled Instance.
    #   @return [Time]
    #
    # @!attribute [rw] total_scheduled_instance_hours
    #   The total number of hours for a single instance for the entire term.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstance AWS API Documentation
    #
    class ScheduledInstance < Struct.new(
      :availability_zone,
      :create_date,
      :hourly_price,
      :instance_count,
      :instance_type,
      :network_platform,
      :next_slot_start_time,
      :platform,
      :previous_slot_end_time,
      :recurrence,
      :scheduled_instance_id,
      :slot_duration_in_hours,
      :term_end_date,
      :term_start_date,
      :total_scheduled_instance_hours)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a schedule that is available for your Scheduled Instances.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] available_instance_count
    #   The number of available instances.
    #   @return [Integer]
    #
    # @!attribute [rw] first_slot_start_time
    #   The time period for the first schedule to start.
    #   @return [Time]
    #
    # @!attribute [rw] hourly_price
    #   The hourly price for a single instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type. You can specify one of the C3, C4, M4, or R3
    #   instance types.
    #   @return [String]
    #
    # @!attribute [rw] max_term_duration_in_days
    #   The maximum term. The only possible value is 365 days.
    #   @return [Integer]
    #
    # @!attribute [rw] min_term_duration_in_days
    #   The minimum term. The only possible value is 365 days.
    #   @return [Integer]
    #
    # @!attribute [rw] network_platform
    #   The network platform.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   The platform (`Linux/UNIX` or `Windows`).
    #   @return [String]
    #
    # @!attribute [rw] purchase_token
    #   The purchase token. This token expires in two hours.
    #   @return [String]
    #
    # @!attribute [rw] recurrence
    #   The schedule recurrence.
    #   @return [Types::ScheduledInstanceRecurrence]
    #
    # @!attribute [rw] slot_duration_in_hours
    #   The number of hours in the schedule.
    #   @return [Integer]
    #
    # @!attribute [rw] total_scheduled_instance_hours
    #   The total number of hours for a single instance for the entire term.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstanceAvailability AWS API Documentation
    #
    class ScheduledInstanceAvailability < Struct.new(
      :availability_zone,
      :available_instance_count,
      :first_slot_start_time,
      :hourly_price,
      :instance_type,
      :max_term_duration_in_days,
      :min_term_duration_in_days,
      :network_platform,
      :platform,
      :purchase_token,
      :recurrence,
      :slot_duration_in_hours,
      :total_scheduled_instance_hours)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the recurring schedule for a Scheduled Instance.
    #
    # @!attribute [rw] frequency
    #   The frequency (`Daily`, `Weekly`, or `Monthly`).
    #   @return [String]
    #
    # @!attribute [rw] interval
    #   The interval quantity. The interval unit depends on the value of
    #   `frequency`. For example, every 2 weeks or every 2 months.
    #   @return [Integer]
    #
    # @!attribute [rw] occurrence_day_set
    #   The days. For a monthly schedule, this is one or more days of the
    #   month (1-31). For a weekly schedule, this is one or more days of the
    #   week (1-7, where 1 is Sunday).
    #   @return [Array<Integer>]
    #
    # @!attribute [rw] occurrence_relative_to_end
    #   Indicates whether the occurrence is relative to the end of the
    #   specified week or month.
    #   @return [Boolean]
    #
    # @!attribute [rw] occurrence_unit
    #   The unit for `occurrenceDaySet` (`DayOfWeek` or `DayOfMonth`).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstanceRecurrence AWS API Documentation
    #
    class ScheduledInstanceRecurrence < Struct.new(
      :frequency,
      :interval,
      :occurrence_day_set,
      :occurrence_relative_to_end,
      :occurrence_unit)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the recurring schedule for a Scheduled Instance.
    #
    # @!attribute [rw] frequency
    #   The frequency (`Daily`, `Weekly`, or `Monthly`).
    #   @return [String]
    #
    # @!attribute [rw] interval
    #   The interval quantity. The interval unit depends on the value of
    #   `Frequency`. For example, every 2 weeks or every 2 months.
    #   @return [Integer]
    #
    # @!attribute [rw] occurrence_days
    #   The days. For a monthly schedule, this is one or more days of the
    #   month (1-31). For a weekly schedule, this is one or more days of the
    #   week (1-7, where 1 is Sunday). You can't specify this value with a
    #   daily schedule. If the occurrence is relative to the end of the
    #   month, you can specify only a single day.
    #   @return [Array<Integer>]
    #
    # @!attribute [rw] occurrence_relative_to_end
    #   Indicates whether the occurrence is relative to the end of the
    #   specified week or month. You can't specify this value with a daily
    #   schedule.
    #   @return [Boolean]
    #
    # @!attribute [rw] occurrence_unit
    #   The unit for `OccurrenceDays` (`DayOfWeek` or `DayOfMonth`). This
    #   value is required for a monthly schedule. You can't specify
    #   `DayOfWeek` with a weekly schedule. You can't specify this value
    #   with a daily schedule.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstanceRecurrenceRequest AWS API Documentation
    #
    class ScheduledInstanceRecurrenceRequest < Struct.new(
      :frequency,
      :interval,
      :occurrence_days,
      :occurrence_relative_to_end,
      :occurrence_unit)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a block device mapping for a Scheduled Instance.
    #
    # @!attribute [rw] device_name
    #   The device name (for example, `/dev/sdh` or `xvdh`).
    #   @return [String]
    #
    # @!attribute [rw] ebs
    #   Parameters used to set up EBS volumes automatically when the
    #   instance is launched.
    #   @return [Types::ScheduledInstancesEbs]
    #
    # @!attribute [rw] no_device
    #   To omit the device from the block device mapping, specify an empty
    #   string.
    #   @return [String]
    #
    # @!attribute [rw] virtual_name
    #   The virtual device name (`ephemeral`N). Instance store volumes are
    #   numbered starting from 0. An instance type with two available
    #   instance store volumes can specify mappings for `ephemeral0` and
    #   `ephemeral1`. The number of available instance store volumes depends
    #   on the instance type. After you connect to the instance, you must
    #   mount the volume.
    #
    #   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.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesBlockDeviceMapping AWS API Documentation
    #
    class ScheduledInstancesBlockDeviceMapping < Struct.new(
      :device_name,
      :ebs,
      :no_device,
      :virtual_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an EBS volume for a Scheduled Instance.
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the volume is deleted on instance termination.
    #   @return [Boolean]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the volume is encrypted. You can attached
    #   encrypted volumes only to instances that support them.
    #   @return [Boolean]
    #
    # @!attribute [rw] iops
    #   The number of I/O operations per second (IOPS) to provision for a
    #   `gp3`, `io1`, or `io2` volume.
    #   @return [Integer]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   The size of the volume, in GiB.
    #
    #   Default: If you're creating the volume from a snapshot and don't
    #   specify a volume size, the default is the snapshot size.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_type
    #   The volume type.
    #
    #   Default: `gp2`
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesEbs AWS API Documentation
    #
    class ScheduledInstancesEbs < Struct.new(
      :delete_on_termination,
      :encrypted,
      :iops,
      :snapshot_id,
      :volume_size,
      :volume_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IAM instance profile for a Scheduled Instance.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN).
    #   @return [String]
    #
    # @!attribute [rw] name
    #   The name.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesIamInstanceProfile AWS API Documentation
    #
    class ScheduledInstancesIamInstanceProfile < Struct.new(
      :arn,
      :name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv6 address.
    #
    # @!attribute [rw] ipv_6_address
    #   The IPv6 address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesIpv6Address AWS API Documentation
    #
    class ScheduledInstancesIpv6Address < Struct.new(
      :ipv_6_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the launch specification for a Scheduled Instance.
    #
    # 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
    # `SubnetId` or `NetworkInterface`.
    #
    # @!attribute [rw] block_device_mappings
    #   The block device mapping entries.
    #   @return [Array<Types::ScheduledInstancesBlockDeviceMapping>]
    #
    # @!attribute [rw] ebs_optimized
    #   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.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] iam_instance_profile
    #   The IAM instance profile.
    #   @return [Types::ScheduledInstancesIamInstanceProfile]
    #
    # @!attribute [rw] image_id
    #   The ID of the Amazon Machine Image (AMI).
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] kernel_id
    #   The ID of the kernel.
    #   @return [String]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] monitoring
    #   Enable or disable monitoring for the instances.
    #   @return [Types::ScheduledInstancesMonitoring]
    #
    # @!attribute [rw] network_interfaces
    #   The network interfaces.
    #   @return [Array<Types::ScheduledInstancesNetworkInterface>]
    #
    # @!attribute [rw] placement
    #   The placement information.
    #   @return [Types::ScheduledInstancesPlacement]
    #
    # @!attribute [rw] ramdisk_id
    #   The ID of the RAM disk.
    #   @return [String]
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of the security groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet in which to launch the instances.
    #   @return [String]
    #
    # @!attribute [rw] user_data
    #   The base64-encoded MIME user data.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesLaunchSpecification AWS API Documentation
    #
    class ScheduledInstancesLaunchSpecification < Struct.new(
      :block_device_mappings,
      :ebs_optimized,
      :iam_instance_profile,
      :image_id,
      :instance_type,
      :kernel_id,
      :key_name,
      :monitoring,
      :network_interfaces,
      :placement,
      :ramdisk_id,
      :security_group_ids,
      :subnet_id,
      :user_data)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes whether monitoring is enabled for a Scheduled Instance.
    #
    # @!attribute [rw] enabled
    #   Indicates whether monitoring is enabled.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesMonitoring AWS API Documentation
    #
    class ScheduledInstancesMonitoring < Struct.new(
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a network interface for a Scheduled Instance.
    #
    # @!attribute [rw] associate_public_ip_address
    #   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 `true`.
    #
    #   Amazon Web Services charges for all public IPv4 addresses, including
    #   public IPv4 addresses associated with running instances and Elastic
    #   IP addresses. For more information, see the *Public IPv4 Address*
    #   tab on the [Amazon VPC pricing page][1].
    #
    #
    #
    #   [1]: http://aws.amazon.com/vpc/pricing/
    #   @return [Boolean]
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether to delete the interface when the instance is
    #   terminated.
    #   @return [Boolean]
    #
    # @!attribute [rw] description
    #   The description.
    #   @return [String]
    #
    # @!attribute [rw] device_index
    #   The index of the device for the network interface attachment.
    #   @return [Integer]
    #
    # @!attribute [rw] groups
    #   The IDs of the security groups.
    #   @return [Array<String>]
    #
    # @!attribute [rw] ipv_6_address_count
    #   The number of IPv6 addresses to assign to the network interface. The
    #   IPv6 addresses are automatically selected from the subnet range.
    #   @return [Integer]
    #
    # @!attribute [rw] ipv_6_addresses
    #   The specific IPv6 addresses from the subnet range.
    #   @return [Array<Types::ScheduledInstancesIpv6Address>]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address
    #   The IPv4 address of the network interface within the subnet.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_address_configs
    #   The private IPv4 addresses.
    #   @return [Array<Types::ScheduledInstancesPrivateIpAddressConfig>]
    #
    # @!attribute [rw] secondary_private_ip_address_count
    #   The number of secondary private IPv4 addresses.
    #   @return [Integer]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesNetworkInterface AWS API Documentation
    #
    class ScheduledInstancesNetworkInterface < Struct.new(
      :associate_public_ip_address,
      :delete_on_termination,
      :description,
      :device_index,
      :groups,
      :ipv_6_address_count,
      :ipv_6_addresses,
      :network_interface_id,
      :private_ip_address,
      :private_ip_address_configs,
      :secondary_private_ip_address_count,
      :subnet_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the placement for a Scheduled Instance.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the placement group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesPlacement AWS API Documentation
    #
    class ScheduledInstancesPlacement < Struct.new(
      :availability_zone,
      :group_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a private IPv4 address for a Scheduled Instance.
    #
    # @!attribute [rw] primary
    #   Indicates whether this is a primary IPv4 address. Otherwise, this is
    #   a secondary IPv4 address.
    #   @return [Boolean]
    #
    # @!attribute [rw] private_ip_address
    #   The IPv4 address.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ScheduledInstancesPrivateIpAddressConfig AWS API Documentation
    #
    class ScheduledInstancesPrivateIpAddressConfig < Struct.new(
      :primary,
      :private_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] local_gateway_route_table_id
    #   The ID of the local gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters.
    #
    #   * `prefix-list-id` - The ID of the prefix list.
    #
    #   * `route-search.exact-match` - The exact match of the specified
    #     filter.
    #
    #   * `route-search.longest-prefix-match` - The longest prefix that
    #     matches the route.
    #
    #   * `route-search.subnet-of-match` - The routes with a subnet that
    #     match the specified CIDR filter.
    #
    #   * `route-search.supernet-of-match` - 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.
    #
    #   * `state` - The state of the route.
    #
    #   * `type` - The route type.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchLocalGatewayRoutesRequest AWS API Documentation
    #
    class SearchLocalGatewayRoutesRequest < Struct.new(
      :local_gateway_route_table_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] routes
    #   Information about the routes.
    #   @return [Array<Types::LocalGatewayRoute>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchLocalGatewayRoutesResult AWS API Documentation
    #
    class SearchLocalGatewayRoutesResult < Struct.new(
      :routes,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `group-ip-address` - The IP address of the transit gateway
    #     multicast group.
    #
    #   * `is-group-member` - The resource is a group member. Valid values
    #     are `true` \| `false`.
    #
    #   * `is-group-source` - The resource is a group source. Valid values
    #     are `true` \| `false`.
    #
    #   * `member-type` - The member type. Valid values are `igmp` \|
    #     `static`.
    #
    #   * `resource-id` - The ID of the resource.
    #
    #   * `resource-type` - The type of resource. Valid values are `vpc` \|
    #     `vpn` \| `direct-connect-gateway` \| `tgw-peering`.
    #
    #   * `source-type` - The source type. Valid values are `igmp` \|
    #     `static`.
    #
    #   * `subnet-id` - The ID of the subnet.
    #
    #   * `transit-gateway-attachment-id` - The id of the transit gateway
    #     attachment.
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of results to return with a single call. To
    #   retrieve the remaining results, make another call with the returned
    #   `nextToken` value.
    #   @return [Integer]
    #
    # @!attribute [rw] next_token
    #   The token for the next page of results.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchTransitGatewayMulticastGroupsRequest AWS API Documentation
    #
    class SearchTransitGatewayMulticastGroupsRequest < Struct.new(
      :transit_gateway_multicast_domain_id,
      :filters,
      :max_results,
      :next_token,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] multicast_groups
    #   Information about the transit gateway multicast group.
    #   @return [Array<Types::TransitGatewayMulticastGroup>]
    #
    # @!attribute [rw] next_token
    #   The token to use to retrieve the next page of results. This value is
    #   `null` when there are no more results to return.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchTransitGatewayMulticastGroupsResult AWS API Documentation
    #
    class SearchTransitGatewayMulticastGroupsResult < Struct.new(
      :multicast_groups,
      :next_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] filters
    #   One or more filters. The possible values are:
    #
    #   * `attachment.transit-gateway-attachment-id`- The id of the transit
    #     gateway attachment.
    #
    #   * `attachment.resource-id` - The resource id of the transit gateway
    #     attachment.
    #
    #   * `attachment.resource-type` - The attachment resource type. Valid
    #     values are `vpc` \| `vpn` \| `direct-connect-gateway` \| `peering`
    #     \| `connect`.
    #
    #   * `prefix-list-id` - The ID of the prefix list.
    #
    #   * `route-search.exact-match` - The exact match of the specified
    #     filter.
    #
    #   * `route-search.longest-prefix-match` - The longest prefix that
    #     matches the route.
    #
    #   * `route-search.subnet-of-match` - The routes with a subnet that
    #     match the specified CIDR filter.
    #
    #   * `route-search.supernet-of-match` - 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.
    #
    #   * `state` - The state of the route (`active` \| `blackhole`).
    #
    #   * `type` - The type of route (`propagated` \| `static`).
    #   @return [Array<Types::Filter>]
    #
    # @!attribute [rw] max_results
    #   The maximum number of routes to return. If a value is not provided,
    #   the default is 1000.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchTransitGatewayRoutesRequest AWS API Documentation
    #
    class SearchTransitGatewayRoutesRequest < Struct.new(
      :transit_gateway_route_table_id,
      :filters,
      :max_results,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] routes
    #   Information about the routes.
    #   @return [Array<Types::TransitGatewayRoute>]
    #
    # @!attribute [rw] additional_routes_available
    #   Indicates whether there are additional routes available.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SearchTransitGatewayRoutesResult AWS API Documentation
    #
    class SearchTransitGatewayRoutesResult < Struct.new(
      :routes,
      :additional_routes_available)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a security group.
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] ip_permissions_egress
    #   The outbound rules associated with the security group.
    #   @return [Array<Types::IpPermission>]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the security group.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC for the security group.
    #   @return [String]
    #
    # @!attribute [rw] security_group_arn
    #   The ARN of the security group.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The Amazon Web Services account ID of the owner of the security
    #   group.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the security group.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the security group.
    #   @return [String]
    #
    # @!attribute [rw] ip_permissions
    #   The inbound rules associated with the security group.
    #   @return [Array<Types::IpPermission>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroup AWS API Documentation
    #
    class SecurityGroup < Struct.new(
      :group_id,
      :ip_permissions_egress,
      :tags,
      :vpc_id,
      :security_group_arn,
      :owner_id,
      :group_name,
      :description,
      :ip_permissions)
      SENSITIVE = []
      include Aws::Structure
    end

    # A security group that can be used by interfaces in the VPC.
    #
    # @!attribute [rw] description
    #   The security group's description.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The security group name.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The security group owner ID.
    #   @return [String]
    #
    # @!attribute [rw] group_id
    #   The security group ID.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The security group tags.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] primary_vpc_id
    #   The VPC ID in which the security group was created.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroupForVpc AWS API Documentation
    #
    class SecurityGroupForVpc < Struct.new(
      :description,
      :group_name,
      :owner_id,
      :group_id,
      :tags,
      :primary_vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a security group.
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the security group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroupIdentifier AWS API Documentation
    #
    class SecurityGroupIdentifier < Struct.new(
      :group_id,
      :group_name)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a VPC with a security group that references your security
    # group.
    #
    # @!attribute [rw] group_id
    #   The ID of your security group.
    #   @return [String]
    #
    # @!attribute [rw] referencing_vpc_id
    #   The ID of the VPC with the referencing security group.
    #   @return [String]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of the VPC peering connection (if applicable). For more
    #   information about security group referencing for peering
    #   connections, see [Update your security groups to reference peer
    #   security groups][1] in the *VPC Peering Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-security-groups.html
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway (if applicable).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroupReference AWS API Documentation
    #
    class SecurityGroupReference < Struct.new(
      :group_id,
      :referencing_vpc_id,
      :vpc_peering_connection_id,
      :transit_gateway_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a security group rule.
    #
    # @!attribute [rw] security_group_rule_id
    #   The ID of the security group rule.
    #   @return [String]
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] group_owner_id
    #   The ID of the Amazon Web Services account that owns the security
    #   group.
    #   @return [String]
    #
    # @!attribute [rw] is_egress
    #   Indicates whether the security group rule is an outbound rule.
    #   @return [Boolean]
    #
    # @!attribute [rw] ip_protocol
    #   The IP protocol name (`tcp`, `udp`, `icmp`, `icmpv6`) or number (see
    #   [Protocol Numbers][1]).
    #
    #   Use `-1` to specify all protocols.
    #
    #
    #
    #   [1]: http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
    #   @return [String]
    #
    # @!attribute [rw] from_port
    #   If the protocol is TCP or UDP, this is the start of the port range.
    #   If the protocol is ICMP or ICMPv6, this is the ICMP type or -1 (all
    #   ICMP types).
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   If the protocol is TCP or UDP, this is the end of the port range. If
    #   the protocol is ICMP or ICMPv6, this is the ICMP code or -1 (all
    #   ICMP codes). If the start port is -1 (all ICMP types), then the end
    #   port must be -1 (all ICMP codes).
    #   @return [Integer]
    #
    # @!attribute [rw] cidr_ipv_4
    #   The IPv4 CIDR range.
    #   @return [String]
    #
    # @!attribute [rw] cidr_ipv_6
    #   The IPv6 CIDR range.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] referenced_group_info
    #   Describes the security group that is referenced in the rule.
    #   @return [Types::ReferencedSecurityGroup]
    #
    # @!attribute [rw] description
    #   The security group rule description.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags applied to the security group rule.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] security_group_rule_arn
    #   The ARN of the security group rule.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroupRule AWS API Documentation
    #
    class SecurityGroupRule < Struct.new(
      :security_group_rule_id,
      :group_id,
      :group_owner_id,
      :is_egress,
      :ip_protocol,
      :from_port,
      :to_port,
      :cidr_ipv_4,
      :cidr_ipv_6,
      :prefix_list_id,
      :referenced_group_info,
      :description,
      :tags,
      :security_group_rule_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the description of a security group rule.
    #
    # You can use this when you want to update the security group rule
    # description for either an inbound or outbound rule.
    #
    # @!attribute [rw] security_group_rule_id
    #   The ID of the security group rule.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the security group rule.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroupRuleDescription AWS API Documentation
    #
    class SecurityGroupRuleDescription < Struct.new(
      :security_group_rule_id,
      :description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a security group rule.
    #
    # You must specify exactly one of the following parameters, based on the
    # rule type:
    #
    # * CidrIpv4
    #
    # * CidrIpv6
    #
    # * PrefixListId
    #
    # * ReferencedGroupId
    #
    # <note markdown="1"> Amazon Web Services [canonicalizes][1] IPv4 and IPv6 CIDRs. For
    # example, if you specify 100.68.0.18/18 for the CIDR block, Amazon Web
    # Services canonicalizes the CIDR block to 100.68.0.0/18. Any subsequent
    # DescribeSecurityGroups and DescribeSecurityGroupRules calls will
    # return the canonicalized form of the CIDR block. Additionally, if you
    # attempt to add another rule with the non-canonical form of the CIDR
    # (such as 100.68.0.18/18) and there is already a rule for the
    # canonicalized form of the CIDR block (such as 100.68.0.0/18), the API
    # throws an duplicate rule error.
    #
    #  </note>
    #
    # When you modify a rule, you cannot change the rule type. For example,
    # if the rule uses an IPv4 address range, you must use `CidrIpv4` to
    # specify a new IPv4 address range.
    #
    #
    #
    # [1]: https://en.wikipedia.org/wiki/Canonicalization
    #
    # @!attribute [rw] ip_protocol
    #   The IP protocol name (`tcp`, `udp`, `icmp`, `icmpv6`) or number (see
    #   [Protocol Numbers][1]).
    #
    #   Use `-1` to specify all protocols.
    #
    #
    #
    #   [1]: http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
    #   @return [String]
    #
    # @!attribute [rw] from_port
    #   If the protocol is TCP or UDP, this is the start of the port range.
    #   If the protocol is ICMP or ICMPv6, this is the ICMP type or -1 (all
    #   ICMP types).
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   If the protocol is TCP or UDP, this is the end of the port range. If
    #   the protocol is ICMP or ICMPv6, this is the ICMP code or -1 (all
    #   ICMP codes). If the start port is -1 (all ICMP types), then the end
    #   port must be -1 (all ICMP codes).
    #   @return [Integer]
    #
    # @!attribute [rw] cidr_ipv_4
    #   The IPv4 CIDR range. To specify a single IPv4 address, use the /32
    #   prefix length.
    #   @return [String]
    #
    # @!attribute [rw] cidr_ipv_6
    #   The IPv6 CIDR range. To specify a single IPv6 address, use the /128
    #   prefix length.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] referenced_group_id
    #   The ID of the security group that is referenced in the security
    #   group rule.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the security group rule.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroupRuleRequest AWS API Documentation
    #
    class SecurityGroupRuleRequest < Struct.new(
      :ip_protocol,
      :from_port,
      :to_port,
      :cidr_ipv_4,
      :cidr_ipv_6,
      :prefix_list_id,
      :referenced_group_id,
      :description)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an update to a security group rule.
    #
    # @!attribute [rw] security_group_rule_id
    #   The ID of the security group rule.
    #   @return [String]
    #
    # @!attribute [rw] security_group_rule
    #   Information about the security group rule.
    #   @return [Types::SecurityGroupRuleRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroupRuleUpdate AWS API Documentation
    #
    class SecurityGroupRuleUpdate < Struct.new(
      :security_group_rule_id,
      :security_group_rule)
      SENSITIVE = []
      include Aws::Structure
    end

    # A security group association with a VPC that you made with
    # [AssociateSecurityGroupVpc][1].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateSecurityGroupVpc.html
    #
    # @!attribute [rw] group_id
    #   The association's security group ID.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The association's VPC ID.
    #   @return [String]
    #
    # @!attribute [rw] vpc_owner_id
    #   The Amazon Web Services account ID of the owner of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The association's state.
    #   @return [String]
    #
    # @!attribute [rw] state_reason
    #   The association's state reason.
    #   @return [String]
    #
    # @!attribute [rw] group_owner_id
    #   The Amazon Web Services account ID of the owner of the security
    #   group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SecurityGroupVpcAssociation AWS API Documentation
    #
    class SecurityGroupVpcAssociation < Struct.new(
      :group_id,
      :vpc_id,
      :vpc_owner_id,
      :state,
      :state_reason,
      :group_owner_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SendDiagnosticInterruptRequest AWS API Documentation
    #
    class SendDiagnosticInterruptRequest < Struct.new(
      :instance_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a service configuration for a VPC endpoint service.
    #
    # @!attribute [rw] service_type
    #   The type of service.
    #   @return [Array<Types::ServiceTypeDetail>]
    #
    # @!attribute [rw] service_id
    #   The ID of the service.
    #   @return [String]
    #
    # @!attribute [rw] service_name
    #   The name of the service.
    #   @return [String]
    #
    # @!attribute [rw] service_state
    #   The service state.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_ids
    #   The IDs of the Availability Zones in which the service is available.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both
    #   @return [Array<String>]
    #
    # @!attribute [rw] availability_zones
    #   The Availability Zones in which the service is available.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both
    #   @return [Array<String>]
    #
    # @!attribute [rw] acceptance_required
    #   Indicates whether requests from other Amazon Web Services accounts
    #   to create an endpoint to the service must first be accepted.
    #   @return [Boolean]
    #
    # @!attribute [rw] manages_vpc_endpoints
    #   Indicates whether the service manages its VPC endpoints. Management
    #   of the service VPC endpoints using the VPC endpoint API is
    #   restricted.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of the Network Load Balancers for
    #   the service.
    #   @return [Array<String>]
    #
    # @!attribute [rw] gateway_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of the Gateway Load Balancers for
    #   the service.
    #   @return [Array<String>]
    #
    # @!attribute [rw] supported_ip_address_types
    #   The supported IP address types.
    #   @return [Array<String>]
    #
    # @!attribute [rw] base_endpoint_dns_names
    #   The DNS names for the service.
    #   @return [Array<String>]
    #
    # @!attribute [rw] private_dns_name
    #   The private DNS name for the service.
    #   @return [String]
    #
    # @!attribute [rw] private_dns_name_configuration
    #   Information about the endpoint service private DNS name
    #   configuration.
    #   @return [Types::PrivateDnsNameConfiguration]
    #
    # @!attribute [rw] payer_responsibility
    #   The payer responsibility.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the service.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] supported_regions
    #   The supported Regions.
    #   @return [Array<Types::SupportedRegionDetail>]
    #
    # @!attribute [rw] remote_access_enabled
    #   Indicates whether consumers can access the service from a Region
    #   other than the Region where the service is hosted.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ServiceConfiguration AWS API Documentation
    #
    class ServiceConfiguration < Struct.new(
      :service_type,
      :service_id,
      :service_name,
      :service_state,
      :availability_zone_ids,
      :availability_zones,
      :acceptance_required,
      :manages_vpc_endpoints,
      :network_load_balancer_arns,
      :gateway_load_balancer_arns,
      :supported_ip_address_types,
      :base_endpoint_dns_names,
      :private_dns_name,
      :private_dns_name_configuration,
      :payer_responsibility,
      :tags,
      :supported_regions,
      :remote_access_enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a VPC endpoint service.
    #
    # @!attribute [rw] service_name
    #   The name of the service.
    #   @return [String]
    #
    # @!attribute [rw] service_id
    #   The ID of the endpoint service.
    #   @return [String]
    #
    # @!attribute [rw] service_type
    #   The type of service.
    #   @return [Array<Types::ServiceTypeDetail>]
    #
    # @!attribute [rw] service_region
    #   The Region where the service is hosted.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_ids
    #   The IDs of the Availability Zones in which the service is available.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both
    #   @return [Array<String>]
    #
    # @!attribute [rw] availability_zones
    #   The Availability Zones in which the service is available.
    #
    #   Either `AvailabilityZone` or `AvailabilityZoneId` can be specified,
    #   but not both
    #   @return [Array<String>]
    #
    # @!attribute [rw] owner
    #   The Amazon Web Services account ID of the service owner.
    #   @return [String]
    #
    # @!attribute [rw] base_endpoint_dns_names
    #   The DNS names for the service.
    #   @return [Array<String>]
    #
    # @!attribute [rw] private_dns_name
    #   The private DNS name for the service.
    #   @return [String]
    #
    # @!attribute [rw] private_dns_names
    #   The private DNS names assigned to the VPC endpoint service.
    #   @return [Array<Types::PrivateDnsDetails>]
    #
    # @!attribute [rw] vpc_endpoint_policy_supported
    #   Indicates whether the service supports endpoint policies.
    #   @return [Boolean]
    #
    # @!attribute [rw] acceptance_required
    #   Indicates whether VPC endpoint connection requests to the service
    #   must be accepted by the service owner.
    #   @return [Boolean]
    #
    # @!attribute [rw] manages_vpc_endpoints
    #   Indicates whether the service manages its VPC endpoints. Management
    #   of the service VPC endpoints using the VPC endpoint API is
    #   restricted.
    #   @return [Boolean]
    #
    # @!attribute [rw] payer_responsibility
    #   The payer responsibility.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the service.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] private_dns_name_verification_state
    #   The verification state of the VPC endpoint service.
    #
    #   Consumers of the endpoint service cannot use the private name when
    #   the state is not `verified`.
    #   @return [String]
    #
    # @!attribute [rw] supported_ip_address_types
    #   The supported IP address types.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ServiceDetail AWS API Documentation
    #
    class ServiceDetail < Struct.new(
      :service_name,
      :service_id,
      :service_type,
      :service_region,
      :availability_zone_ids,
      :availability_zones,
      :owner,
      :base_endpoint_dns_names,
      :private_dns_name,
      :private_dns_names,
      :vpc_endpoint_policy_supported,
      :acceptance_required,
      :manages_vpc_endpoints,
      :payer_responsibility,
      :tags,
      :private_dns_name_verification_state,
      :supported_ip_address_types)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the service link virtual interfaces that establish
    # connectivity between Amazon Web Services Outpost and on-premises
    # networks.
    #
    # @!attribute [rw] service_link_virtual_interface_id
    #   The ID of the service link virtual interface.
    #   @return [String]
    #
    # @!attribute [rw] service_link_virtual_interface_arn
    #   The Amazon Resource Number (ARN) for the service link virtual
    #   interface.
    #   @return [String]
    #
    # @!attribute [rw] outpost_id
    #   The Outpost ID for the service link virtual interface.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Outpost Amazon Resource Number (ARN) for the service link
    #   virtual interface.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the service link
    #   virtual interface..
    #   @return [String]
    #
    # @!attribute [rw] local_address
    #   The IPv4 address assigned to the local gateway virtual interface on
    #   the Outpost side.
    #   @return [String]
    #
    # @!attribute [rw] peer_address
    #   The IPv4 peer address for the service link virtual interface.
    #   @return [String]
    #
    # @!attribute [rw] peer_bgp_asn
    #   The ASN for the Border Gateway Protocol (BGP) associated with the
    #   service link virtual interface.
    #   @return [Integer]
    #
    # @!attribute [rw] vlan
    #   The virtual local area network for the service link virtual
    #   interface.
    #   @return [Integer]
    #
    # @!attribute [rw] outpost_lag_id
    #   The link aggregation group (LAG) ID for the service link virtual
    #   interface.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags associated with the service link virtual interface.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] configuration_state
    #   The current state of the service link virtual interface.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ServiceLinkVirtualInterface AWS API Documentation
    #
    class ServiceLinkVirtualInterface < Struct.new(
      :service_link_virtual_interface_id,
      :service_link_virtual_interface_arn,
      :outpost_id,
      :outpost_arn,
      :owner_id,
      :local_address,
      :peer_address,
      :peer_bgp_asn,
      :vlan,
      :outpost_lag_id,
      :tags,
      :configuration_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the type of service for a VPC endpoint.
    #
    # @!attribute [rw] service_type
    #   The type of service.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ServiceTypeDetail AWS API Documentation
    #
    class ServiceTypeDetail < Struct.new(
      :service_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the time period for a Scheduled Instance to start its first
    # schedule. The time period must span less than one day.
    #
    # @!attribute [rw] earliest_time
    #   The earliest date and time, in UTC, for the Scheduled Instance to
    #   start.
    #   @return [Time]
    #
    # @!attribute [rw] latest_time
    #   The latest date and time, in UTC, for the Scheduled Instance to
    #   start. This value must be later than or equal to the earliest date
    #   and at most three months in the future.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SlotDateTimeRangeRequest AWS API Documentation
    #
    class SlotDateTimeRangeRequest < Struct.new(
      :earliest_time,
      :latest_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the time period for a Scheduled Instance to start its first
    # schedule.
    #
    # @!attribute [rw] earliest_time
    #   The earliest date and time, in UTC, for the Scheduled Instance to
    #   start.
    #   @return [Time]
    #
    # @!attribute [rw] latest_time
    #   The latest date and time, in UTC, for the Scheduled Instance to
    #   start.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SlotStartTimeRangeRequest AWS API Documentation
    #
    class SlotStartTimeRangeRequest < Struct.new(
      :earliest_time,
      :latest_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a snapshot.
    #
    # @!attribute [rw] owner_alias
    #   The Amazon Web Services owner alias, from an Amazon-maintained list
    #   (`amazon`). This is not the user-configured Amazon Web Services
    #   account alias set using the IAM console.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The ARN of the Outpost on which the snapshot is stored. For more
    #   information, see [Amazon EBS local snapshots on Outposts][1] in the
    #   *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the snapshot.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] storage_tier
    #   The storage tier in which the snapshot is stored. `standard`
    #   indicates that the snapshot is stored in the standard snapshot
    #   storage tier and that it is ready for use. `archive` indicates that
    #   the snapshot is currently archived and that it must be restored
    #   before it can be used.
    #   @return [String]
    #
    # @!attribute [rw] restore_expiry_time
    #   Only for archived snapshots that are temporarily restored. Indicates
    #   the date and time when a temporarily restored snapshot will be
    #   automatically re-archived.
    #   @return [Time]
    #
    # @!attribute [rw] sse_type
    #   Reserved for future use.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone or Local Zone of the snapshot. For example,
    #   `us-west-1a` (Availability Zone) or `us-west-2-lax-1a` (Local Zone).
    #   @return [String]
    #
    # @!attribute [rw] transfer_type
    #   <note markdown="1"> Only for snapshot copies.
    #
    #    </note>
    #
    #   Indicates whether the snapshot copy was created with a standard or
    #   time-based snapshot copy operation. Time-based snapshot copy
    #   operations complete within the completion duration specified in the
    #   request. Standard snapshot copy operations are completed on a
    #   best-effort basis.
    #
    #   * `standard` - The snapshot copy was created with a standard
    #     snapshot copy operation.
    #
    #   * `time-based` - The snapshot copy was created with a time-based
    #     snapshot copy operation.
    #   @return [String]
    #
    # @!attribute [rw] completion_duration_minutes
    #   <note markdown="1"> Only for snapshot copies created with time-based snapshot copy
    #   operations.
    #
    #    </note>
    #
    #   The completion duration requested for the time-based snapshot copy
    #   operation.
    #   @return [Integer]
    #
    # @!attribute [rw] completion_time
    #   The time stamp when the snapshot was completed.
    #   @return [Time]
    #
    # @!attribute [rw] full_snapshot_size_in_bytes
    #   The full size of the snapshot, in bytes.
    #
    #   This is **not** the incremental size of the snapshot. This is the
    #   full snapshot size and represents the size of all the blocks that
    #   were written to the source volume at the time the snapshot was
    #   created.
    #   @return [Integer]
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot. Each snapshot receives a unique identifier
    #   when it is created.
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume that was used to create the snapshot. Snapshots
    #   created by a copy snapshot operation have an arbitrary volume ID
    #   that you should not use for any purpose.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The snapshot state.
    #   @return [String]
    #
    # @!attribute [rw] state_message
    #   Encrypted Amazon EBS snapshots are copied asynchronously. If a
    #   snapshot copy operation fails (for example, if the proper KMS
    #   permissions are not obtained) this field displays error state
    #   details to help you diagnose why the error occurred. This parameter
    #   is only returned by DescribeSnapshots.
    #   @return [String]
    #
    # @!attribute [rw] start_time
    #   The time stamp when the snapshot was initiated.
    #   @return [Time]
    #
    # @!attribute [rw] progress
    #   The progress of the snapshot, as a percentage.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the EBS
    #   snapshot.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description for the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   The size of the volume, in GiB.
    #   @return [Integer]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the snapshot is encrypted.
    #   @return [Boolean]
    #
    # @!attribute [rw] kms_key_id
    #   The Amazon Resource Name (ARN) of the KMS key that was used to
    #   protect the volume encryption key for the parent volume.
    #   @return [String]
    #
    # @!attribute [rw] data_encryption_key_id
    #   The data encryption key identifier for the snapshot. This value is a
    #   unique identifier that corresponds to the data encryption key that
    #   was used to encrypt the original volume or snapshot copy. Because
    #   data encryption keys are inherited by volumes created from
    #   snapshots, and vice versa, if snapshots share the same data
    #   encryption key identifier, then they belong to the same
    #   volume/snapshot lineage. This parameter is only returned by
    #   DescribeSnapshots.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Snapshot AWS API Documentation
    #
    class Snapshot < Struct.new(
      :owner_alias,
      :outpost_arn,
      :tags,
      :storage_tier,
      :restore_expiry_time,
      :sse_type,
      :availability_zone,
      :transfer_type,
      :completion_duration_minutes,
      :completion_time,
      :full_snapshot_size_in_bytes,
      :snapshot_id,
      :volume_id,
      :state,
      :state_message,
      :start_time,
      :progress,
      :owner_id,
      :description,
      :volume_size,
      :encrypted,
      :kms_key_id,
      :data_encryption_key_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the snapshot created from the imported disk.
    #
    # @!attribute [rw] description
    #   A description for the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] device_name
    #   The block device mapping for the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] disk_image_size
    #   The size of the disk in the snapshot, in GiB.
    #   @return [Float]
    #
    # @!attribute [rw] format
    #   The format of the disk image from which the snapshot is created.
    #   @return [String]
    #
    # @!attribute [rw] progress
    #   The percentage of progress for the task.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The snapshot ID of the disk being imported.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   A brief status of the snapshot creation.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   A detailed status message for the snapshot creation.
    #   @return [String]
    #
    # @!attribute [rw] url
    #   The URL used to access the disk image.
    #   @return [String]
    #
    # @!attribute [rw] user_bucket
    #   The Amazon S3 bucket for the disk image.
    #   @return [Types::UserBucketDetails]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SnapshotDetail AWS API Documentation
    #
    class SnapshotDetail < Struct.new(
      :description,
      :device_name,
      :disk_image_size,
      :format,
      :progress,
      :snapshot_id,
      :status,
      :status_message,
      :url,
      :user_bucket)
      SENSITIVE = [:url]
      include Aws::Structure
    end

    # The disk container object for the import snapshot request.
    #
    # @!attribute [rw] description
    #   The description of the disk image being imported.
    #   @return [String]
    #
    # @!attribute [rw] format
    #   The format of the disk image being imported.
    #
    #   Valid values: `VHD` \| `VMDK` \| `RAW`
    #   @return [String]
    #
    # @!attribute [rw] url
    #   The URL to the Amazon S3-based disk image being imported. It can
    #   either be a https URL (https://..) or an Amazon S3 URL (s3://..).
    #   @return [String]
    #
    # @!attribute [rw] user_bucket
    #   The Amazon S3 bucket for the disk image.
    #   @return [Types::UserBucket]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SnapshotDiskContainer AWS API Documentation
    #
    class SnapshotDiskContainer < Struct.new(
      :description,
      :format,
      :url,
      :user_bucket)
      SENSITIVE = [:url]
      include Aws::Structure
    end

    # Information about a snapshot.
    #
    # @!attribute [rw] description
    #   Description specified by the CreateSnapshotRequest that has been
    #   applied to all snapshots.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Tags associated with this snapshot.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the snapshot is encrypted.
    #   @return [Boolean]
    #
    # @!attribute [rw] volume_id
    #   Source volume from which this snapshot was created.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   Current state of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_size
    #   Size of the volume from which this snapshot was created.
    #   @return [Integer]
    #
    # @!attribute [rw] start_time
    #   Time this snapshot was started. This is the same for all snapshots
    #   initiated by the same request.
    #   @return [Time]
    #
    # @!attribute [rw] progress
    #   Progress this snapshot has made towards completing.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   Account id used when creating this snapshot.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   Snapshot id that can be used to describe this snapshot.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The ARN of the Outpost on which the snapshot is stored. For more
    #   information, see [Amazon EBS local snapshots on Outposts][1] in the
    #   *Amazon EBS User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html
    #   @return [String]
    #
    # @!attribute [rw] sse_type
    #   Reserved for future use.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone or Local Zone of the snapshots. For example,
    #   `us-west-1a` (Availability Zone) or `us-west-2-lax-1a` (Local Zone).
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SnapshotInfo AWS API Documentation
    #
    class SnapshotInfo < Struct.new(
      :description,
      :tags,
      :encrypted,
      :volume_id,
      :state,
      :volume_size,
      :start_time,
      :progress,
      :owner_id,
      :snapshot_id,
      :outpost_arn,
      :sse_type,
      :availability_zone)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a snapshot that is currently in the Recycle Bin.
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] recycle_bin_enter_time
    #   The date and time when the snapshot entered the Recycle Bin.
    #   @return [Time]
    #
    # @!attribute [rw] recycle_bin_exit_time
    #   The date and time when the snapshot is to be permanently deleted
    #   from the Recycle Bin.
    #   @return [Time]
    #
    # @!attribute [rw] description
    #   The description for the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume from which the snapshot was created.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SnapshotRecycleBinInfo AWS API Documentation
    #
    class SnapshotRecycleBinInfo < Struct.new(
      :snapshot_id,
      :recycle_bin_enter_time,
      :recycle_bin_exit_time,
      :description,
      :volume_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Details about the import snapshot task.
    #
    # @!attribute [rw] description
    #   The description of the disk image being imported.
    #   @return [String]
    #
    # @!attribute [rw] disk_image_size
    #   The size of the disk in the snapshot, in GiB.
    #   @return [Float]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the snapshot is encrypted.
    #   @return [Boolean]
    #
    # @!attribute [rw] format
    #   The format of the disk image from which the snapshot is created.
    #   @return [String]
    #
    # @!attribute [rw] kms_key_id
    #   The identifier for the KMS key that was used to create the encrypted
    #   snapshot.
    #   @return [String]
    #
    # @!attribute [rw] progress
    #   The percentage of completion for the import snapshot task.
    #   @return [String]
    #
    # @!attribute [rw] snapshot_id
    #   The snapshot ID of the disk being imported.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   A brief status for the import snapshot task.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   A detailed status message for the import snapshot task.
    #   @return [String]
    #
    # @!attribute [rw] url
    #   The URL of the disk image from which the snapshot is created.
    #   @return [String]
    #
    # @!attribute [rw] user_bucket
    #   The Amazon S3 bucket for the disk image.
    #   @return [Types::UserBucketDetails]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SnapshotTaskDetail AWS API Documentation
    #
    class SnapshotTaskDetail < Struct.new(
      :description,
      :disk_image_size,
      :encrypted,
      :format,
      :kms_key_id,
      :progress,
      :snapshot_id,
      :status,
      :status_message,
      :url,
      :user_bucket)
      SENSITIVE = [:url]
      include Aws::Structure
    end

    # Provides information about a snapshot's storage tier.
    #
    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume from which the snapshot was created.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The state of the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the snapshot.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags that are assigned to the snapshot.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] storage_tier
    #   The storage tier in which the snapshot is stored. `standard`
    #   indicates that the snapshot is stored in the standard snapshot
    #   storage tier and that it is ready for use. `archive` indicates that
    #   the snapshot is currently archived and that it must be restored
    #   before it can be used.
    #   @return [String]
    #
    # @!attribute [rw] last_tiering_start_time
    #   The date and time when the last archive or restore process was
    #   started.
    #   @return [Time]
    #
    # @!attribute [rw] last_tiering_progress
    #   The progress of the last archive or restore process, as a
    #   percentage.
    #   @return [Integer]
    #
    # @!attribute [rw] last_tiering_operation_status
    #   The status of the last archive or restore process.
    #   @return [String]
    #
    # @!attribute [rw] last_tiering_operation_status_detail
    #   A message describing the status of the last archive or restore
    #   process.
    #   @return [String]
    #
    # @!attribute [rw] archival_complete_time
    #   The date and time when the last archive process was completed.
    #   @return [Time]
    #
    # @!attribute [rw] restore_expiry_time
    #   Only for archived snapshots that are temporarily restored. Indicates
    #   the date and time when a temporarily restored snapshot will be
    #   automatically re-archived.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SnapshotTierStatus AWS API Documentation
    #
    class SnapshotTierStatus < Struct.new(
      :snapshot_id,
      :volume_id,
      :status,
      :owner_id,
      :tags,
      :storage_tier,
      :last_tiering_start_time,
      :last_tiering_progress,
      :last_tiering_operation_status,
      :last_tiering_operation_status_detail,
      :archival_complete_time,
      :restore_expiry_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Spot Instance replacement strategy to use when Amazon EC2 emits a
    # signal that your Spot Instance is at an elevated risk of being
    # interrupted. For more information, see [Capacity rebalancing][1] in
    # the *Amazon EC2 User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html
    #
    # @!attribute [rw] replacement_strategy
    #   The replacement strategy to use. Only available for fleets of type
    #   `maintain`.
    #
    #   `launch` - Spot Fleet launches a new replacement Spot Instance when
    #   a rebalance notification is emitted for an existing Spot Instance in
    #   the fleet. Spot Fleet does not terminate the instances that receive
    #   a rebalance notification. You can terminate the old instances, or
    #   you can leave them running. You are charged for all instances while
    #   they are running.
    #
    #   `launch-before-terminate` - Spot Fleet launches a new replacement
    #   Spot Instance when a rebalance notification is emitted for an
    #   existing Spot Instance in the fleet, and then, after a delay that
    #   you specify (in `TerminationDelay`), terminates the instances that
    #   received a rebalance notification.
    #   @return [String]
    #
    # @!attribute [rw] termination_delay
    #   The amount of time (in seconds) that Amazon EC2 waits before
    #   terminating the old Spot Instance after launching a new replacement
    #   Spot Instance.
    #
    #   Required when `ReplacementStrategy` is set to
    #   `launch-before-terminate`.
    #
    #   Not valid when `ReplacementStrategy` is set to `launch`.
    #
    #   Valid values: Minimum value of `120` seconds. Maximum value of
    #   `7200` seconds.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotCapacityRebalance AWS API Documentation
    #
    class SpotCapacityRebalance < Struct.new(
      :replacement_strategy,
      :termination_delay)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the data feed for a Spot Instance.
    #
    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket where the Spot Instance data feed
    #   is located.
    #   @return [String]
    #
    # @!attribute [rw] fault
    #   The fault codes for the Spot Instance request, if any.
    #   @return [Types::SpotInstanceStateFault]
    #
    # @!attribute [rw] owner_id
    #   The Amazon Web Services account ID of the account.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   The prefix for the data feed files.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the Spot Instance data feed subscription.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotDatafeedSubscription AWS API Documentation
    #
    class SpotDatafeedSubscription < Struct.new(
      :bucket,
      :fault,
      :owner_id,
      :prefix,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the launch specification for one or more Spot Instances. If
    # you include On-Demand capacity in your fleet request or want to
    # specify an EFA network device, you can't use
    # `SpotFleetLaunchSpecification`; you must use
    # [LaunchTemplateConfig][1].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html
    #
    # @!attribute [rw] addressing_type
    #   Deprecated.
    #   @return [String]
    #
    # @!attribute [rw] block_device_mappings
    #   One or more block devices that are mapped to the Spot Instances. You
    #   can't specify both a snapshot ID and an encryption value. This is
    #   because only blank volumes can be encrypted on creation. If a
    #   snapshot is the basis for a volume, it is not blank and its
    #   encryption status is used for the volume encryption status.
    #   @return [Array<Types::BlockDeviceMapping>]
    #
    # @!attribute [rw] ebs_optimized
    #   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.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] iam_instance_profile
    #   The IAM instance profile.
    #   @return [Types::IamInstanceProfileSpecification]
    #
    # @!attribute [rw] image_id
    #   The ID of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] kernel_id
    #   The ID of the kernel.
    #   @return [String]
    #
    # @!attribute [rw] key_name
    #   The name of the key pair.
    #   @return [String]
    #
    # @!attribute [rw] monitoring
    #   Enable or disable monitoring for the instances.
    #   @return [Types::SpotFleetMonitoring]
    #
    # @!attribute [rw] network_interfaces
    #   The network interfaces.
    #
    #   <note markdown="1"> `SpotFleetLaunchSpecification` does not support Elastic Fabric
    #   Adapter (EFA). You must use [LaunchTemplateConfig][1] instead.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html
    #   @return [Array<Types::InstanceNetworkInterfaceSpecification>]
    #
    # @!attribute [rw] placement
    #   The placement information.
    #   @return [Types::SpotPlacement]
    #
    # @!attribute [rw] ramdisk_id
    #   The ID of the RAM disk. 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, refer
    #   to the Amazon Web Services Resource Center and search for the kernel
    #   ID.
    #   @return [String]
    #
    # @!attribute [rw] spot_price
    #   The maximum price per unit hour that you are 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.
    #
    #   If you specify a maximum price, your instances will be interrupted
    #   more frequently than if you do not specify this parameter.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The IDs of the subnets in which to launch the instances. To specify
    #   multiple subnets, separate them using commas; for example,
    #   "subnet-1234abcdeexample1, subnet-0987cdef6example2".
    #
    #   If you specify a network interface, you must specify any subnets as
    #   part of the network interface instead of using this parameter.
    #   @return [String]
    #
    # @!attribute [rw] user_data
    #   The base64-encoded user data that instances use when starting up.
    #   User data is limited to 16 KB.
    #   @return [String]
    #
    # @!attribute [rw] weighted_capacity
    #   The number of units provided by the specified instance type. These
    #   are the same units that you chose to set the target capacity in
    #   terms of instances, or a performance characteristic such as vCPUs,
    #   memory, or I/O.
    #
    #   If the target capacity divided by this value is not a whole number,
    #   Amazon EC2 rounds the number of instances to the next whole number.
    #   If this value is not specified, the default is 1.
    #
    #   <note markdown="1"> When specifying weights, the price used in the `lowestPrice` and
    #   `priceCapacityOptimized` allocation strategies is per *unit* hour
    #   (where the instance price is divided by the specified weight).
    #   However, if all the specified weights are above the requested
    #   `TargetCapacity`, resulting in only 1 instance being launched, the
    #   price used is per *instance* hour.
    #
    #    </note>
    #   @return [Float]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply during creation.
    #   @return [Array<Types::SpotFleetTagSpecification>]
    #
    # @!attribute [rw] instance_requirements
    #   The attributes for the instance types. When you specify instance
    #   attributes, Amazon EC2 will identify instance types with those
    #   attributes.
    #
    #   <note markdown="1"> If you specify `InstanceRequirements`, you can't specify
    #   `InstanceType`.
    #
    #    </note>
    #   @return [Types::InstanceRequirements]
    #
    # @!attribute [rw] security_groups
    #   The security groups.
    #
    #   If you specify a network interface, you must specify any security
    #   groups as part of the network interface instead of using this
    #   parameter.
    #   @return [Array<Types::GroupIdentifier>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotFleetLaunchSpecification AWS API Documentation
    #
    class SpotFleetLaunchSpecification < Struct.new(
      :addressing_type,
      :block_device_mappings,
      :ebs_optimized,
      :iam_instance_profile,
      :image_id,
      :instance_type,
      :kernel_id,
      :key_name,
      :monitoring,
      :network_interfaces,
      :placement,
      :ramdisk_id,
      :spot_price,
      :subnet_id,
      :user_data,
      :weighted_capacity,
      :tag_specifications,
      :instance_requirements,
      :security_groups)
      SENSITIVE = [:user_data]
      include Aws::Structure
    end

    # Describes whether monitoring is enabled.
    #
    # @!attribute [rw] enabled
    #   Enables monitoring for the instance.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotFleetMonitoring AWS API Documentation
    #
    class SpotFleetMonitoring < Struct.new(
      :enabled)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Spot Fleet request.
    #
    # @!attribute [rw] activity_status
    #   The progress of the Spot Fleet request. If there is an error, the
    #   status is `error`. After all requests are placed, the status is
    #   `pending_fulfillment`. If the size of the fleet is equal to or
    #   greater than its target capacity, the status is `fulfilled`. If the
    #   size of the fleet is decreased, the status is `pending_termination`
    #   while Spot Instances are terminating.
    #   @return [String]
    #
    # @!attribute [rw] create_time
    #   The creation date and time of the request.
    #   @return [Time]
    #
    # @!attribute [rw] spot_fleet_request_config
    #   The configuration of the Spot Fleet request.
    #   @return [Types::SpotFleetRequestConfigData]
    #
    # @!attribute [rw] spot_fleet_request_id
    #   The ID of the Spot Fleet request.
    #   @return [String]
    #
    # @!attribute [rw] spot_fleet_request_state
    #   The state of the Spot Fleet request.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags for a Spot Fleet resource.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotFleetRequestConfig AWS API Documentation
    #
    class SpotFleetRequestConfig < Struct.new(
      :activity_status,
      :create_time,
      :spot_fleet_request_config,
      :spot_fleet_request_id,
      :spot_fleet_request_state,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration of a Spot Fleet request.
    #
    # @!attribute [rw] allocation_strategy
    #   The strategy that determines how to allocate the target Spot
    #   Instance capacity across the Spot Instance pools specified by the
    #   Spot Fleet launch configuration. For more information, see
    #   [Allocation strategies for Spot Instances][1] in the *Amazon EC2
    #   User Guide*.
    #
    #   priceCapacityOptimized (recommended)
    #
    #   : Spot Fleet identifies the pools with the highest capacity
    #     availability for the number of instances that are launching. This
    #     means that we will request Spot Instances from the pools that we
    #     believe have the lowest chance of interruption in the near term.
    #     Spot Fleet then requests Spot Instances from the lowest priced of
    #     these pools.
    #
    #   capacityOptimized
    #
    #   : Spot Fleet identifies the pools with the highest capacity
    #     availability for the number of instances that are launching. This
    #     means that we will request Spot Instances from the pools that we
    #     believe have the lowest chance of interruption in the near term.
    #     To give certain instance types a higher chance of launching first,
    #     use `capacityOptimizedPrioritized`. Set a priority for each
    #     instance type by using the `Priority` parameter for
    #     `LaunchTemplateOverrides`. You can assign the same priority to
    #     different `LaunchTemplateOverrides`. EC2 implements the priorities
    #     on a best-effort basis, but optimizes for capacity first.
    #     `capacityOptimizedPrioritized` is supported only if your Spot
    #     Fleet uses a launch template. Note that if the
    #     `OnDemandAllocationStrategy` is set to `prioritized`, the same
    #     priority is applied when fulfilling On-Demand capacity.
    #
    #   diversified
    #
    #   : Spot Fleet requests instances from all of the Spot Instance pools
    #     that you specify.
    #
    #   lowestPrice (not recommended)
    #
    #   : We don't recommend the `lowestPrice` allocation strategy because
    #     it has the highest risk of interruption for your Spot Instances.
    #
    #     Spot Fleet requests instances from the lowest priced Spot Instance
    #     pool that has available capacity. If the lowest priced pool
    #     doesn't have available capacity, the Spot Instances come from the
    #     next lowest priced pool that has available capacity. If a pool
    #     runs out of capacity before fulfilling your desired capacity, Spot
    #     Fleet will continue to fulfill your request by drawing from the
    #     next lowest priced pool. To ensure that your desired capacity is
    #     met, you might receive Spot Instances from several pools. Because
    #     this strategy only considers instance price and not capacity
    #     availability, it might lead to high interruption rates.
    #
    #   Default: `lowestPrice`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-allocation-strategy.html
    #   @return [String]
    #
    # @!attribute [rw] on_demand_allocation_strategy
    #   The order of the launch template overrides to use in fulfilling
    #   On-Demand capacity. If you specify `lowestPrice`, Spot Fleet uses
    #   price to determine the order, launching the lowest price first. If
    #   you specify `prioritized`, Spot Fleet uses the priority that you
    #   assign to each Spot Fleet launch template override, launching the
    #   highest priority first. If you do not specify a value, Spot Fleet
    #   defaults to `lowestPrice`.
    #   @return [String]
    #
    # @!attribute [rw] spot_maintenance_strategies
    #   The strategies for managing your Spot Instances that are at an
    #   elevated risk of being interrupted.
    #   @return [Types::SpotMaintenanceStrategies]
    #
    # @!attribute [rw] client_token
    #   A unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of your listings. This helps to avoid duplicate
    #   listings. For more information, see [Ensuring Idempotency][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html
    #   @return [String]
    #
    # @!attribute [rw] excess_capacity_termination_policy
    #   Indicates whether running instances should be terminated if you
    #   decrease the target capacity of the Spot Fleet request below the
    #   current size of the Spot Fleet.
    #
    #   Supported only for fleets of type `maintain`.
    #   @return [String]
    #
    # @!attribute [rw] fulfilled_capacity
    #   The number of units fulfilled by this request compared to the set
    #   target capacity. You cannot set this value.
    #   @return [Float]
    #
    # @!attribute [rw] on_demand_fulfilled_capacity
    #   The number of On-Demand units fulfilled by this request compared to
    #   the set target On-Demand capacity.
    #   @return [Float]
    #
    # @!attribute [rw] iam_fleet_role
    #   The Amazon Resource Name (ARN) of an Identity and Access Management
    #   (IAM) role that grants the Spot Fleet the permission to request,
    #   launch, terminate, and tag instances on your behalf. For more
    #   information, see [Spot Fleet prerequisites][1] in the *Amazon EC2
    #   User Guide*. Spot Fleet can terminate Spot Instances on your behalf
    #   when you cancel its Spot Fleet request using
    #   [CancelSpotFleetRequests][2] or when the Spot Fleet request expires,
    #   if you set `TerminateInstancesWithExpiration`.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html#spot-fleet-prerequisites
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CancelSpotFleetRequests
    #   @return [String]
    #
    # @!attribute [rw] launch_specifications
    #   The launch specifications for the Spot Fleet request. If you specify
    #   `LaunchSpecifications`, you can't specify `LaunchTemplateConfigs`.
    #   If you include On-Demand capacity in your request, you must use
    #   `LaunchTemplateConfigs`.
    #
    #   <note markdown="1"> If an AMI specified in a launch specification is deregistered or
    #   disabled, no new instances can be launched from the AMI. For fleets
    #   of type `maintain`, the target capacity will not be maintained.
    #
    #    </note>
    #   @return [Array<Types::SpotFleetLaunchSpecification>]
    #
    # @!attribute [rw] launch_template_configs
    #   The launch template and overrides. If you specify
    #   `LaunchTemplateConfigs`, you can't specify `LaunchSpecifications`.
    #   If you include On-Demand capacity in your request, you must use
    #   `LaunchTemplateConfigs`.
    #   @return [Array<Types::LaunchTemplateConfig>]
    #
    # @!attribute [rw] spot_price
    #   The maximum price per unit hour that you are 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.
    #
    #   If you specify a maximum price, your instances will be interrupted
    #   more frequently than if you do not specify this parameter.
    #   @return [String]
    #
    # @!attribute [rw] target_capacity
    #   The number of units to request for the Spot Fleet. You can choose to
    #   set the target capacity in terms of instances or a performance
    #   characteristic that is important to your application workload, such
    #   as vCPUs, memory, or I/O. If the request type is `maintain`, you can
    #   specify a target capacity of 0 and add capacity later.
    #   @return [Integer]
    #
    # @!attribute [rw] on_demand_target_capacity
    #   The number of On-Demand units to request. You can choose to set the
    #   target capacity in terms of instances or a performance
    #   characteristic that is important to your application workload, such
    #   as vCPUs, memory, or I/O. If the request type is `maintain`, you can
    #   specify a target capacity of 0 and add capacity later.
    #   @return [Integer]
    #
    # @!attribute [rw] on_demand_max_total_price
    #   The maximum amount per hour for On-Demand Instances that you're
    #   willing to pay. You can use the `onDemandMaxTotalPrice` parameter,
    #   the `spotMaxTotalPrice` parameter, or both parameters to ensure that
    #   your fleet cost does not exceed your budget. If you set a maximum
    #   price per hour for the On-Demand Instances and Spot Instances in
    #   your request, Spot Fleet will launch instances until it reaches the
    #   maximum amount you're willing to pay. When the maximum amount
    #   you're willing to pay is reached, the fleet stops launching
    #   instances even if it hasn’t met the target capacity.
    #
    #   <note markdown="1"> If your fleet includes T instances that are configured as
    #   `unlimited`, and if their average CPU usage exceeds the baseline
    #   utilization, you will incur a charge for surplus credits. The
    #   `onDemandMaxTotalPrice` does not account for surplus credits, and,
    #   if you use surplus credits, your final cost might be higher than
    #   what you specified for `onDemandMaxTotalPrice`. For more
    #   information, see [Surplus credits can incur charges][1] in the
    #   *Amazon EC2 User Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits
    #   @return [String]
    #
    # @!attribute [rw] spot_max_total_price
    #   The maximum amount per hour for Spot Instances that you're willing
    #   to pay. You can use the `spotMaxTotalPrice` parameter, the
    #   `onDemandMaxTotalPrice` parameter, or both parameters to ensure that
    #   your fleet cost does not exceed your budget. If you set a maximum
    #   price per hour for the On-Demand Instances and Spot Instances in
    #   your request, Spot Fleet will launch instances until it reaches the
    #   maximum amount you're willing to pay. When the maximum amount
    #   you're willing to pay is reached, the fleet stops launching
    #   instances even if it hasn’t met the target capacity.
    #
    #   <note markdown="1"> If your fleet includes T instances that are configured as
    #   `unlimited`, and if their average CPU usage exceeds the baseline
    #   utilization, you will incur a charge for surplus credits. The
    #   `spotMaxTotalPrice` does not account for surplus credits, and, if
    #   you use surplus credits, your final cost might be higher than what
    #   you specified for `spotMaxTotalPrice`. For more information, see
    #   [Surplus credits can incur charges][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits
    #   @return [String]
    #
    # @!attribute [rw] terminate_instances_with_expiration
    #   Indicates whether running Spot Instances are terminated when the
    #   Spot Fleet request expires.
    #   @return [Boolean]
    #
    # @!attribute [rw] type
    #   The type of request. Indicates whether the Spot Fleet only requests
    #   the target capacity or also attempts to maintain it. When this value
    #   is `request`, the Spot Fleet only places the required requests. It
    #   does not attempt to replenish Spot Instances if capacity is
    #   diminished, nor does it submit requests in alternative Spot pools if
    #   capacity is not available. When this value is `maintain`, the Spot
    #   Fleet maintains the target capacity. The Spot Fleet places the
    #   required requests to meet capacity and automatically replenishes any
    #   interrupted instances. Default: `maintain`. `instant` is listed but
    #   is not used by Spot Fleet.
    #   @return [String]
    #
    # @!attribute [rw] valid_from
    #   The start date and time of the request, in UTC format
    #   (*YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). By default, Amazon EC2 starts
    #   fulfilling the request immediately.
    #   @return [Time]
    #
    # @!attribute [rw] valid_until
    #   The end date and time of the request, in UTC format
    #   (*YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). After the end date and time, no
    #   new Spot Instance requests are placed or able to fulfill the
    #   request. If no value is specified, the Spot Fleet request remains
    #   until you cancel it.
    #   @return [Time]
    #
    # @!attribute [rw] replace_unhealthy_instances
    #   Indicates whether Spot Fleet should replace unhealthy instances.
    #   @return [Boolean]
    #
    # @!attribute [rw] instance_interruption_behavior
    #   The behavior when a Spot Instance is interrupted. The default is
    #   `terminate`.
    #   @return [String]
    #
    # @!attribute [rw] load_balancers_config
    #   One or more Classic Load Balancers and target groups to attach to
    #   the Spot Fleet request. Spot Fleet registers the running Spot
    #   Instances with the specified Classic Load Balancers and target
    #   groups.
    #
    #   With Network Load Balancers, Spot Fleet cannot register instances
    #   that have the following instance types: C1, CC1, CC2, CG1, CG2, CR1,
    #   CS1, G1, G2, HI1, HS1, M1, M2, M3, and T1.
    #   @return [Types::LoadBalancersConfig]
    #
    # @!attribute [rw] instance_pools_to_use_count
    #   The number of Spot pools across which to allocate your target Spot
    #   capacity. Valid only when Spot **AllocationStrategy** is set to
    #   `lowest-price`. Spot Fleet selects the cheapest Spot pools and
    #   evenly allocates your target Spot capacity across the number of Spot
    #   pools that you specify.
    #
    #   Note that Spot Fleet attempts to draw Spot Instances from the number
    #   of pools that you specify on a best effort basis. If a pool runs out
    #   of Spot capacity before fulfilling your target capacity, Spot Fleet
    #   will continue to fulfill your request by drawing from the next
    #   cheapest pool. To ensure that your target capacity is met, you might
    #   receive Spot Instances from more than the number of pools that you
    #   specified. Similarly, if most of the pools have no Spot capacity,
    #   you might receive your full target capacity from fewer than the
    #   number of pools that you specified.
    #   @return [Integer]
    #
    # @!attribute [rw] context
    #   Reserved.
    #   @return [String]
    #
    # @!attribute [rw] target_capacity_unit_type
    #   The unit for the target capacity. You can specify this parameter
    #   only when using attribute-based instance type selection.
    #
    #   Default: `units` (the number of instances)
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The key-value pair for tagging the Spot Fleet request on creation.
    #   The value for `ResourceType` must be `spot-fleet-request`, otherwise
    #   the Spot Fleet request fails. To tag instances at launch, specify
    #   the tags in the [launch template][1] (valid only if you use
    #   `LaunchTemplateConfigs`) or in the ` SpotFleetTagSpecification `
    #   (valid only if you use `LaunchSpecifications`). For information
    #   about tagging after launch, see [Tag your resources][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotFleetRequestConfigData AWS API Documentation
    #
    class SpotFleetRequestConfigData < Struct.new(
      :allocation_strategy,
      :on_demand_allocation_strategy,
      :spot_maintenance_strategies,
      :client_token,
      :excess_capacity_termination_policy,
      :fulfilled_capacity,
      :on_demand_fulfilled_capacity,
      :iam_fleet_role,
      :launch_specifications,
      :launch_template_configs,
      :spot_price,
      :target_capacity,
      :on_demand_target_capacity,
      :on_demand_max_total_price,
      :spot_max_total_price,
      :terminate_instances_with_expiration,
      :type,
      :valid_from,
      :valid_until,
      :replace_unhealthy_instances,
      :instance_interruption_behavior,
      :load_balancers_config,
      :instance_pools_to_use_count,
      :context,
      :target_capacity_unit_type,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # The tags for a Spot Fleet resource.
    #
    # @!attribute [rw] resource_type
    #   The type of resource. Currently, the only resource type that is
    #   supported is `instance`. To tag the Spot Fleet request on creation,
    #   use the `TagSpecifications` parameter in `
    #   SpotFleetRequestConfigData `.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotFleetTagSpecification AWS API Documentation
    #
    class SpotFleetTagSpecification < Struct.new(
      :resource_type,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Spot Instance request.
    #
    # @!attribute [rw] actual_block_hourly_price
    #   Deprecated.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_group
    #   The Availability Zone group. If you specify the same Availability
    #   Zone group for all Spot Instance requests, all Spot Instances are
    #   launched in the same Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] block_duration_minutes
    #   Deprecated.
    #   @return [Integer]
    #
    # @!attribute [rw] create_time
    #   The date and time when the Spot Instance request was created, in UTC
    #   format (for example, *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @!attribute [rw] fault
    #   The fault codes for the Spot Instance request, if any.
    #   @return [Types::SpotInstanceStateFault]
    #
    # @!attribute [rw] instance_id
    #   The instance ID, if an instance has been launched to fulfill the
    #   Spot Instance request.
    #   @return [String]
    #
    # @!attribute [rw] launch_group
    #   The instance launch group. Launch groups are Spot Instances that
    #   launch together and terminate together.
    #   @return [String]
    #
    # @!attribute [rw] launch_specification
    #   Additional information for launching instances.
    #   @return [Types::LaunchSpecification]
    #
    # @!attribute [rw] launched_availability_zone
    #   The Availability Zone in which the request is launched.
    #
    #   Either `launchedAvailabilityZone` or `launchedAvailabilityZoneId`
    #   can be specified, but not both
    #   @return [String]
    #
    # @!attribute [rw] launched_availability_zone_id
    #   The ID of the Availability Zone in which the request is launched.
    #
    #   Either `launchedAvailabilityZone` or `launchedAvailabilityZoneId`
    #   can be specified, but not both
    #   @return [String]
    #
    # @!attribute [rw] product_description
    #   The product description associated with the Spot Instance.
    #   @return [String]
    #
    # @!attribute [rw] spot_instance_request_id
    #   The ID of the Spot Instance request.
    #   @return [String]
    #
    # @!attribute [rw] spot_price
    #   The maximum price per unit hour that you are 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.
    #
    #   If you specify a maximum price, your instances will be interrupted
    #   more frequently than if you do not specify this parameter.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the Spot Instance request. Spot request status
    #   information helps track your Spot Instance requests. For more
    #   information, see [Spot request status][1] in the *Amazon EC2 User
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status code and status message describing the Spot Instance
    #   request.
    #   @return [Types::SpotInstanceStatus]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the resource.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] type
    #   The Spot Instance request type.
    #   @return [String]
    #
    # @!attribute [rw] valid_from
    #   The start date of the request, in UTC format (for example,
    #   *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). The request becomes active at
    #   this date and time.
    #   @return [Time]
    #
    # @!attribute [rw] valid_until
    #   The end date of the request, in UTC format
    #   (*YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #
    #   * For a persistent request, the request remains active until the
    #     `validUntil` date and time is reached. Otherwise, the request
    #     remains active until you cancel it.
    #
    #   * For a one-time request, the request remains active until all
    #     instances launch, the request is canceled, or the `validUntil`
    #     date and time is reached. By default, the request is valid for 7
    #     days from the date the request was created.
    #   @return [Time]
    #
    # @!attribute [rw] instance_interruption_behavior
    #   The behavior when a Spot Instance is interrupted.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotInstanceRequest AWS API Documentation
    #
    class SpotInstanceRequest < Struct.new(
      :actual_block_hourly_price,
      :availability_zone_group,
      :block_duration_minutes,
      :create_time,
      :fault,
      :instance_id,
      :launch_group,
      :launch_specification,
      :launched_availability_zone,
      :launched_availability_zone_id,
      :product_description,
      :spot_instance_request_id,
      :spot_price,
      :state,
      :status,
      :tags,
      :type,
      :valid_from,
      :valid_until,
      :instance_interruption_behavior)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Spot Instance state change.
    #
    # @!attribute [rw] code
    #   The reason code for the Spot Instance state change.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The message for the Spot Instance state change.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotInstanceStateFault AWS API Documentation
    #
    class SpotInstanceStateFault < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the status of a Spot Instance request.
    #
    # @!attribute [rw] code
    #   The status code. For a list of status codes, see [Spot request
    #   status codes][1] in the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html#spot-instance-request-status-understand
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The description for the status code.
    #   @return [String]
    #
    # @!attribute [rw] update_time
    #   The date and time of the most recent status update, in UTC format
    #   (for example, *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotInstanceStatus AWS API Documentation
    #
    class SpotInstanceStatus < Struct.new(
      :code,
      :message,
      :update_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # The strategies for managing your Spot Instances that are at an
    # elevated risk of being interrupted.
    #
    # @!attribute [rw] capacity_rebalance
    #   The Spot Instance replacement strategy to use when Amazon EC2 emits
    #   a signal that your Spot Instance is at an elevated risk of being
    #   interrupted. For more information, see [Capacity rebalancing][1] in
    #   the *Amazon EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html
    #   @return [Types::SpotCapacityRebalance]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotMaintenanceStrategies AWS API Documentation
    #
    class SpotMaintenanceStrategies < Struct.new(
      :capacity_rebalance)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options for Spot Instances.
    #
    # @!attribute [rw] max_price
    #   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.
    #
    #   If you specify a maximum price, your Spot Instances will be
    #   interrupted more frequently than if you do not specify this
    #   parameter.
    #
    #    If you specify a maximum price, it must be more than USD $0.001.
    #   Specifying a value below USD $0.001 will result in an
    #   `InvalidParameterValue` error message.
    #   @return [String]
    #
    # @!attribute [rw] spot_instance_type
    #   The Spot Instance request type. For [RunInstances][1], persistent
    #   Spot Instance requests are only supported when the instance
    #   interruption behavior is either `hibernate` or `stop`.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances
    #   @return [String]
    #
    # @!attribute [rw] block_duration_minutes
    #   Deprecated.
    #   @return [Integer]
    #
    # @!attribute [rw] valid_until
    #   The end date of the request, in UTC format
    #   (*YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z). Supported only for persistent
    #   requests.
    #
    #   * For a persistent request, the request remains active until the
    #     `ValidUntil` date and time is reached. Otherwise, the request
    #     remains active until you cancel it.
    #
    #   * For a one-time request, `ValidUntil` is not supported. The request
    #     remains active until all instances launch or you cancel the
    #     request.
    #   @return [Time]
    #
    # @!attribute [rw] instance_interruption_behavior
    #   The behavior when a Spot Instance is interrupted.
    #
    #   If `Configured` (for [ `HibernationOptions` ][1]) is set to `true`,
    #   the `InstanceInterruptionBehavior` parameter is automatically set to
    #   `hibernate`. If you set it to `stop` or `terminate`, you'll get an
    #   error.
    #
    #   If `Configured` (for [ `HibernationOptions` ][1]) is set to `false`
    #   or `null`, the `InstanceInterruptionBehavior` parameter is
    #   automatically set to `terminate`. You can also set it to `stop` or
    #   `hibernate`.
    #
    #   For more information, see [Interruption behavior][2] in the *Amazon
    #   EC2 User Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_HibernationOptionsRequest.html
    #   [2]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/interruption-behavior.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotMarketOptions AWS API Documentation
    #
    class SpotMarketOptions < Struct.new(
      :max_price,
      :spot_instance_type,
      :block_duration_minutes,
      :valid_until,
      :instance_interruption_behavior)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration of Spot Instances in an EC2 Fleet.
    #
    # @!attribute [rw] allocation_strategy
    #   The strategy that determines how to allocate the target Spot
    #   Instance capacity across the Spot Instance pools specified by the
    #   EC2 Fleet launch configuration. For more information, see
    #   [Allocation strategies for Spot Instances][1] in the *Amazon EC2
    #   User Guide*.
    #
    #   price-capacity-optimized (recommended)
    #
    #   : EC2 Fleet identifies the pools with the highest capacity
    #     availability for the number of instances that are launching. This
    #     means that we will request Spot Instances from the pools that we
    #     believe have the lowest chance of interruption in the near term.
    #     EC2 Fleet then requests Spot Instances from the lowest priced of
    #     these pools.
    #
    #   capacity-optimized
    #
    #   : EC2 Fleet identifies the pools with the highest capacity
    #     availability for the number of instances that are launching. This
    #     means that we will request Spot Instances from the pools that we
    #     believe have the lowest chance of interruption in the near term.
    #     To give certain instance types a higher chance of launching first,
    #     use `capacity-optimized-prioritized`. Set a priority for each
    #     instance type by using the `Priority` parameter for
    #     `LaunchTemplateOverrides`. You can assign the same priority to
    #     different `LaunchTemplateOverrides`. EC2 implements the priorities
    #     on a best-effort basis, but optimizes for capacity first.
    #     `capacity-optimized-prioritized` is supported only if your EC2
    #     Fleet uses a launch template. Note that if the On-Demand
    #     `AllocationStrategy` is set to `prioritized`, the same priority is
    #     applied when fulfilling On-Demand capacity.
    #
    #   diversified
    #
    #   : EC2 Fleet requests instances from all of the Spot Instance pools
    #     that you specify.
    #
    #   lowest-price (not recommended)
    #
    #   : We don't recommend the `lowest-price` allocation strategy because
    #     it has the highest risk of interruption for your Spot Instances.
    #
    #     EC2 Fleet requests instances from the lowest priced Spot Instance
    #     pool that has available capacity. If the lowest priced pool
    #     doesn't have available capacity, the Spot Instances come from the
    #     next lowest priced pool that has available capacity. If a pool
    #     runs out of capacity before fulfilling your desired capacity, EC2
    #     Fleet will continue to fulfill your request by drawing from the
    #     next lowest priced pool. To ensure that your desired capacity is
    #     met, you might receive Spot Instances from several pools. Because
    #     this strategy only considers instance price and not capacity
    #     availability, it might lead to high interruption rates.
    #
    #   Default: `lowest-price`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html
    #   @return [String]
    #
    # @!attribute [rw] maintenance_strategies
    #   The strategies for managing your workloads on your Spot Instances
    #   that will be interrupted. Currently only the capacity rebalance
    #   strategy is available.
    #   @return [Types::FleetSpotMaintenanceStrategies]
    #
    # @!attribute [rw] instance_interruption_behavior
    #   The behavior when a Spot Instance is interrupted.
    #
    #   Default: `terminate`
    #   @return [String]
    #
    # @!attribute [rw] instance_pools_to_use_count
    #   The number of Spot pools across which to allocate your target Spot
    #   capacity. Supported only when `AllocationStrategy` is set to
    #   `lowest-price`. EC2 Fleet selects the cheapest Spot pools and evenly
    #   allocates your target Spot capacity across the number of Spot pools
    #   that you specify.
    #
    #   Note that EC2 Fleet attempts to draw Spot Instances from the number
    #   of pools that you specify on a best effort basis. If a pool runs out
    #   of Spot capacity before fulfilling your target capacity, EC2 Fleet
    #   will continue to fulfill your request by drawing from the next
    #   cheapest pool. To ensure that your target capacity is met, you might
    #   receive Spot Instances from more than the number of pools that you
    #   specified. Similarly, if most of the pools have no Spot capacity,
    #   you might receive your full target capacity from fewer than the
    #   number of pools that you specified.
    #   @return [Integer]
    #
    # @!attribute [rw] single_instance_type
    #   Indicates that the fleet uses a single instance type to launch all
    #   Spot Instances in the fleet.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Boolean]
    #
    # @!attribute [rw] single_availability_zone
    #   Indicates that the fleet launches all Spot Instances into a single
    #   Availability Zone.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Boolean]
    #
    # @!attribute [rw] min_target_capacity
    #   The minimum target capacity for Spot Instances in the fleet. If this
    #   minimum capacity isn't reached, no instances are launched.
    #
    #   Constraints: Maximum value of `1000`. Supported only for fleets of
    #   type `instant`.
    #
    #   At least one of the following must be specified:
    #   `SingleAvailabilityZone` \| `SingleInstanceType`
    #   @return [Integer]
    #
    # @!attribute [rw] max_total_price
    #   The maximum amount per hour for Spot Instances that you're willing
    #   to pay. 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.
    #
    #   If you specify a maximum price, your Spot Instances will be
    #   interrupted more frequently than if you do not specify this
    #   parameter.
    #
    #   <note markdown="1"> If your fleet includes T instances that are configured as
    #   `unlimited`, and if their average CPU usage exceeds the baseline
    #   utilization, you will incur a charge for surplus credits. The
    #   `maxTotalPrice` does not account for surplus credits, and, if you
    #   use surplus credits, your final cost might be higher than what you
    #   specified for `maxTotalPrice`. For more information, see [Surplus
    #   credits can incur charges][1] in the *Amazon EC2 User Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotOptions AWS API Documentation
    #
    class SpotOptions < Struct.new(
      :allocation_strategy,
      :maintenance_strategies,
      :instance_interruption_behavior,
      :instance_pools_to_use_count,
      :single_instance_type,
      :single_availability_zone,
      :min_target_capacity,
      :max_total_price)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration of Spot Instances in an EC2 Fleet request.
    #
    # @!attribute [rw] allocation_strategy
    #   The strategy that determines how to allocate the target Spot
    #   Instance capacity across the Spot Instance pools specified by the
    #   EC2 Fleet launch configuration. For more information, see
    #   [Allocation strategies for Spot Instances][1] in the *Amazon EC2
    #   User Guide*.
    #
    #   price-capacity-optimized (recommended)
    #
    #   : EC2 Fleet identifies the pools with the highest capacity
    #     availability for the number of instances that are launching. This
    #     means that we will request Spot Instances from the pools that we
    #     believe have the lowest chance of interruption in the near term.
    #     EC2 Fleet then requests Spot Instances from the lowest priced of
    #     these pools.
    #
    #   capacity-optimized
    #
    #   : EC2 Fleet identifies the pools with the highest capacity
    #     availability for the number of instances that are launching. This
    #     means that we will request Spot Instances from the pools that we
    #     believe have the lowest chance of interruption in the near term.
    #     To give certain instance types a higher chance of launching first,
    #     use `capacity-optimized-prioritized`. Set a priority for each
    #     instance type by using the `Priority` parameter for
    #     `LaunchTemplateOverrides`. You can assign the same priority to
    #     different `LaunchTemplateOverrides`. EC2 implements the priorities
    #     on a best-effort basis, but optimizes for capacity first.
    #     `capacity-optimized-prioritized` is supported only if your EC2
    #     Fleet uses a launch template. Note that if the On-Demand
    #     `AllocationStrategy` is set to `prioritized`, the same priority is
    #     applied when fulfilling On-Demand capacity.
    #
    #   diversified
    #
    #   : EC2 Fleet requests instances from all of the Spot Instance pools
    #     that you specify.
    #
    #   lowest-price (not recommended)
    #
    #   : We don't recommend the `lowest-price` allocation strategy because
    #     it has the highest risk of interruption for your Spot Instances.
    #
    #     EC2 Fleet requests instances from the lowest priced Spot Instance
    #     pool that has available capacity. If the lowest priced pool
    #     doesn't have available capacity, the Spot Instances come from the
    #     next lowest priced pool that has available capacity. If a pool
    #     runs out of capacity before fulfilling your desired capacity, EC2
    #     Fleet will continue to fulfill your request by drawing from the
    #     next lowest priced pool. To ensure that your desired capacity is
    #     met, you might receive Spot Instances from several pools. Because
    #     this strategy only considers instance price and not capacity
    #     availability, it might lead to high interruption rates.
    #
    #   Default: `lowest-price`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html
    #   @return [String]
    #
    # @!attribute [rw] maintenance_strategies
    #   The strategies for managing your Spot Instances that are at an
    #   elevated risk of being interrupted.
    #   @return [Types::FleetSpotMaintenanceStrategiesRequest]
    #
    # @!attribute [rw] instance_interruption_behavior
    #   The behavior when a Spot Instance is interrupted.
    #
    #   Default: `terminate`
    #   @return [String]
    #
    # @!attribute [rw] instance_pools_to_use_count
    #   The number of Spot pools across which to allocate your target Spot
    #   capacity. Supported only when Spot `AllocationStrategy` is set to
    #   `lowest-price`. EC2 Fleet selects the cheapest Spot pools and evenly
    #   allocates your target Spot capacity across the number of Spot pools
    #   that you specify.
    #
    #   Note that EC2 Fleet attempts to draw Spot Instances from the number
    #   of pools that you specify on a best effort basis. If a pool runs out
    #   of Spot capacity before fulfilling your target capacity, EC2 Fleet
    #   will continue to fulfill your request by drawing from the next
    #   cheapest pool. To ensure that your target capacity is met, you might
    #   receive Spot Instances from more than the number of pools that you
    #   specified. Similarly, if most of the pools have no Spot capacity,
    #   you might receive your full target capacity from fewer than the
    #   number of pools that you specified.
    #   @return [Integer]
    #
    # @!attribute [rw] single_instance_type
    #   Indicates that the fleet uses a single instance type to launch all
    #   Spot Instances in the fleet.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Boolean]
    #
    # @!attribute [rw] single_availability_zone
    #   Indicates that the fleet launches all Spot Instances into a single
    #   Availability Zone.
    #
    #   Supported only for fleets of type `instant`.
    #   @return [Boolean]
    #
    # @!attribute [rw] min_target_capacity
    #   The minimum target capacity for Spot Instances in the fleet. If this
    #   minimum capacity isn't reached, no instances are launched.
    #
    #   Constraints: Maximum value of `1000`. Supported only for fleets of
    #   type `instant`.
    #
    #   At least one of the following must be specified:
    #   `SingleAvailabilityZone` \| `SingleInstanceType`
    #   @return [Integer]
    #
    # @!attribute [rw] max_total_price
    #   The maximum amount per hour for Spot Instances that you're willing
    #   to pay. 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.
    #
    #   If you specify a maximum price, your Spot Instances will be
    #   interrupted more frequently than if you do not specify this
    #   parameter.
    #
    #   <note markdown="1"> If your fleet includes T instances that are configured as
    #   `unlimited`, and if their average CPU usage exceeds the baseline
    #   utilization, you will incur a charge for surplus credits. The
    #   `MaxTotalPrice` does not account for surplus credits, and, if you
    #   use surplus credits, your final cost might be higher than what you
    #   specified for `MaxTotalPrice`. For more information, see [Surplus
    #   credits can incur charges][1] in the *Amazon EC2 User Guide*.
    #
    #    </note>
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotOptionsRequest AWS API Documentation
    #
    class SpotOptionsRequest < Struct.new(
      :allocation_strategy,
      :maintenance_strategies,
      :instance_interruption_behavior,
      :instance_pools_to_use_count,
      :single_instance_type,
      :single_availability_zone,
      :min_target_capacity,
      :max_total_price)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes Spot Instance placement.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #
    #   \[Spot Fleet only\] To specify multiple Availability Zones, separate
    #   them using commas; for example, "us-west-2a, us-west-2b".
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the placement group.
    #   @return [String]
    #
    # @!attribute [rw] tenancy
    #   The tenancy of the instance (if the instance is running in a VPC).
    #   An instance with a tenancy of `dedicated` runs on single-tenant
    #   hardware. The `host` tenancy is not supported for Spot Instances.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotPlacement AWS API Documentation
    #
    class SpotPlacement < Struct.new(
      :availability_zone,
      :group_name,
      :tenancy)
      SENSITIVE = []
      include Aws::Structure
    end

    # The Spot placement score for this Region or Availability Zone. The
    # score is calculated based on the assumption that the
    # `capacity-optimized` allocation strategy is used and that all of the
    # Availability Zones in the Region can be used.
    #
    # @!attribute [rw] region
    #   The Region.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] score
    #   The placement score, on a scale from `1` to `10`. A score of `10`
    #   indicates that your Spot request is highly likely to succeed in this
    #   Region or Availability Zone. A score of `1` indicates that your Spot
    #   request is not likely to succeed.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotPlacementScore AWS API Documentation
    #
    class SpotPlacementScore < Struct.new(
      :region,
      :availability_zone_id,
      :score)
      SENSITIVE = []
      include Aws::Structure
    end

    # The maximum price per unit hour that you are 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.
    #
    # If you specify a maximum price, your instances will be interrupted
    # more frequently than if you do not specify this parameter.
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #   @return [String]
    #
    # @!attribute [rw] instance_type
    #   The instance type.
    #   @return [String]
    #
    # @!attribute [rw] product_description
    #   A general description of the AMI.
    #   @return [String]
    #
    # @!attribute [rw] spot_price
    #   The maximum price per unit hour that you are 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.
    #
    #   If you specify a maximum price, your instances will be interrupted
    #   more frequently than if you do not specify this parameter.
    #   @return [String]
    #
    # @!attribute [rw] timestamp
    #   The date and time the request was created, in UTC format (for
    #   example, *YYYY*-*MM*-*DD*T*HH*:*MM*:*SS*Z).
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SpotPrice AWS API Documentation
    #
    class SpotPrice < Struct.new(
      :availability_zone,
      :availability_zone_id,
      :instance_type,
      :product_description,
      :spot_price,
      :timestamp)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a stale rule in a security group.
    #
    # @!attribute [rw] from_port
    #   If the protocol is TCP or UDP, this is the start of the port range.
    #   If the protocol is ICMP or ICMPv6, this is the ICMP type or -1 (all
    #   ICMP types).
    #   @return [Integer]
    #
    # @!attribute [rw] ip_protocol
    #   The IP protocol name (`tcp`, `udp`, `icmp`, `icmpv6`) or number (see
    #   [Protocol Numbers)][1].
    #
    #
    #
    #   [1]: http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
    #   @return [String]
    #
    # @!attribute [rw] ip_ranges
    #   The IP ranges. Not applicable for stale security group rules.
    #   @return [Array<String>]
    #
    # @!attribute [rw] prefix_list_ids
    #   The prefix list IDs. Not applicable for stale security group rules.
    #   @return [Array<String>]
    #
    # @!attribute [rw] to_port
    #   If the protocol is TCP or UDP, this is the end of the port range. If
    #   the protocol is ICMP or ICMPv6, this is the ICMP code or -1 (all
    #   ICMP codes).
    #   @return [Integer]
    #
    # @!attribute [rw] user_id_group_pairs
    #   The security group pairs. Returns the ID of the referenced security
    #   group and VPC, and the ID and status of the VPC peering connection.
    #   @return [Array<Types::UserIdGroupPair>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StaleIpPermission AWS API Documentation
    #
    class StaleIpPermission < Struct.new(
      :from_port,
      :ip_protocol,
      :ip_ranges,
      :prefix_list_ids,
      :to_port,
      :user_id_group_pairs)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a stale security group (a security group that contains stale
    # rules).
    #
    # @!attribute [rw] description
    #   The description of the security group.
    #   @return [String]
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   The name of the security group.
    #   @return [String]
    #
    # @!attribute [rw] stale_ip_permissions
    #   Information about the stale inbound rules in the security group.
    #   @return [Array<Types::StaleIpPermission>]
    #
    # @!attribute [rw] stale_ip_permissions_egress
    #   Information about the stale outbound rules in the security group.
    #   @return [Array<Types::StaleIpPermission>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC for the security group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StaleSecurityGroup AWS API Documentation
    #
    class StaleSecurityGroup < Struct.new(
      :description,
      :group_id,
      :group_name,
      :stale_ip_permissions,
      :stale_ip_permissions_egress,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] s3_bucket
    #   The name of the S3 bucket where the report will be saved. The bucket
    #   must be in the same Region where the report generation request is
    #   made.
    #   @return [String]
    #
    # @!attribute [rw] s3_prefix
    #   The prefix for your S3 object.
    #   @return [String]
    #
    # @!attribute [rw] target_id
    #   The root ID, organizational unit ID, or account ID.
    #
    #   Format:
    #
    #   * For root: `r-ab12`
    #
    #   * For OU: `ou-ab12-cdef1234`
    #
    #   * For account: `123456789012`
    #   @return [String]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply.
    #   @return [Array<Types::TagSpecification>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartDeclarativePoliciesReportRequest AWS API Documentation
    #
    class StartDeclarativePoliciesReportRequest < Struct.new(
      :dry_run,
      :s3_bucket,
      :s3_prefix,
      :target_id,
      :tag_specifications)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] report_id
    #   The ID of the report.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartDeclarativePoliciesReportResult AWS API Documentation
    #
    class StartDeclarativePoliciesReportResult < Struct.new(
      :report_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_ids
    #   The IDs of the instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] additional_info
    #   Reserved.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstancesRequest AWS API Documentation
    #
    class StartInstancesRequest < Struct.new(
      :instance_ids,
      :additional_info,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] starting_instances
    #   Information about the started instances.
    #   @return [Array<Types::InstanceStateChange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartInstancesResult AWS API Documentation
    #
    class StartInstancesResult < Struct.new(
      :starting_instances)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_id
    #   The ID of the Network Access Scope.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartNetworkInsightsAccessScopeAnalysisRequest AWS API Documentation
    #
    class StartNetworkInsightsAccessScopeAnalysisRequest < Struct.new(
      :network_insights_access_scope_id,
      :dry_run,
      :tag_specifications,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_access_scope_analysis
    #   The Network Access Scope analysis.
    #   @return [Types::NetworkInsightsAccessScopeAnalysis]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartNetworkInsightsAccessScopeAnalysisResult AWS API Documentation
    #
    class StartNetworkInsightsAccessScopeAnalysisResult < Struct.new(
      :network_insights_access_scope_analysis)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_path_id
    #   The ID of the path.
    #   @return [String]
    #
    # @!attribute [rw] additional_accounts
    #   The member accounts that contain resources that the path can
    #   traverse.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filter_in_arns
    #   The Amazon Resource Names (ARN) of the resources that the path must
    #   traverse.
    #   @return [Array<String>]
    #
    # @!attribute [rw] filter_out_arns
    #   The Amazon Resource Names (ARN) of the resources that the path will
    #   ignore.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] tag_specifications
    #   The tags to apply.
    #   @return [Array<Types::TagSpecification>]
    #
    # @!attribute [rw] client_token
    #   Unique, case-sensitive identifier that you provide to ensure the
    #   idempotency of the request. For more information, see [How to ensure
    #   idempotency][1].
    #
    #   **A suitable default value is auto-generated.** You should normally
    #   not need to pass this option.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartNetworkInsightsAnalysisRequest AWS API Documentation
    #
    class StartNetworkInsightsAnalysisRequest < Struct.new(
      :network_insights_path_id,
      :additional_accounts,
      :filter_in_arns,
      :filter_out_arns,
      :dry_run,
      :tag_specifications,
      :client_token)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_insights_analysis
    #   Information about the network insights analysis.
    #   @return [Types::NetworkInsightsAnalysis]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartNetworkInsightsAnalysisResult AWS API Documentation
    #
    class StartNetworkInsightsAnalysisResult < Struct.new(
      :network_insights_analysis)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] service_id
    #   The ID of the endpoint service.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartVpcEndpointServicePrivateDnsVerificationRequest AWS API Documentation
    #
    class StartVpcEndpointServicePrivateDnsVerificationRequest < Struct.new(
      :dry_run,
      :service_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return_value
    #   Returns `true` if the request succeeds; otherwise, it returns an
    #   error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StartVpcEndpointServicePrivateDnsVerificationResult AWS API Documentation
    #
    class StartVpcEndpointServicePrivateDnsVerificationResult < Struct.new(
      :return_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a state change.
    #
    # @!attribute [rw] code
    #   The reason code for the state change.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The message for the state change.
    #
    #   * `Server.InsufficientInstanceCapacity`: There was insufficient
    #     capacity available to satisfy the launch request.
    #
    #   * `Server.InternalError`: An internal error caused the instance to
    #     terminate during launch.
    #
    #   * `Server.ScheduledStop`: The instance was stopped due to a
    #     scheduled retirement.
    #
    #   * `Server.SpotInstanceShutdown`: The instance was stopped because
    #     the number of Spot requests with a maximum price equal to or
    #     higher than the Spot price exceeded available capacity or because
    #     of an increase in the Spot price.
    #
    #   * `Server.SpotInstanceTermination`: The instance was terminated
    #     because the number of Spot requests with a maximum price equal to
    #     or higher than the Spot price exceeded available capacity or
    #     because of an increase in the Spot price.
    #
    #   * `Client.InstanceInitiatedShutdown`: The instance was shut down
    #     from the operating system of the instance.
    #
    #   * `Client.InstanceTerminated`: The instance was terminated or
    #     rebooted during AMI creation.
    #
    #   * `Client.InternalError`: A client error caused the instance to
    #     terminate during launch.
    #
    #   * `Client.InvalidSnapshot.NotFound`: The specified snapshot was not
    #     found.
    #
    #   * `Client.UserInitiatedHibernate`: Hibernation was initiated on the
    #     instance.
    #
    #   * `Client.UserInitiatedShutdown`: The instance was shut down using
    #     the Amazon EC2 API.
    #
    #   * `Client.VolumeLimitExceeded`: The limit on the number of EBS
    #     volumes or total storage was exceeded. Decrease usage or request
    #     an increase in your account limits.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StateReason AWS API Documentation
    #
    class StateReason < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_ids
    #   The IDs of the instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] hibernate
    #   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 [Hibernate your Amazon
    #   EC2 instance][1] in the *Amazon EC2 User Guide*.
    #
    #   Default: `false`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html
    #   @return [Boolean]
    #
    # @!attribute [rw] skip_os_shutdown
    #   Specifies whether to bypass the graceful OS shutdown process when
    #   the instance is stopped.
    #
    #   Bypassing the graceful OS shutdown might result in data loss or
    #   corruption (for example, memory contents not flushed to disk or loss
    #   of in-flight IOs) or skipped shutdown scripts.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] force
    #   Forces the instance to stop. The instance will first attempt a
    #   graceful shutdown, which includes flushing file system caches and
    #   metadata. If the graceful shutdown fails to complete within the
    #   timeout period, the instance shuts down forcibly without flushing
    #   the file system caches and metadata.
    #
    #   After using this option, you must perform file system check and
    #   repair procedures. This option is not recommended for Windows
    #   instances. For more information, see [Troubleshoot Amazon EC2
    #   instance stop issues][1] in the *Amazon EC2 User Guide*.
    #
    #   Default: `false`
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstancesRequest AWS API Documentation
    #
    class StopInstancesRequest < Struct.new(
      :instance_ids,
      :hibernate,
      :skip_os_shutdown,
      :dry_run,
      :force)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] stopping_instances
    #   Information about the stopped instances.
    #   @return [Array<Types::InstanceStateChange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StopInstancesResult AWS API Documentation
    #
    class StopInstancesResult < Struct.new(
      :stopping_instances)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the storage location for an instance store-backed AMI.
    #
    # @!attribute [rw] s3
    #   An Amazon S3 storage location.
    #   @return [Types::S3Storage]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Storage AWS API Documentation
    #
    class Storage < Struct.new(
      :s3)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a storage location in Amazon S3.
    #
    # @!attribute [rw] bucket
    #   The name of the S3 bucket.
    #   @return [String]
    #
    # @!attribute [rw] key
    #   The key.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StorageLocation AWS API Documentation
    #
    class StorageLocation < Struct.new(
      :bucket,
      :key)
      SENSITIVE = []
      include Aws::Structure
    end

    # The information about the AMI store task, including the progress of
    # the task.
    #
    # @!attribute [rw] ami_id
    #   The ID of the AMI that is being stored.
    #   @return [String]
    #
    # @!attribute [rw] task_start_time
    #   The time the task started.
    #   @return [Time]
    #
    # @!attribute [rw] bucket
    #   The name of the Amazon S3 bucket that contains the stored AMI
    #   object.
    #   @return [String]
    #
    # @!attribute [rw] s3object_key
    #   The name of the stored AMI object in the bucket.
    #   @return [String]
    #
    # @!attribute [rw] progress_percentage
    #   The progress of the task as a percentage.
    #   @return [Integer]
    #
    # @!attribute [rw] store_task_state
    #   The state of the store task (`InProgress`, `Completed`, or
    #   `Failed`).
    #   @return [String]
    #
    # @!attribute [rw] store_task_failure_reason
    #   If the tasks fails, the reason for the failure is returned. If the
    #   task succeeds, `null` is returned.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/StoreImageTaskResult AWS API Documentation
    #
    class StoreImageTaskResult < Struct.new(
      :ami_id,
      :task_start_time,
      :bucket,
      :s3object_key,
      :progress_percentage,
      :store_task_state,
      :store_task_failure_reason)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a subnet.
    #
    # @!attribute [rw] availability_zone_id
    #   The AZ ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] enable_lni_at_device_index
    #   Indicates the device position for local network interfaces in this
    #   subnet. For example, `1` indicates local network interfaces in this
    #   subnet are the secondary network interface (eth1).
    #   @return [Integer]
    #
    # @!attribute [rw] map_customer_owned_ip_on_launch
    #   Indicates whether a network interface created in this subnet
    #   (including a network interface created by RunInstances) receives a
    #   customer-owned IPv4 address.
    #   @return [Boolean]
    #
    # @!attribute [rw] customer_owned_ipv_4_pool
    #   The customer-owned IPv4 address pool associated with the subnet.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the subnet.
    #   @return [String]
    #
    # @!attribute [rw] assign_ipv_6_address_on_creation
    #   Indicates whether a network interface created in this subnet
    #   (including a network interface created by RunInstances) receives an
    #   IPv6 address.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipv_6_cidr_block_association_set
    #   Information about the IPv6 CIDR blocks associated with the subnet.
    #   @return [Array<Types::SubnetIpv6CidrBlockAssociation>]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the subnet.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] subnet_arn
    #   The Amazon Resource Name (ARN) of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost.
    #   @return [String]
    #
    # @!attribute [rw] enable_dns_64
    #   Indicates whether DNS queries made to the Amazon-provided DNS
    #   Resolver in this subnet should return synthetic IPv6 addresses for
    #   IPv4-only destinations.
    #   @return [Boolean]
    #
    # @!attribute [rw] ipv_6_native
    #   Indicates whether this is an IPv6 only subnet.
    #   @return [Boolean]
    #
    # @!attribute [rw] private_dns_name_options_on_launch
    #   The type of hostnames to assign to instances in the subnet at
    #   launch. An instance hostname is based on the IPv4 address or ID of
    #   the instance.
    #   @return [Types::PrivateDnsNameOptionsOnLaunch]
    #
    # @!attribute [rw] block_public_access_states
    #   The state of VPC Block Public Access (BPA).
    #   @return [Types::BlockPublicAccessStates]
    #
    # @!attribute [rw] type
    #   Indicates if this is a subnet used with Amazon Elastic VMware
    #   Service (EVS). Possible values are `Elastic VMware Service` or no
    #   value. For more information about Amazon EVS, see [ *Amazon Elastic
    #   VMware Service API Reference* ][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/evs/latest/APIReference/Welcome.html
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the subnet.
    #
    #   * `failed`: The underlying infrastructure to support the subnet
    #     failed to provision as expected.
    #
    #   * `failed-insufficient-capacity`: The underlying infrastructure to
    #     support the subnet failed to provision due to a shortage of EC2
    #     instance capacity.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC the subnet is in.
    #   @return [String]
    #
    # @!attribute [rw] cidr_block
    #   The IPv4 CIDR block assigned to the subnet.
    #   @return [String]
    #
    # @!attribute [rw] available_ip_address_count
    #   The number of unused private IPv4 addresses in the subnet. The IPv4
    #   addresses for any stopped instances are considered unavailable.
    #   @return [Integer]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] default_for_az
    #   Indicates whether this is the default subnet for the Availability
    #   Zone.
    #   @return [Boolean]
    #
    # @!attribute [rw] map_public_ip_on_launch
    #   Indicates whether instances launched in this subnet receive a public
    #   IPv4 address.
    #
    #   Amazon Web Services charges for all public IPv4 addresses, including
    #   public IPv4 addresses associated with running instances and Elastic
    #   IP addresses. For more information, see the *Public IPv4 Address*
    #   tab on the [Amazon VPC pricing page][1].
    #
    #
    #
    #   [1]: http://aws.amazon.com/vpc/pricing/
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Subnet AWS API Documentation
    #
    class Subnet < Struct.new(
      :availability_zone_id,
      :enable_lni_at_device_index,
      :map_customer_owned_ip_on_launch,
      :customer_owned_ipv_4_pool,
      :owner_id,
      :assign_ipv_6_address_on_creation,
      :ipv_6_cidr_block_association_set,
      :tags,
      :subnet_arn,
      :outpost_arn,
      :enable_dns_64,
      :ipv_6_native,
      :private_dns_name_options_on_launch,
      :block_public_access_states,
      :type,
      :subnet_id,
      :state,
      :vpc_id,
      :cidr_block,
      :available_ip_address_count,
      :availability_zone,
      :default_for_az,
      :map_public_ip_on_launch)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the subnet association with the transit gateway multicast
    # domain.
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the subnet association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SubnetAssociation AWS API Documentation
    #
    class SubnetAssociation < Struct.new(
      :subnet_id,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of a CIDR block.
    #
    # @!attribute [rw] state
    #   The state of a CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   A message about the status of the CIDR block, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SubnetCidrBlockState AWS API Documentation
    #
    class SubnetCidrBlockState < Struct.new(
      :state,
      :status_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a subnet CIDR reservation.
    #
    # @!attribute [rw] subnet_cidr_reservation_id
    #   The ID of the subnet CIDR reservation.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] cidr
    #   The CIDR that has been reserved.
    #   @return [String]
    #
    # @!attribute [rw] reservation_type
    #   The type of reservation.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the account that owns the subnet CIDR reservation.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description assigned to the subnet CIDR reservation.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the subnet CIDR reservation.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SubnetCidrReservation AWS API Documentation
    #
    class SubnetCidrReservation < Struct.new(
      :subnet_cidr_reservation_id,
      :subnet_id,
      :cidr,
      :reservation_type,
      :owner_id,
      :description,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the configuration of a subnet for a VPC endpoint.
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] ipv_4
    #   The IPv4 address to assign to the endpoint network interface in the
    #   subnet. You must provide an IPv4 address if the VPC endpoint
    #   supports IPv4.
    #
    #   If you specify an IPv4 address when modifying a VPC endpoint, we
    #   replace the existing endpoint network interface with a new endpoint
    #   network interface with this IP address. This process temporarily
    #   disconnects the subnet and the VPC endpoint.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6
    #   The IPv6 address to assign to the endpoint network interface in the
    #   subnet. You must provide an IPv6 address if the VPC endpoint
    #   supports IPv6.
    #
    #   If you specify an IPv6 address when modifying a VPC endpoint, we
    #   replace the existing endpoint network interface with a new endpoint
    #   network interface with this IP address. This process temporarily
    #   disconnects the subnet and the VPC endpoint.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SubnetConfiguration AWS API Documentation
    #
    class SubnetConfiguration < Struct.new(
      :subnet_id,
      :ipv_4,
      :ipv_6)
      SENSITIVE = []
      include Aws::Structure
    end

    # Prefixes of the subnet IP.
    #
    # @!attribute [rw] subnet_id
    #   ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] ip_prefixes
    #   Array of SubnetIpPrefixes objects.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SubnetIpPrefixes AWS API Documentation
    #
    class SubnetIpPrefixes < Struct.new(
      :subnet_id,
      :ip_prefixes)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an association between a subnet and an IPv6 CIDR block.
    #
    # @!attribute [rw] association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   The IPv6 CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block_state
    #   The state of the CIDR block.
    #   @return [Types::SubnetCidrBlockState]
    #
    # @!attribute [rw] ipv_6_address_attribute
    #   Public IPv6 addresses are those advertised on the internet from
    #   Amazon Web Services. Private IP addresses are not and cannot be
    #   advertised on the internet from Amazon Web Services.
    #   @return [String]
    #
    # @!attribute [rw] ip_source
    #   The source that allocated the IP address space. `byoip` or `amazon`
    #   indicates public IP address space allocated by Amazon or space that
    #   you have allocated with Bring your own IP (BYOIP). `none` indicates
    #   private space.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SubnetIpv6CidrBlockAssociation AWS API Documentation
    #
    class SubnetIpv6CidrBlockAssociation < Struct.new(
      :association_id,
      :ipv_6_cidr_block,
      :ipv_6_cidr_block_state,
      :ipv_6_address_attribute,
      :ip_source)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an Infrastructure Performance subscription.
    #
    # @!attribute [rw] source
    #   The Region or Availability Zone that's the source for the
    #   subscription. For example, `us-east-1`.
    #   @return [String]
    #
    # @!attribute [rw] destination
    #   The Region or Availability Zone that's the target for the
    #   subscription. For example, `eu-west-1`.
    #   @return [String]
    #
    # @!attribute [rw] metric
    #   The metric used for the subscription.
    #   @return [String]
    #
    # @!attribute [rw] statistic
    #   The statistic used for the subscription.
    #   @return [String]
    #
    # @!attribute [rw] period
    #   The data aggregation time for the subscription.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Subscription AWS API Documentation
    #
    class Subscription < Struct.new(
      :source,
      :destination,
      :metric,
      :statistic,
      :period)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the burstable performance instance whose credit option for
    # CPU usage was successfully modified.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SuccessfulInstanceCreditSpecificationItem AWS API Documentation
    #
    class SuccessfulInstanceCreditSpecificationItem < Struct.new(
      :instance_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Reserved Instance whose queued purchase was successfully
    # deleted.
    #
    # @!attribute [rw] reserved_instances_id
    #   The ID of the Reserved Instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SuccessfulQueuedPurchaseDeletion AWS API Documentation
    #
    class SuccessfulQueuedPurchaseDeletion < Struct.new(
      :reserved_instances_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a supported Region.
    #
    # @!attribute [rw] region
    #   The Region code.
    #   @return [String]
    #
    # @!attribute [rw] service_state
    #   The service state. The possible values are `Pending`, `Available`,
    #   `Deleting`, `Deleted`, `Failed`, and `Closed`.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/SupportedRegionDetail AWS API Documentation
    #
    class SupportedRegionDetail < Struct.new(
      :region,
      :service_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a tag.
    #
    # @!attribute [rw] key
    #   The key of the tag.
    #
    #   Constraints: Tag keys are case-sensitive and accept a maximum of 127
    #   Unicode characters. May not begin with `aws:`.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The value of the tag.
    #
    #   Constraints: Tag values are case-sensitive and accept a maximum of
    #   256 Unicode characters.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Tag AWS API Documentation
    #
    class Tag < Struct.new(
      :key,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a tag.
    #
    # @!attribute [rw] key
    #   The tag key.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type.
    #   @return [String]
    #
    # @!attribute [rw] value
    #   The tag value.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TagDescription AWS API Documentation
    #
    class TagDescription < Struct.new(
      :key,
      :resource_id,
      :resource_type,
      :value)
      SENSITIVE = []
      include Aws::Structure
    end

    # The tags to apply to a resource when the resource is being created.
    # When you specify a tag, you must specify the resource type to tag,
    # otherwise the request will fail.
    #
    # <note markdown="1"> The `Valid Values` lists all the resource types that can be tagged.
    # However, the action you're using might not support tagging all of
    # these resource types. If you try to tag a resource type that is
    # unsupported for the action you're using, you'll get an error.
    #
    #  </note>
    #
    # @!attribute [rw] resource_type
    #   The type of resource to tag on creation.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags to apply to the resource.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TagSpecification AWS API Documentation
    #
    class TagSpecification < Struct.new(
      :resource_type,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # The number of units to request. You can choose to set the target
    # capacity in terms of instances or a performance characteristic that is
    # important to your application workload, such as vCPUs, memory, or I/O.
    # If the request type is `maintain`, you can specify a target capacity
    # of 0 and add capacity later.
    #
    # You can use the On-Demand Instance `MaxTotalPrice` parameter, the Spot
    # Instance `MaxTotalPrice`, or both to ensure that your fleet cost does
    # not exceed your budget. If you set a maximum price per hour for the
    # On-Demand Instances and Spot Instances in your request, EC2 Fleet will
    # launch instances until it reaches the maximum amount that you're
    # willing to pay. When the maximum amount you're willing to pay is
    # reached, the fleet stops launching instances even if it hasn’t met the
    # target capacity. The `MaxTotalPrice` parameters are located in
    # [OnDemandOptions][1] and [SpotOptions][2].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_OnDemandOptions.html
    # [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotOptions
    #
    # @!attribute [rw] total_target_capacity
    #   The number of units to request, filled the default target capacity
    #   type.
    #   @return [Integer]
    #
    # @!attribute [rw] on_demand_target_capacity
    #   The number of On-Demand units to request. If you specify a target
    #   capacity for Spot units, you cannot specify a target capacity for
    #   On-Demand units.
    #   @return [Integer]
    #
    # @!attribute [rw] spot_target_capacity
    #   The maximum number of Spot units to launch. If you specify a target
    #   capacity for On-Demand units, you cannot specify a target capacity
    #   for Spot units.
    #   @return [Integer]
    #
    # @!attribute [rw] default_target_capacity_type
    #   The default target capacity type.
    #   @return [String]
    #
    # @!attribute [rw] target_capacity_unit_type
    #   The unit for the target capacity.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetCapacitySpecification AWS API Documentation
    #
    class TargetCapacitySpecification < Struct.new(
      :total_target_capacity,
      :on_demand_target_capacity,
      :spot_target_capacity,
      :default_target_capacity_type,
      :target_capacity_unit_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # The number of units to request. You can choose to set the target
    # capacity as the number of instances. Or you can set the target
    # capacity to a performance characteristic that is important to your
    # application workload, such as vCPUs, memory, or I/O. If the request
    # type is `maintain`, you can specify a target capacity of 0 and add
    # capacity later.
    #
    # You can use the On-Demand Instance `MaxTotalPrice` parameter, the Spot
    # Instance `MaxTotalPrice` parameter, or both parameters to ensure that
    # your fleet cost does not exceed your budget. If you set a maximum
    # price per hour for the On-Demand Instances and Spot Instances in your
    # request, EC2 Fleet will launch instances until it reaches the maximum
    # amount that you're willing to pay. When the maximum amount you're
    # willing to pay is reached, the fleet stops launching instances even if
    # it hasn't met the target capacity. The `MaxTotalPrice` parameters are
    # located in [OnDemandOptionsRequest][1] and [SpotOptionsRequest][2].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_OnDemandOptionsRequest
    # [2]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotOptionsRequest
    #
    # @!attribute [rw] total_target_capacity
    #   The number of units to request, filled using the default target
    #   capacity type.
    #   @return [Integer]
    #
    # @!attribute [rw] on_demand_target_capacity
    #   The number of On-Demand units to request.
    #   @return [Integer]
    #
    # @!attribute [rw] spot_target_capacity
    #   The number of Spot units to request.
    #   @return [Integer]
    #
    # @!attribute [rw] default_target_capacity_type
    #   The default target capacity type.
    #   @return [String]
    #
    # @!attribute [rw] target_capacity_unit_type
    #   The unit for the target capacity. You can specify this parameter
    #   only when using attributed-based instance type selection.
    #
    #   Default: `units` (the number of instances)
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetCapacitySpecificationRequest AWS API Documentation
    #
    class TargetCapacitySpecificationRequest < Struct.new(
      :total_target_capacity,
      :on_demand_target_capacity,
      :spot_target_capacity,
      :default_target_capacity_type,
      :target_capacity_unit_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the Convertible Reserved Instance offering.
    #
    # @!attribute [rw] instance_count
    #   The number of instances the Convertible Reserved Instance offering
    #   can be applied to. This parameter is reserved and cannot be
    #   specified in a request
    #   @return [Integer]
    #
    # @!attribute [rw] offering_id
    #   The ID of the Convertible Reserved Instance offering.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetConfiguration AWS API Documentation
    #
    class TargetConfiguration < Struct.new(
      :instance_count,
      :offering_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Details about the target configuration.
    #
    # @!attribute [rw] instance_count
    #   The number of instances the Convertible Reserved Instance offering
    #   can be applied to. This parameter is reserved and cannot be
    #   specified in a request
    #   @return [Integer]
    #
    # @!attribute [rw] offering_id
    #   The Convertible Reserved Instance offering ID.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetConfigurationRequest AWS API Documentation
    #
    class TargetConfigurationRequest < Struct.new(
      :instance_count,
      :offering_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a load balancer target group.
    #
    # @!attribute [rw] arn
    #   The Amazon Resource Name (ARN) of the target group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetGroup AWS API Documentation
    #
    class TargetGroup < Struct.new(
      :arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the target groups to attach to a Spot Fleet. Spot Fleet
    # registers the running Spot Instances with these target groups.
    #
    # @!attribute [rw] target_groups
    #   One or more target groups.
    #   @return [Array<Types::TargetGroup>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetGroupsConfig AWS API Documentation
    #
    class TargetGroupsConfig < Struct.new(
      :target_groups)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a target network associated with a Client VPN endpoint.
    #
    # @!attribute [rw] association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC in which the target network (subnet) is located.
    #   @return [String]
    #
    # @!attribute [rw] target_network_id
    #   The ID of the subnet specified as the target network.
    #   @return [String]
    #
    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint with which the target network is
    #   associated.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The current state of the target network association.
    #   @return [Types::AssociationStatus]
    #
    # @!attribute [rw] security_groups
    #   The IDs of the security groups applied to the target network
    #   association.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetNetwork AWS API Documentation
    #
    class TargetNetwork < Struct.new(
      :association_id,
      :vpc_id,
      :target_network_id,
      :client_vpn_endpoint_id,
      :status,
      :security_groups)
      SENSITIVE = []
      include Aws::Structure
    end

    # The total value of the new Convertible Reserved Instances.
    #
    # @!attribute [rw] reservation_value
    #   The total value of the Convertible Reserved Instances that make up
    #   the exchange. This is the sum of the list value, remaining upfront
    #   price, and additional upfront cost of the exchange.
    #   @return [Types::ReservationValue]
    #
    # @!attribute [rw] target_configuration
    #   The configuration of the Convertible Reserved Instances that make up
    #   the exchange.
    #   @return [Types::TargetConfiguration]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TargetReservationValue AWS API Documentation
    #
    class TargetReservationValue < Struct.new(
      :reservation_value,
      :target_configuration)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint to which the client is connected.
    #   @return [String]
    #
    # @!attribute [rw] connection_id
    #   The ID of the client connection to be terminated.
    #   @return [String]
    #
    # @!attribute [rw] username
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateClientVpnConnectionsRequest AWS API Documentation
    #
    class TerminateClientVpnConnectionsRequest < Struct.new(
      :client_vpn_endpoint_id,
      :connection_id,
      :username,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] client_vpn_endpoint_id
    #   The ID of the Client VPN endpoint.
    #   @return [String]
    #
    # @!attribute [rw] username
    #   The user who established the terminated client connections.
    #   @return [String]
    #
    # @!attribute [rw] connection_statuses
    #   The current state of the client connections.
    #   @return [Array<Types::TerminateConnectionStatus>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateClientVpnConnectionsResult AWS API Documentation
    #
    class TerminateClientVpnConnectionsResult < Struct.new(
      :client_vpn_endpoint_id,
      :username,
      :connection_statuses)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about a terminated Client VPN endpoint client connection.
    #
    # @!attribute [rw] connection_id
    #   The ID of the client connection.
    #   @return [String]
    #
    # @!attribute [rw] previous_status
    #   The state of the client connection.
    #   @return [Types::ClientVpnConnectionStatus]
    #
    # @!attribute [rw] current_status
    #   A message about the status of the client connection, if applicable.
    #   @return [Types::ClientVpnConnectionStatus]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateConnectionStatus AWS API Documentation
    #
    class TerminateConnectionStatus < Struct.new(
      :connection_id,
      :previous_status,
      :current_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_ids
    #   The IDs of the instances.
    #
    #   Constraints: Up to 1000 instance IDs. We recommend breaking up this
    #   request into smaller batches.
    #   @return [Array<String>]
    #
    # @!attribute [rw] force
    #   Forces the instances to terminate. The instance will first attempt a
    #   graceful shutdown, which includes flushing file system caches and
    #   metadata. If the graceful shutdown fails to complete within the
    #   timeout period, the instance shuts down forcibly without flushing
    #   the file system caches and metadata.
    #   @return [Boolean]
    #
    # @!attribute [rw] skip_os_shutdown
    #   Specifies whether to bypass the graceful OS shutdown process when
    #   the instance is terminated.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstancesRequest AWS API Documentation
    #
    class TerminateInstancesRequest < Struct.new(
      :instance_ids,
      :force,
      :skip_os_shutdown,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] terminating_instances
    #   Information about the terminated instances.
    #   @return [Array<Types::InstanceStateChange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TerminateInstancesResult AWS API Documentation
    #
    class TerminateInstancesResult < Struct.new(
      :terminating_instances)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a through resource statement.
    #
    # @!attribute [rw] resource_statement
    #   The resource statement.
    #   @return [Types::ResourceStatement]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ThroughResourcesStatement AWS API Documentation
    #
    class ThroughResourcesStatement < Struct.new(
      :resource_statement)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a through resource statement.
    #
    # @!attribute [rw] resource_statement
    #   The resource statement.
    #   @return [Types::ResourceStatementRequest]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ThroughResourcesStatementRequest AWS API Documentation
    #
    class ThroughResourcesStatementRequest < Struct.new(
      :resource_statement)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of total local storage, in GB.
    #
    # @!attribute [rw] min
    #   The minimum amount of total local storage, in GB. If this parameter
    #   is not specified, there is no minimum limit.
    #   @return [Float]
    #
    # @!attribute [rw] max
    #   The maximum amount of total local storage, in GB. If this parameter
    #   is not specified, there is no maximum limit.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TotalLocalStorageGB AWS API Documentation
    #
    class TotalLocalStorageGB < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum amount of total local storage, in GB.
    #
    # @!attribute [rw] min
    #   The minimum amount of total local storage, in GB. To specify no
    #   minimum limit, omit this parameter.
    #   @return [Float]
    #
    # @!attribute [rw] max
    #   The maximum amount of total local storage, in GB. To specify no
    #   maximum limit, omit this parameter.
    #   @return [Float]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TotalLocalStorageGBRequest AWS API Documentation
    #
    class TotalLocalStorageGBRequest < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Traffic Mirror filter.
    #
    # @!attribute [rw] traffic_mirror_filter_id
    #   The ID of the Traffic Mirror filter.
    #   @return [String]
    #
    # @!attribute [rw] ingress_filter_rules
    #   Information about the ingress rules that are associated with the
    #   Traffic Mirror filter.
    #   @return [Array<Types::TrafficMirrorFilterRule>]
    #
    # @!attribute [rw] egress_filter_rules
    #   Information about the egress rules that are associated with the
    #   Traffic Mirror filter.
    #   @return [Array<Types::TrafficMirrorFilterRule>]
    #
    # @!attribute [rw] network_services
    #   The network service traffic that is associated with the Traffic
    #   Mirror filter.
    #   @return [Array<String>]
    #
    # @!attribute [rw] description
    #   The description of the Traffic Mirror filter.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the Traffic Mirror filter.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TrafficMirrorFilter AWS API Documentation
    #
    class TrafficMirrorFilter < Struct.new(
      :traffic_mirror_filter_id,
      :ingress_filter_rules,
      :egress_filter_rules,
      :network_services,
      :description,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Traffic Mirror rule.
    #
    # @!attribute [rw] traffic_mirror_filter_rule_id
    #   The ID of the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] traffic_mirror_filter_id
    #   The ID of the Traffic Mirror filter that the rule is associated
    #   with.
    #   @return [String]
    #
    # @!attribute [rw] traffic_direction
    #   The traffic direction assigned to the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] rule_number
    #   The rule number of the Traffic Mirror rule.
    #   @return [Integer]
    #
    # @!attribute [rw] rule_action
    #   The action assigned to the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] protocol
    #   The protocol assigned to the Traffic Mirror rule.
    #   @return [Integer]
    #
    # @!attribute [rw] destination_port_range
    #   The destination port range assigned to the Traffic Mirror rule.
    #   @return [Types::TrafficMirrorPortRange]
    #
    # @!attribute [rw] source_port_range
    #   The source port range assigned to the Traffic Mirror rule.
    #   @return [Types::TrafficMirrorPortRange]
    #
    # @!attribute [rw] destination_cidr_block
    #   The destination CIDR block assigned to the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] source_cidr_block
    #   The source CIDR block assigned to the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the Traffic Mirror rule.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   Tags on Traffic Mirroring filter rules.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TrafficMirrorFilterRule AWS API Documentation
    #
    class TrafficMirrorFilterRule < Struct.new(
      :traffic_mirror_filter_rule_id,
      :traffic_mirror_filter_id,
      :traffic_direction,
      :rule_number,
      :rule_action,
      :protocol,
      :destination_port_range,
      :source_port_range,
      :destination_cidr_block,
      :source_cidr_block,
      :description,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Traffic Mirror port range.
    #
    # @!attribute [rw] from_port
    #   The start of the Traffic Mirror port range. This applies to the TCP
    #   and UDP protocols.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   The end of the Traffic Mirror port range. This applies to the TCP
    #   and UDP protocols.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TrafficMirrorPortRange AWS API Documentation
    #
    class TrafficMirrorPortRange < Struct.new(
      :from_port,
      :to_port)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the Traffic Mirror filter rule port range.
    #
    # @!attribute [rw] from_port
    #   The first port in the Traffic Mirror port range. This applies to the
    #   TCP and UDP protocols.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   The last port in the Traffic Mirror port range. This applies to the
    #   TCP and UDP protocols.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TrafficMirrorPortRangeRequest AWS API Documentation
    #
    class TrafficMirrorPortRangeRequest < Struct.new(
      :from_port,
      :to_port)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Traffic Mirror session.
    #
    # @!attribute [rw] traffic_mirror_session_id
    #   The ID for the Traffic Mirror session.
    #   @return [String]
    #
    # @!attribute [rw] traffic_mirror_target_id
    #   The ID of the Traffic Mirror target.
    #   @return [String]
    #
    # @!attribute [rw] traffic_mirror_filter_id
    #   The ID of the Traffic Mirror filter.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the Traffic Mirror session's network interface.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the account that owns the Traffic Mirror session.
    #   @return [String]
    #
    # @!attribute [rw] packet_length
    #   The number of bytes in each packet to mirror. These are the bytes
    #   after the VXLAN header. To mirror a subset, set this to the length
    #   (in bytes) to mirror. For example, if you set this value to 100,
    #   then the first 100 bytes that meet the filter criteria are copied to
    #   the target. Do not specify this parameter when you want to mirror
    #   the entire packet
    #   @return [Integer]
    #
    # @!attribute [rw] session_number
    #   The session number determines the order in which sessions are
    #   evaluated when an interface is used by multiple sessions. The first
    #   session with a matching filter is the one that mirrors the packets.
    #
    #   Valid values are 1-32766.
    #   @return [Integer]
    #
    # @!attribute [rw] virtual_network_id
    #   The virtual network ID associated with the Traffic Mirror session.
    #   @return [Integer]
    #
    # @!attribute [rw] description
    #   The description of the Traffic Mirror session.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the Traffic Mirror session.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TrafficMirrorSession AWS API Documentation
    #
    class TrafficMirrorSession < Struct.new(
      :traffic_mirror_session_id,
      :traffic_mirror_target_id,
      :traffic_mirror_filter_id,
      :network_interface_id,
      :owner_id,
      :packet_length,
      :session_number,
      :virtual_network_id,
      :description,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Traffic Mirror target.
    #
    # @!attribute [rw] traffic_mirror_target_id
    #   The ID of the Traffic Mirror target.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The network interface ID that is attached to the target.
    #   @return [String]
    #
    # @!attribute [rw] network_load_balancer_arn
    #   The Amazon Resource Name (ARN) of the Network Load Balancer.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of Traffic Mirror target.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   Information about the Traffic Mirror target.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the account that owns the Traffic Mirror target.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the Traffic Mirror target.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] gateway_load_balancer_endpoint_id
    #   The ID of the Gateway Load Balancer endpoint.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TrafficMirrorTarget AWS API Documentation
    #
    class TrafficMirrorTarget < Struct.new(
      :traffic_mirror_target_id,
      :network_interface_id,
      :network_load_balancer_arn,
      :type,
      :description,
      :owner_id,
      :tags,
      :gateway_load_balancer_endpoint_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a transit gateway.
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_arn
    #   The Amazon Resource Name (ARN) of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the transit
    #   gateway.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [Time]
    #
    # @!attribute [rw] options
    #   The transit gateway options.
    #   @return [Types::TransitGatewayOptions]
    #
    # @!attribute [rw] tags
    #   The tags for the transit gateway.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGateway AWS API Documentation
    #
    class TransitGateway < Struct.new(
      :transit_gateway_id,
      :transit_gateway_arn,
      :state,
      :owner_id,
      :description,
      :creation_time,
      :options,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an association between a resource attachment and a transit
    # gateway route table.
    #
    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type. Note that the `tgw-peering` resource type has
    #   been deprecated.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayAssociation AWS API Documentation
    #
    class TransitGatewayAssociation < Struct.new(
      :transit_gateway_route_table_id,
      :transit_gateway_attachment_id,
      :resource_id,
      :resource_type,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an attachment between a resource and a transit gateway.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_owner_id
    #   The ID of the Amazon Web Services account that owns the transit
    #   gateway.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner_id
    #   The ID of the Amazon Web Services account that owns the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type. Note that the `tgw-peering` resource type has
    #   been deprecated.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The attachment state. Note that the `initiating` state has been
    #   deprecated.
    #   @return [String]
    #
    # @!attribute [rw] association
    #   The association.
    #   @return [Types::TransitGatewayAttachmentAssociation]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   The tags for the attachment.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayAttachment AWS API Documentation
    #
    class TransitGatewayAttachment < Struct.new(
      :transit_gateway_attachment_id,
      :transit_gateway_id,
      :transit_gateway_owner_id,
      :resource_owner_id,
      :resource_type,
      :resource_id,
      :state,
      :association,
      :creation_time,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an association.
    #
    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the route table for the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayAttachmentAssociation AWS API Documentation
    #
    class TransitGatewayAttachmentAssociation < Struct.new(
      :transit_gateway_route_table_id,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # The BGP configuration information.
    #
    # @!attribute [rw] transit_gateway_asn
    #   The transit gateway Autonomous System Number (ASN).
    #   @return [Integer]
    #
    # @!attribute [rw] peer_asn
    #   The peer Autonomous System Number (ASN).
    #   @return [Integer]
    #
    # @!attribute [rw] transit_gateway_address
    #   The interior BGP peer IP address for the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] peer_address
    #   The interior BGP peer IP address for the appliance.
    #   @return [String]
    #
    # @!attribute [rw] bgp_status
    #   The BGP status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayAttachmentBgpConfiguration AWS API Documentation
    #
    class TransitGatewayAttachmentBgpConfiguration < Struct.new(
      :transit_gateway_asn,
      :peer_asn,
      :transit_gateway_address,
      :peer_address,
      :bgp_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a propagation route table.
    #
    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the propagation route table.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the propagation route table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayAttachmentPropagation AWS API Documentation
    #
    class TransitGatewayAttachmentPropagation < Struct.new(
      :transit_gateway_route_table_id,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a transit gateway Connect attachment.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the Connect attachment.
    #   @return [String]
    #
    # @!attribute [rw] transport_transit_gateway_attachment_id
    #   The ID of the attachment from which the Connect attachment was
    #   created.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [Time]
    #
    # @!attribute [rw] options
    #   The Connect attachment options.
    #   @return [Types::TransitGatewayConnectOptions]
    #
    # @!attribute [rw] tags
    #   The tags for the attachment.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayConnect AWS API Documentation
    #
    class TransitGatewayConnect < Struct.new(
      :transit_gateway_attachment_id,
      :transport_transit_gateway_attachment_id,
      :transit_gateway_id,
      :state,
      :creation_time,
      :options,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Connect attachment options.
    #
    # @!attribute [rw] protocol
    #   The tunnel protocol.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayConnectOptions AWS API Documentation
    #
    class TransitGatewayConnectOptions < Struct.new(
      :protocol)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a transit gateway Connect peer.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the Connect attachment.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_connect_peer_id
    #   The ID of the Connect peer.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the Connect peer.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [Time]
    #
    # @!attribute [rw] connect_peer_configuration
    #   The Connect peer details.
    #   @return [Types::TransitGatewayConnectPeerConfiguration]
    #
    # @!attribute [rw] tags
    #   The tags for the Connect peer.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayConnectPeer AWS API Documentation
    #
    class TransitGatewayConnectPeer < Struct.new(
      :transit_gateway_attachment_id,
      :transit_gateway_connect_peer_id,
      :state,
      :creation_time,
      :connect_peer_configuration,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Connect peer details.
    #
    # @!attribute [rw] transit_gateway_address
    #   The Connect peer IP address on the transit gateway side of the
    #   tunnel.
    #   @return [String]
    #
    # @!attribute [rw] peer_address
    #   The Connect peer IP address on the appliance side of the tunnel.
    #   @return [String]
    #
    # @!attribute [rw] inside_cidr_blocks
    #   The range of interior BGP peer IP addresses.
    #   @return [Array<String>]
    #
    # @!attribute [rw] protocol
    #   The tunnel protocol.
    #   @return [String]
    #
    # @!attribute [rw] bgp_configurations
    #   The BGP configuration details.
    #   @return [Array<Types::TransitGatewayAttachmentBgpConfiguration>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayConnectPeerConfiguration AWS API Documentation
    #
    class TransitGatewayConnectPeerConfiguration < Struct.new(
      :transit_gateway_address,
      :peer_address,
      :inside_cidr_blocks,
      :protocol,
      :bgp_configurations)
      SENSITIVE = []
      include Aws::Structure
    end

    # The BGP options for the Connect attachment.
    #
    # @!attribute [rw] peer_asn
    #   The peer Autonomous System Number (ASN).
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayConnectRequestBgpOptions AWS API Documentation
    #
    class TransitGatewayConnectRequestBgpOptions < Struct.new(
      :peer_asn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the deregistered transit gateway multicast group members.
    #
    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] deregistered_network_interface_ids
    #   The network interface IDs of the deregistered members.
    #   @return [Array<String>]
    #
    # @!attribute [rw] group_ip_address
    #   The IP address assigned to the transit gateway multicast group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayMulticastDeregisteredGroupMembers AWS API Documentation
    #
    class TransitGatewayMulticastDeregisteredGroupMembers < Struct.new(
      :transit_gateway_multicast_domain_id,
      :deregistered_network_interface_ids,
      :group_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the deregistered transit gateway multicast group sources.
    #
    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] deregistered_network_interface_ids
    #   The network interface IDs of the non-registered members.
    #   @return [Array<String>]
    #
    # @!attribute [rw] group_ip_address
    #   The IP address assigned to the transit gateway multicast group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayMulticastDeregisteredGroupSources AWS API Documentation
    #
    class TransitGatewayMulticastDeregisteredGroupSources < Struct.new(
      :transit_gateway_multicast_domain_id,
      :deregistered_network_interface_ids,
      :group_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the transit gateway multicast domain.
    #
    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_multicast_domain_arn
    #   The Amazon Resource Name (ARN) of the transit gateway multicast
    #   domain.
    #   @return [String]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the transit
    #   gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] options
    #   The options for the transit gateway multicast domain.
    #   @return [Types::TransitGatewayMulticastDomainOptions]
    #
    # @!attribute [rw] state
    #   The state of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The time the transit gateway multicast domain was created.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   The tags for the transit gateway multicast domain.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayMulticastDomain AWS API Documentation
    #
    class TransitGatewayMulticastDomain < Struct.new(
      :transit_gateway_multicast_domain_id,
      :transit_gateway_id,
      :transit_gateway_multicast_domain_arn,
      :owner_id,
      :options,
      :state,
      :creation_time,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the resources associated with the transit gateway multicast
    # domain.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of resource, for example a VPC attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner_id
    #   The ID of the Amazon Web Services account that owns the transit
    #   gateway multicast domain association resource.
    #   @return [String]
    #
    # @!attribute [rw] subnet
    #   The subnet associated with the transit gateway multicast domain.
    #   @return [Types::SubnetAssociation]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayMulticastDomainAssociation AWS API Documentation
    #
    class TransitGatewayMulticastDomainAssociation < Struct.new(
      :transit_gateway_attachment_id,
      :resource_id,
      :resource_type,
      :resource_owner_id,
      :subnet)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the multicast domain associations.
    #
    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of resource, for example a VPC attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner_id
    #   The ID of the Amazon Web Services account that owns the resource.
    #   @return [String]
    #
    # @!attribute [rw] subnets
    #   The subnets associated with the multicast domain.
    #   @return [Array<Types::SubnetAssociation>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayMulticastDomainAssociations AWS API Documentation
    #
    class TransitGatewayMulticastDomainAssociations < Struct.new(
      :transit_gateway_multicast_domain_id,
      :transit_gateway_attachment_id,
      :resource_id,
      :resource_type,
      :resource_owner_id,
      :subnets)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for a transit gateway multicast domain.
    #
    # @!attribute [rw] igmpv_2_support
    #   Indicates whether Internet Group Management Protocol (IGMP) version
    #   2 is turned on for the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] static_sources_support
    #   Indicates whether support for statically configuring transit gateway
    #   multicast group sources is turned on.
    #   @return [String]
    #
    # @!attribute [rw] auto_accept_shared_associations
    #   Indicates whether to automatically cross-account subnet associations
    #   that are associated with the transit gateway multicast domain.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayMulticastDomainOptions AWS API Documentation
    #
    class TransitGatewayMulticastDomainOptions < Struct.new(
      :igmpv_2_support,
      :static_sources_support,
      :auto_accept_shared_associations)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the transit gateway multicast group resources.
    #
    # @!attribute [rw] group_ip_address
    #   The IP address assigned to the transit gateway multicast group.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] subnet_id
    #   The ID of the subnet.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of resource, for example a VPC attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_owner_id
    #   The ID of the Amazon Web Services account that owns the transit
    #   gateway multicast domain group resource.
    #   @return [String]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] group_member
    #   Indicates that the resource is a transit gateway multicast group
    #   member.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_source
    #   Indicates that the resource is a transit gateway multicast group
    #   member.
    #   @return [Boolean]
    #
    # @!attribute [rw] member_type
    #   The member type (for example, `static`).
    #   @return [String]
    #
    # @!attribute [rw] source_type
    #   The source type.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayMulticastGroup AWS API Documentation
    #
    class TransitGatewayMulticastGroup < Struct.new(
      :group_ip_address,
      :transit_gateway_attachment_id,
      :subnet_id,
      :resource_id,
      :resource_type,
      :resource_owner_id,
      :network_interface_id,
      :group_member,
      :group_source,
      :member_type,
      :source_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the registered transit gateway multicast group members.
    #
    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] registered_network_interface_ids
    #   The ID of the registered network interfaces.
    #   @return [Array<String>]
    #
    # @!attribute [rw] group_ip_address
    #   The IP address assigned to the transit gateway multicast group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayMulticastRegisteredGroupMembers AWS API Documentation
    #
    class TransitGatewayMulticastRegisteredGroupMembers < Struct.new(
      :transit_gateway_multicast_domain_id,
      :registered_network_interface_ids,
      :group_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the members registered with the transit gateway multicast
    # group.
    #
    # @!attribute [rw] transit_gateway_multicast_domain_id
    #   The ID of the transit gateway multicast domain.
    #   @return [String]
    #
    # @!attribute [rw] registered_network_interface_ids
    #   The IDs of the network interfaces members registered with the
    #   transit gateway multicast group.
    #   @return [Array<String>]
    #
    # @!attribute [rw] group_ip_address
    #   The IP address assigned to the transit gateway multicast group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayMulticastRegisteredGroupSources AWS API Documentation
    #
    class TransitGatewayMulticastRegisteredGroupSources < Struct.new(
      :transit_gateway_multicast_domain_id,
      :registered_network_interface_ids,
      :group_ip_address)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for a transit gateway.
    #
    # @!attribute [rw] amazon_side_asn
    #   A private Autonomous System Number (ASN) for the Amazon side of a
    #   BGP session. The range is 64512 to 65534 for 16-bit ASNs and
    #   4200000000 to 4294967294 for 32-bit ASNs.
    #   @return [Integer]
    #
    # @!attribute [rw] transit_gateway_cidr_blocks
    #   The transit gateway CIDR blocks.
    #   @return [Array<String>]
    #
    # @!attribute [rw] auto_accept_shared_attachments
    #   Indicates whether attachment requests are automatically accepted.
    #   @return [String]
    #
    # @!attribute [rw] default_route_table_association
    #   Indicates whether resource attachments are automatically associated
    #   with the default association route table. Enabled by default. Either
    #   `defaultRouteTableAssociation` or `defaultRouteTablePropagation`
    #   must be set to `enable` for Amazon Web Services Transit Gateway to
    #   create the default transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] association_default_route_table_id
    #   The ID of the default association route table.
    #   @return [String]
    #
    # @!attribute [rw] default_route_table_propagation
    #   Indicates whether resource attachments automatically propagate
    #   routes to the default propagation route table. Enabled by default.
    #   If `defaultRouteTablePropagation` is set to `enable`, Amazon Web
    #   Services Transit Gateway creates the default transit gateway route
    #   table.
    #   @return [String]
    #
    # @!attribute [rw] propagation_default_route_table_id
    #   The ID of the default propagation route table.
    #   @return [String]
    #
    # @!attribute [rw] vpn_ecmp_support
    #   Indicates whether Equal Cost Multipath Protocol support is enabled.
    #   @return [String]
    #
    # @!attribute [rw] dns_support
    #   Indicates whether DNS support is enabled.
    #   @return [String]
    #
    # @!attribute [rw] security_group_referencing_support
    #   Enables you to reference a security group across VPCs attached to a
    #   transit gateway to simplify security group management.
    #
    #   This option is disabled by default.
    #   @return [String]
    #
    # @!attribute [rw] multicast_support
    #   Indicates whether multicast is enabled on the transit gateway
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayOptions AWS API Documentation
    #
    class TransitGatewayOptions < Struct.new(
      :amazon_side_asn,
      :transit_gateway_cidr_blocks,
      :auto_accept_shared_attachments,
      :default_route_table_association,
      :association_default_route_table_id,
      :default_route_table_propagation,
      :propagation_default_route_table_id,
      :vpn_ecmp_support,
      :dns_support,
      :security_group_referencing_support,
      :multicast_support)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the transit gateway peering attachment.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway peering attachment.
    #   @return [String]
    #
    # @!attribute [rw] accepter_transit_gateway_attachment_id
    #   The ID of the accepter transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] requester_tgw_info
    #   Information about the requester transit gateway.
    #   @return [Types::PeeringTgwInfo]
    #
    # @!attribute [rw] accepter_tgw_info
    #   Information about the accepter transit gateway.
    #   @return [Types::PeeringTgwInfo]
    #
    # @!attribute [rw] options
    #   Details about the transit gateway peering attachment.
    #   @return [Types::TransitGatewayPeeringAttachmentOptions]
    #
    # @!attribute [rw] status
    #   The status of the transit gateway peering attachment.
    #   @return [Types::PeeringAttachmentStatus]
    #
    # @!attribute [rw] state
    #   The state of the transit gateway peering attachment. Note that the
    #   `initiating` state has been deprecated.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The time the transit gateway peering attachment was created.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   The tags for the transit gateway peering attachment.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPeeringAttachment AWS API Documentation
    #
    class TransitGatewayPeeringAttachment < Struct.new(
      :transit_gateway_attachment_id,
      :accepter_transit_gateway_attachment_id,
      :requester_tgw_info,
      :accepter_tgw_info,
      :options,
      :status,
      :state,
      :creation_time,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes dynamic routing for the transit gateway peering attachment.
    #
    # @!attribute [rw] dynamic_routing
    #   Describes whether dynamic routing is enabled or disabled for the
    #   transit gateway peering attachment.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPeeringAttachmentOptions AWS API Documentation
    #
    class TransitGatewayPeeringAttachmentOptions < Struct.new(
      :dynamic_routing)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a rule associated with a transit gateway policy.
    #
    # @!attribute [rw] source_cidr_block
    #   The source CIDR block for the transit gateway policy rule.
    #   @return [String]
    #
    # @!attribute [rw] source_port_range
    #   The port range for the transit gateway policy rule. Currently this
    #   is set to * (all).
    #   @return [String]
    #
    # @!attribute [rw] destination_cidr_block
    #   The destination CIDR block for the transit gateway policy rule.
    #   @return [String]
    #
    # @!attribute [rw] destination_port_range
    #   The port range for the transit gateway policy rule. Currently this
    #   is set to * (all).
    #   @return [String]
    #
    # @!attribute [rw] protocol
    #   The protocol used by the transit gateway policy rule.
    #   @return [String]
    #
    # @!attribute [rw] meta_data
    #   The meta data tags used for the transit gateway policy rule.
    #   @return [Types::TransitGatewayPolicyRuleMetaData]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPolicyRule AWS API Documentation
    #
    class TransitGatewayPolicyRule < Struct.new(
      :source_cidr_block,
      :source_port_range,
      :destination_cidr_block,
      :destination_port_range,
      :protocol,
      :meta_data)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the meta data tags associated with a transit gateway policy
    # rule.
    #
    # @!attribute [rw] meta_data_key
    #   The key name for the transit gateway policy rule meta data tag.
    #   @return [String]
    #
    # @!attribute [rw] meta_data_value
    #   The value of the key for the transit gateway policy rule meta data
    #   tag.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPolicyRuleMetaData AWS API Documentation
    #
    class TransitGatewayPolicyRuleMetaData < Struct.new(
      :meta_data_key,
      :meta_data_value)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a transit gateway policy table.
    #
    # @!attribute [rw] transit_gateway_policy_table_id
    #   The ID of the transit gateway policy table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the transit gateway policy table
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The timestamp when the transit gateway policy table was created.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   he key-value pairs associated with the transit gateway policy table.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPolicyTable AWS API Documentation
    #
    class TransitGatewayPolicyTable < Struct.new(
      :transit_gateway_policy_table_id,
      :transit_gateway_id,
      :state,
      :creation_time,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a transit gateway policy table association.
    #
    # @!attribute [rw] transit_gateway_policy_table_id
    #   The ID of the transit gateway policy table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The resource ID of the transit gateway attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type for the transit gateway policy table association.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the transit gateway policy table association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPolicyTableAssociation AWS API Documentation
    #
    class TransitGatewayPolicyTableAssociation < Struct.new(
      :transit_gateway_policy_table_id,
      :transit_gateway_attachment_id,
      :resource_id,
      :resource_type,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a transit gateway policy table entry
    #
    # @!attribute [rw] policy_rule_number
    #   The rule number for the transit gateway policy table entry.
    #   @return [String]
    #
    # @!attribute [rw] policy_rule
    #   The policy rule associated with the transit gateway policy table.
    #   @return [Types::TransitGatewayPolicyRule]
    #
    # @!attribute [rw] target_route_table_id
    #   The ID of the target route table.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPolicyTableEntry AWS API Documentation
    #
    class TransitGatewayPolicyTableEntry < Struct.new(
      :policy_rule_number,
      :policy_rule,
      :target_route_table_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a transit gateway prefix list attachment.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type. Note that the `tgw-peering` resource type has
    #   been deprecated.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPrefixListAttachment AWS API Documentation
    #
    class TransitGatewayPrefixListAttachment < Struct.new(
      :transit_gateway_attachment_id,
      :resource_type,
      :resource_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a prefix list reference.
    #
    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_owner_id
    #   The ID of the prefix list owner.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the prefix list reference.
    #   @return [String]
    #
    # @!attribute [rw] blackhole
    #   Indicates whether traffic that matches this route is dropped.
    #   @return [Boolean]
    #
    # @!attribute [rw] transit_gateway_attachment
    #   Information about the transit gateway attachment.
    #   @return [Types::TransitGatewayPrefixListAttachment]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPrefixListReference AWS API Documentation
    #
    class TransitGatewayPrefixListReference < Struct.new(
      :transit_gateway_route_table_id,
      :prefix_list_id,
      :prefix_list_owner_id,
      :state,
      :blackhole,
      :transit_gateway_attachment)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes route propagation.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type. Note that the `tgw-peering` resource type has
    #   been deprecated.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_route_table_announcement_id
    #   The ID of the transit gateway route table announcement.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayPropagation AWS API Documentation
    #
    class TransitGatewayPropagation < Struct.new(
      :transit_gateway_attachment_id,
      :resource_id,
      :resource_type,
      :transit_gateway_route_table_id,
      :state,
      :transit_gateway_route_table_announcement_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for a transit gateway.
    #
    # @!attribute [rw] amazon_side_asn
    #   A private Autonomous System Number (ASN) for the Amazon side of a
    #   BGP session. The range is 64512 to 65534 for 16-bit ASNs and
    #   4200000000 to 4294967294 for 32-bit ASNs. The default is `64512`.
    #   @return [Integer]
    #
    # @!attribute [rw] auto_accept_shared_attachments
    #   Enable or disable automatic acceptance of attachment requests.
    #   Disabled by default.
    #   @return [String]
    #
    # @!attribute [rw] default_route_table_association
    #   Enable or disable automatic association with the default association
    #   route table. Enabled by default.
    #   @return [String]
    #
    # @!attribute [rw] default_route_table_propagation
    #   Enable or disable automatic propagation of routes to the default
    #   propagation route table. Enabled by default.
    #   @return [String]
    #
    # @!attribute [rw] vpn_ecmp_support
    #   Enable or disable Equal Cost Multipath Protocol support. Enabled by
    #   default.
    #   @return [String]
    #
    # @!attribute [rw] dns_support
    #   Enable or disable DNS support. Enabled by default.
    #   @return [String]
    #
    # @!attribute [rw] security_group_referencing_support
    #   Enables you to reference a security group across VPCs attached to a
    #   transit gateway to simplify security group management.
    #
    #   This option is disabled by default.
    #
    #   For more information about security group referencing, see [Security
    #   group referencing][1] in the *Amazon Web Services Transit Gateways
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#vpc-attachment-security
    #   @return [String]
    #
    # @!attribute [rw] multicast_support
    #   Indicates whether multicast is enabled on the transit gateway
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_cidr_blocks
    #   One or more IPv4 or IPv6 CIDR blocks for the transit gateway. Must
    #   be a size /24 CIDR block or larger for IPv4, or a size /64 CIDR
    #   block or larger for IPv6.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayRequestOptions AWS API Documentation
    #
    class TransitGatewayRequestOptions < Struct.new(
      :amazon_side_asn,
      :auto_accept_shared_attachments,
      :default_route_table_association,
      :default_route_table_propagation,
      :vpn_ecmp_support,
      :dns_support,
      :security_group_referencing_support,
      :multicast_support,
      :transit_gateway_cidr_blocks)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route for a transit gateway route table.
    #
    # @!attribute [rw] destination_cidr_block
    #   The CIDR block used for destination matches.
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list used for destination matches.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_route_table_announcement_id
    #   The ID of the transit gateway route table announcement.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachments
    #   The attachments.
    #   @return [Array<Types::TransitGatewayRouteAttachment>]
    #
    # @!attribute [rw] type
    #   The route type.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the route.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayRoute AWS API Documentation
    #
    class TransitGatewayRoute < Struct.new(
      :destination_cidr_block,
      :prefix_list_id,
      :transit_gateway_route_table_announcement_id,
      :transit_gateway_attachments,
      :type,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route attachment.
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type. Note that the `tgw-peering` resource type has
    #   been deprecated.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayRouteAttachment AWS API Documentation
    #
    class TransitGatewayRouteAttachment < Struct.new(
      :resource_id,
      :transit_gateway_attachment_id,
      :resource_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a transit gateway route table.
    #
    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] default_association_route_table
    #   Indicates whether this is the default association route table for
    #   the transit gateway.
    #   @return [Boolean]
    #
    # @!attribute [rw] default_propagation_route_table
    #   Indicates whether this is the default propagation route table for
    #   the transit gateway.
    #   @return [Boolean]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the route table.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayRouteTable AWS API Documentation
    #
    class TransitGatewayRouteTable < Struct.new(
      :transit_gateway_route_table_id,
      :transit_gateway_id,
      :state,
      :default_association_route_table,
      :default_propagation_route_table,
      :creation_time,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a transit gateway route table announcement.
    #
    # @!attribute [rw] transit_gateway_route_table_announcement_id
    #   The ID of the transit gateway route table announcement.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] core_network_id
    #   The ID of the core network for the transit gateway route table
    #   announcement.
    #   @return [String]
    #
    # @!attribute [rw] peer_transit_gateway_id
    #   The ID of the peer transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] peer_core_network_id
    #   The ID of the core network ID for the peer.
    #   @return [String]
    #
    # @!attribute [rw] peering_attachment_id
    #   The ID of the peering attachment.
    #   @return [String]
    #
    # @!attribute [rw] announcement_direction
    #   The direction for the route table announcement.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_route_table_id
    #   The ID of the transit gateway route table.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the transit gateway announcement.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The timestamp when the transit gateway route table announcement was
    #   created.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   The key-value pairs associated with the route table announcement.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayRouteTableAnnouncement AWS API Documentation
    #
    class TransitGatewayRouteTableAnnouncement < Struct.new(
      :transit_gateway_route_table_announcement_id,
      :transit_gateway_id,
      :core_network_id,
      :peer_transit_gateway_id,
      :peer_core_network_id,
      :peering_attachment_id,
      :announcement_direction,
      :transit_gateway_route_table_id,
      :state,
      :creation_time,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an association between a route table and a resource
    # attachment.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type. Note that the `tgw-peering` resource type has
    #   been deprecated.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the association.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayRouteTableAssociation AWS API Documentation
    #
    class TransitGatewayRouteTableAssociation < Struct.new(
      :transit_gateway_attachment_id,
      :resource_id,
      :resource_type,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route table propagation.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The type of resource. Note that the `tgw-peering` resource type has
    #   been deprecated.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the resource.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_route_table_announcement_id
    #   The ID of the transit gateway route table announcement.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayRouteTablePropagation AWS API Documentation
    #
    class TransitGatewayRouteTablePropagation < Struct.new(
      :transit_gateway_attachment_id,
      :resource_id,
      :resource_type,
      :state,
      :transit_gateway_route_table_announcement_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route in a transit gateway route table.
    #
    # @!attribute [rw] destination_cidr
    #   The CIDR block used for destination matches.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the route.
    #   @return [String]
    #
    # @!attribute [rw] route_origin
    #   The route origin. The following are the possible values:
    #
    #   * static
    #
    #   * propagated
    #   @return [String]
    #
    # @!attribute [rw] prefix_list_id
    #   The ID of the prefix list.
    #   @return [String]
    #
    # @!attribute [rw] attachment_id
    #   The ID of the route attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource for the route attachment.
    #   @return [String]
    #
    # @!attribute [rw] resource_type
    #   The resource type for the route attachment.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayRouteTableRoute AWS API Documentation
    #
    class TransitGatewayRouteTableRoute < Struct.new(
      :destination_cidr,
      :state,
      :route_origin,
      :prefix_list_id,
      :attachment_id,
      :resource_id,
      :resource_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a VPC attachment.
    #
    # @!attribute [rw] transit_gateway_attachment_id
    #   The ID of the attachment.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] vpc_owner_id
    #   The ID of the Amazon Web Services account that owns the VPC.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the VPC attachment. Note that the `initiating` state
    #   has been deprecated.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets.
    #   @return [Array<String>]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [Time]
    #
    # @!attribute [rw] options
    #   The VPC attachment options.
    #   @return [Types::TransitGatewayVpcAttachmentOptions]
    #
    # @!attribute [rw] tags
    #   The tags for the VPC attachment.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayVpcAttachment AWS API Documentation
    #
    class TransitGatewayVpcAttachment < Struct.new(
      :transit_gateway_attachment_id,
      :transit_gateway_id,
      :vpc_id,
      :vpc_owner_id,
      :state,
      :subnet_ids,
      :creation_time,
      :options,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the VPC attachment options.
    #
    # @!attribute [rw] dns_support
    #   Indicates whether DNS support is enabled.
    #   @return [String]
    #
    # @!attribute [rw] security_group_referencing_support
    #   Enables you to reference a security group across VPCs attached to a
    #   transit gateway to simplify security group management.
    #
    #   This option is enabled by default.
    #
    #   For more information about security group referencing, see [Security
    #   group referencing][1] in the *Amazon Web Services Transit Gateways
    #   Guide*.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#vpc-attachment-security
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_support
    #   Indicates whether IPv6 support is disabled.
    #   @return [String]
    #
    # @!attribute [rw] appliance_mode_support
    #   Indicates whether appliance mode support is enabled.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayVpcAttachmentOptions AWS API Documentation
    #
    class TransitGatewayVpcAttachmentOptions < Struct.new(
      :dns_support,
      :security_group_referencing_support,
      :ipv_6_support,
      :appliance_mode_support)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about an association between a branch network interface
    # with a trunk network interface.
    #
    # @!attribute [rw] association_id
    #   The ID of the association.
    #   @return [String]
    #
    # @!attribute [rw] branch_interface_id
    #   The ID of the branch network interface.
    #   @return [String]
    #
    # @!attribute [rw] trunk_interface_id
    #   The ID of the trunk network interface.
    #   @return [String]
    #
    # @!attribute [rw] interface_protocol
    #   The interface protocol. Valid values are `VLAN` and `GRE`.
    #   @return [String]
    #
    # @!attribute [rw] vlan_id
    #   The ID of the VLAN when you use the VLAN protocol.
    #   @return [Integer]
    #
    # @!attribute [rw] gre_key
    #   The application key when you use the GRE protocol.
    #   @return [Integer]
    #
    # @!attribute [rw] tags
    #   The tags for the trunk interface association.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TrunkInterfaceAssociation AWS API Documentation
    #
    class TrunkInterfaceAssociation < Struct.new(
      :association_id,
      :branch_interface_id,
      :trunk_interface_id,
      :interface_protocol,
      :vlan_id,
      :gre_key,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # The VPN tunnel options.
    #
    # @!attribute [rw] outside_ip_address
    #   The external IP address of the VPN tunnel.
    #   @return [String]
    #
    # @!attribute [rw] tunnel_inside_cidr
    #   The range of inside IPv4 addresses for the tunnel.
    #   @return [String]
    #
    # @!attribute [rw] tunnel_inside_ipv_6_cidr
    #   The range of inside IPv6 addresses for the tunnel.
    #   @return [String]
    #
    # @!attribute [rw] pre_shared_key
    #   The pre-shared key (PSK) to establish initial authentication between
    #   the virtual private gateway and the customer gateway.
    #   @return [String]
    #
    # @!attribute [rw] phase_1_lifetime_seconds
    #   The lifetime for phase 1 of the IKE negotiation, in seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] phase_2_lifetime_seconds
    #   The lifetime for phase 2 of the IKE negotiation, in seconds.
    #   @return [Integer]
    #
    # @!attribute [rw] rekey_margin_time_seconds
    #   The margin time, in seconds, before the phase 2 lifetime expires,
    #   during which the Amazon Web Services side of the VPN connection
    #   performs an IKE rekey.
    #   @return [Integer]
    #
    # @!attribute [rw] rekey_fuzz_percentage
    #   The percentage of the rekey window determined by
    #   `RekeyMarginTimeSeconds` during which the rekey time is randomly
    #   selected.
    #   @return [Integer]
    #
    # @!attribute [rw] replay_window_size
    #   The number of packets in an IKE replay window.
    #   @return [Integer]
    #
    # @!attribute [rw] dpd_timeout_seconds
    #   The number of seconds after which a DPD timeout occurs.
    #   @return [Integer]
    #
    # @!attribute [rw] dpd_timeout_action
    #   The action to take after a DPD timeout occurs.
    #   @return [String]
    #
    # @!attribute [rw] phase_1_encryption_algorithms
    #   The permitted encryption algorithms for the VPN tunnel for phase 1
    #   IKE negotiations.
    #   @return [Array<Types::Phase1EncryptionAlgorithmsListValue>]
    #
    # @!attribute [rw] phase_2_encryption_algorithms
    #   The permitted encryption algorithms for the VPN tunnel for phase 2
    #   IKE negotiations.
    #   @return [Array<Types::Phase2EncryptionAlgorithmsListValue>]
    #
    # @!attribute [rw] phase_1_integrity_algorithms
    #   The permitted integrity algorithms for the VPN tunnel for phase 1
    #   IKE negotiations.
    #   @return [Array<Types::Phase1IntegrityAlgorithmsListValue>]
    #
    # @!attribute [rw] phase_2_integrity_algorithms
    #   The permitted integrity algorithms for the VPN tunnel for phase 2
    #   IKE negotiations.
    #   @return [Array<Types::Phase2IntegrityAlgorithmsListValue>]
    #
    # @!attribute [rw] phase_1_dh_group_numbers
    #   The permitted Diffie-Hellman group numbers for the VPN tunnel for
    #   phase 1 IKE negotiations.
    #   @return [Array<Types::Phase1DHGroupNumbersListValue>]
    #
    # @!attribute [rw] phase_2_dh_group_numbers
    #   The permitted Diffie-Hellman group numbers for the VPN tunnel for
    #   phase 2 IKE negotiations.
    #   @return [Array<Types::Phase2DHGroupNumbersListValue>]
    #
    # @!attribute [rw] ike_versions
    #   The IKE versions that are permitted for the VPN tunnel.
    #   @return [Array<Types::IKEVersionsListValue>]
    #
    # @!attribute [rw] startup_action
    #   The action to take when the establishing the VPN tunnels for a VPN
    #   connection.
    #   @return [String]
    #
    # @!attribute [rw] log_options
    #   Options for logging VPN tunnel activity.
    #   @return [Types::VpnTunnelLogOptions]
    #
    # @!attribute [rw] enable_tunnel_lifecycle_control
    #   Status of tunnel endpoint lifecycle control feature.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TunnelOption AWS API Documentation
    #
    class TunnelOption < Struct.new(
      :outside_ip_address,
      :tunnel_inside_cidr,
      :tunnel_inside_ipv_6_cidr,
      :pre_shared_key,
      :phase_1_lifetime_seconds,
      :phase_2_lifetime_seconds,
      :rekey_margin_time_seconds,
      :rekey_fuzz_percentage,
      :replay_window_size,
      :dpd_timeout_seconds,
      :dpd_timeout_action,
      :phase_1_encryption_algorithms,
      :phase_2_encryption_algorithms,
      :phase_1_integrity_algorithms,
      :phase_2_integrity_algorithms,
      :phase_1_dh_group_numbers,
      :phase_2_dh_group_numbers,
      :ike_versions,
      :startup_action,
      :log_options,
      :enable_tunnel_lifecycle_control)
      SENSITIVE = [:pre_shared_key]
      include Aws::Structure
    end

    # @!attribute [rw] ipv_6_prefixes
    #   The IPv6 prefixes to unassign from the network interface.
    #   @return [Array<String>]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_addresses
    #   The IPv6 addresses to unassign from the network interface.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6AddressesRequest AWS API Documentation
    #
    class UnassignIpv6AddressesRequest < Struct.new(
      :ipv_6_prefixes,
      :network_interface_id,
      :ipv_6_addresses)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] unassigned_ipv_6_addresses
    #   The IPv6 addresses that have been unassigned from the network
    #   interface.
    #   @return [Array<String>]
    #
    # @!attribute [rw] unassigned_ipv_6_prefixes
    #   The IPv6 prefixes that have been unassigned from the network
    #   interface.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignIpv6AddressesResult AWS API Documentation
    #
    class UnassignIpv6AddressesResult < Struct.new(
      :network_interface_id,
      :unassigned_ipv_6_addresses,
      :unassigned_ipv_6_prefixes)
      SENSITIVE = []
      include Aws::Structure
    end

    # Contains the parameters for UnassignPrivateIpAddresses.
    #
    # @!attribute [rw] ipv_4_prefixes
    #   The IPv4 prefixes to unassign from the network interface.
    #   @return [Array<String>]
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_addresses
    #   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.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateIpAddressesRequest AWS API Documentation
    #
    class UnassignPrivateIpAddressesRequest < Struct.new(
      :ipv_4_prefixes,
      :network_interface_id,
      :private_ip_addresses)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] private_ip_addresses
    #   The private IPv4 addresses you want to unassign.
    #   @return [Array<String>]
    #
    # @!attribute [rw] max_drain_duration_seconds
    #   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.
    #   @return [Integer]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateNatGatewayAddressRequest AWS API Documentation
    #
    class UnassignPrivateNatGatewayAddressRequest < Struct.new(
      :nat_gateway_id,
      :private_ip_addresses,
      :max_drain_duration_seconds,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] nat_gateway_id
    #   The ID of the NAT gateway.
    #   @return [String]
    #
    # @!attribute [rw] nat_gateway_addresses
    #   Information about the NAT gateway IP addresses.
    #   @return [Array<Types::NatGatewayAddress>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnassignPrivateNatGatewayAddressResult AWS API Documentation
    #
    class UnassignPrivateNatGatewayAddressResult < Struct.new(
      :nat_gateway_id,
      :nat_gateway_addresses)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot to unlock.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnlockSnapshotRequest AWS API Documentation
    #
    class UnlockSnapshotRequest < Struct.new(
      :snapshot_id,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] snapshot_id
    #   The ID of the snapshot.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnlockSnapshotResult AWS API Documentation
    #
    class UnlockSnapshotResult < Struct.new(
      :snapshot_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_ids
    #   The IDs of the instances.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dry_run
    #   Checks whether you have the required permissions for the operation,
    #   without actually making the request, and provides an error response.
    #   If you have the required permissions, the error response is
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstancesRequest AWS API Documentation
    #
    class UnmonitorInstancesRequest < Struct.new(
      :instance_ids,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] instance_monitorings
    #   The monitoring information.
    #   @return [Array<Types::InstanceMonitoring>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnmonitorInstancesResult AWS API Documentation
    #
    class UnmonitorInstancesResult < Struct.new(
      :instance_monitorings)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the burstable performance instance whose credit option for
    # CPU usage was not modified.
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #   @return [String]
    #
    # @!attribute [rw] error
    #   The applicable error for the burstable performance instance whose
    #   credit option for CPU usage was not modified.
    #   @return [Types::UnsuccessfulInstanceCreditSpecificationItemError]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnsuccessfulInstanceCreditSpecificationItem AWS API Documentation
    #
    class UnsuccessfulInstanceCreditSpecificationItem < Struct.new(
      :instance_id,
      :error)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the error for the burstable performance instance
    # whose credit option for CPU usage was not modified.
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The applicable error message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnsuccessfulInstanceCreditSpecificationItemError AWS API Documentation
    #
    class UnsuccessfulInstanceCreditSpecificationItemError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about items that were not successfully processed in a
    # batch call.
    #
    # @!attribute [rw] error
    #   Information about the error.
    #   @return [Types::UnsuccessfulItemError]
    #
    # @!attribute [rw] resource_id
    #   The ID of the resource.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnsuccessfulItem AWS API Documentation
    #
    class UnsuccessfulItem < Struct.new(
      :error,
      :resource_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the error that occurred. For more information about
    # errors, see [Error codes][1].
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html
    #
    # @!attribute [rw] code
    #   The error code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The error message accompanying the error code.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UnsuccessfulItemError AWS API Documentation
    #
    class UnsuccessfulItemError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_id
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   \[Default VPC\] The name of the security group. You must specify
    #   either the security group ID or the security group name.
    #   @return [String]
    #
    # @!attribute [rw] ip_permissions
    #   The IP permissions for the security group rule. You must specify
    #   either the IP permissions or the description.
    #   @return [Array<Types::IpPermission>]
    #
    # @!attribute [rw] security_group_rule_descriptions
    #   The description for the egress security group rules. You must
    #   specify either the description or the IP permissions.
    #   @return [Array<Types::SecurityGroupRuleDescription>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsEgressRequest AWS API Documentation
    #
    class UpdateSecurityGroupRuleDescriptionsEgressRequest < Struct.new(
      :dry_run,
      :group_id,
      :group_name,
      :ip_permissions,
      :security_group_rule_descriptions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsEgressResult AWS API Documentation
    #
    class UpdateSecurityGroupRuleDescriptionsEgressResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @!attribute [rw] group_id
    #   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.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   \[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.
    #   @return [String]
    #
    # @!attribute [rw] ip_permissions
    #   The IP permissions for the security group rule. You must specify
    #   either IP permissions or a description.
    #   @return [Array<Types::IpPermission>]
    #
    # @!attribute [rw] security_group_rule_descriptions
    #   The description for the ingress security group rules. You must
    #   specify either a description or IP permissions.
    #   @return [Array<Types::SecurityGroupRuleDescription>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsIngressRequest AWS API Documentation
    #
    class UpdateSecurityGroupRuleDescriptionsIngressRequest < Struct.new(
      :dry_run,
      :group_id,
      :group_name,
      :ip_permissions,
      :security_group_rule_descriptions)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] return
    #   Returns `true` if the request succeeds; otherwise, returns an error.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UpdateSecurityGroupRuleDescriptionsIngressResult AWS API Documentation
    #
    class UpdateSecurityGroupRuleDescriptionsIngressResult < Struct.new(
      :return)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Amazon S3 bucket for the disk image.
    #
    # @!attribute [rw] s3_bucket
    #   The name of the Amazon S3 bucket where the disk image is located.
    #   @return [String]
    #
    # @!attribute [rw] s3_key
    #   The file name of the disk image.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UserBucket AWS API Documentation
    #
    class UserBucket < Struct.new(
      :s3_bucket,
      :s3_key)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the Amazon S3 bucket for the disk image.
    #
    # @!attribute [rw] s3_bucket
    #   The Amazon S3 bucket from which the disk image was created.
    #   @return [String]
    #
    # @!attribute [rw] s3_key
    #   The file name of the disk image.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UserBucketDetails AWS API Documentation
    #
    class UserBucketDetails < Struct.new(
      :s3_bucket,
      :s3_key)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the user data for an instance.
    #
    # @!attribute [rw] data
    #   The user data. If you are using an Amazon Web Services SDK or
    #   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.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UserData AWS API Documentation
    #
    class UserData < Struct.new(
      :data)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a security group and Amazon Web Services account ID pair.
    #
    # @!attribute [rw] description
    #   A description for the security group rule that references this user
    #   ID group pair.
    #
    #   Constraints: Up to 255 characters in length. Allowed characters are
    #   a-z, A-Z, 0-9, spaces, and .\_-:/()#,@\[\]+=;\{}!$*
    #   @return [String]
    #
    # @!attribute [rw] user_id
    #   The ID of an Amazon Web Services account.
    #
    #   For a referenced security group in another VPC, the account ID of
    #   the referenced security group is returned in the response. If the
    #   referenced security group is deleted, this value is not returned.
    #   @return [String]
    #
    # @!attribute [rw] group_name
    #   \[Default VPC\] The name of the security group. For a security group
    #   in a nondefault VPC, use the security group ID.
    #
    #   For a referenced security group in another VPC, this value is not
    #   returned if the referenced security group is deleted.
    #   @return [String]
    #
    # @!attribute [rw] group_id
    #   The ID of the security group.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC for the referenced security group, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of the VPC peering connection, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] peering_status
    #   The status of a VPC peering connection, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/UserIdGroupPair AWS API Documentation
    #
    class UserIdGroupPair < Struct.new(
      :description,
      :user_id,
      :group_name,
      :group_id,
      :vpc_id,
      :vpc_peering_connection_id,
      :peering_status)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum number of vCPUs.
    #
    # @!attribute [rw] min
    #   The minimum number of vCPUs. If the value is `0`, there is no
    #   minimum limit.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum number of vCPUs. If this parameter is not specified,
    #   there is no maximum limit.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VCpuCountRange AWS API Documentation
    #
    class VCpuCountRange < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # The minimum and maximum number of vCPUs.
    #
    # @!attribute [rw] min
    #   The minimum number of vCPUs. To specify no minimum limit, specify
    #   `0`.
    #   @return [Integer]
    #
    # @!attribute [rw] max
    #   The maximum number of vCPUs. To specify no maximum limit, omit this
    #   parameter.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VCpuCountRangeRequest AWS API Documentation
    #
    class VCpuCountRangeRequest < Struct.new(
      :min,
      :max)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the vCPU configurations for the instance type.
    #
    # @!attribute [rw] default_v_cpus
    #   The default number of vCPUs for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] default_cores
    #   The default number of cores for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] default_threads_per_core
    #   The default number of threads per core for the instance type.
    #   @return [Integer]
    #
    # @!attribute [rw] valid_cores
    #   The valid number of cores that can be configured for the instance
    #   type.
    #   @return [Array<Integer>]
    #
    # @!attribute [rw] valid_threads_per_core
    #   The valid number of threads per core that can be configured for the
    #   instance type.
    #   @return [Array<Integer>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VCpuInfo AWS API Documentation
    #
    class VCpuInfo < Struct.new(
      :default_v_cpus,
      :default_cores,
      :default_threads_per_core,
      :valid_cores,
      :valid_threads_per_core)
      SENSITIVE = []
      include Aws::Structure
    end

    # The error code and error message that is returned for a parameter or
    # parameter combination that is not valid when a new launch template or
    # new version of a launch template is created.
    #
    # @!attribute [rw] code
    #   The error code that indicates why the parameter or parameter
    #   combination is not valid. For more information about error codes,
    #   see [Error codes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The error message that describes why the parameter or parameter
    #   combination is not valid. For more information about error messages,
    #   see [Error codes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ValidationError AWS API Documentation
    #
    class ValidationError < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # The error codes and error messages that are returned for the
    # parameters or parameter combinations that are not valid when a new
    # launch template or new version of a launch template is created.
    #
    # @!attribute [rw] errors
    #   The error codes and error messages.
    #   @return [Array<Types::ValidationError>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/ValidationWarning AWS API Documentation
    #
    class ValidationWarning < Struct.new(
      :errors)
      SENSITIVE = []
      include Aws::Structure
    end

    # An Amazon Web Services Verified Access endpoint specifies the
    # application that Amazon Web Services Verified Access provides access
    # to. It must be attached to an Amazon Web Services Verified Access
    # group. An Amazon Web Services Verified Access endpoint must also have
    # an attached access policy before you attached it to a group.
    #
    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Amazon Web Services Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_group_id
    #   The ID of the Amazon Web Services Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_endpoint_id
    #   The ID of the Amazon Web Services Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] application_domain
    #   The DNS name for users to reach your application.
    #   @return [String]
    #
    # @!attribute [rw] endpoint_type
    #   The type of Amazon Web Services Verified Access endpoint. Incoming
    #   application requests will be sent to an IP address, load balancer or
    #   a network interface depending on the endpoint type specified.
    #   @return [String]
    #
    # @!attribute [rw] attachment_type
    #   The type of attachment used to provide connectivity between the
    #   Amazon Web Services Verified Access endpoint and the application.
    #   @return [String]
    #
    # @!attribute [rw] domain_certificate_arn
    #   The ARN of a public TLS/SSL certificate imported into or created
    #   with ACM.
    #   @return [String]
    #
    # @!attribute [rw] endpoint_domain
    #   A DNS name that is generated for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] device_validation_domain
    #   Returned if endpoint has a device trust provider attached.
    #   @return [String]
    #
    # @!attribute [rw] security_group_ids
    #   The IDs of the security groups for the endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] load_balancer_options
    #   The load balancer details if creating the Amazon Web Services
    #   Verified Access endpoint as `load-balancer`type.
    #   @return [Types::VerifiedAccessEndpointLoadBalancerOptions]
    #
    # @!attribute [rw] network_interface_options
    #   The options for network-interface type endpoint.
    #   @return [Types::VerifiedAccessEndpointEniOptions]
    #
    # @!attribute [rw] status
    #   The endpoint status.
    #   @return [Types::VerifiedAccessEndpointStatus]
    #
    # @!attribute [rw] description
    #   A description for the Amazon Web Services Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [String]
    #
    # @!attribute [rw] last_updated_time
    #   The last updated time.
    #   @return [String]
    #
    # @!attribute [rw] deletion_time
    #   The deletion time.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] sse_specification
    #   The options in use for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationResponse]
    #
    # @!attribute [rw] rds_options
    #   The options for an RDS endpoint.
    #   @return [Types::VerifiedAccessEndpointRdsOptions]
    #
    # @!attribute [rw] cidr_options
    #   The options for a CIDR endpoint.
    #   @return [Types::VerifiedAccessEndpointCidrOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessEndpoint AWS API Documentation
    #
    class VerifiedAccessEndpoint < Struct.new(
      :verified_access_instance_id,
      :verified_access_group_id,
      :verified_access_endpoint_id,
      :application_domain,
      :endpoint_type,
      :attachment_type,
      :domain_certificate_arn,
      :endpoint_domain,
      :device_validation_domain,
      :security_group_ids,
      :load_balancer_options,
      :network_interface_options,
      :status,
      :description,
      :creation_time,
      :last_updated_time,
      :deletion_time,
      :tags,
      :sse_specification,
      :rds_options,
      :cidr_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the CIDR options for a Verified Access endpoint.
    #
    # @!attribute [rw] cidr
    #   The CIDR.
    #   @return [String]
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::VerifiedAccessEndpointPortRange>]
    #
    # @!attribute [rw] protocol
    #   The protocol.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessEndpointCidrOptions AWS API Documentation
    #
    class VerifiedAccessEndpointCidrOptions < Struct.new(
      :cidr,
      :port_ranges,
      :protocol,
      :subnet_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for a network-interface type endpoint.
    #
    # @!attribute [rw] network_interface_id
    #   The ID of the network interface.
    #   @return [String]
    #
    # @!attribute [rw] protocol
    #   The IP protocol.
    #   @return [String]
    #
    # @!attribute [rw] port
    #   The IP port number.
    #   @return [Integer]
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::VerifiedAccessEndpointPortRange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessEndpointEniOptions AWS API Documentation
    #
    class VerifiedAccessEndpointEniOptions < Struct.new(
      :network_interface_id,
      :protocol,
      :port,
      :port_ranges)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a load balancer when creating an Amazon Web Services
    # Verified Access endpoint using the `load-balancer` type.
    #
    # @!attribute [rw] protocol
    #   The IP protocol.
    #   @return [String]
    #
    # @!attribute [rw] port
    #   The IP port number.
    #   @return [Integer]
    #
    # @!attribute [rw] load_balancer_arn
    #   The ARN of the load balancer.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets.
    #   @return [Array<String>]
    #
    # @!attribute [rw] port_ranges
    #   The port ranges.
    #   @return [Array<Types::VerifiedAccessEndpointPortRange>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessEndpointLoadBalancerOptions AWS API Documentation
    #
    class VerifiedAccessEndpointLoadBalancerOptions < Struct.new(
      :protocol,
      :port,
      :load_balancer_arn,
      :subnet_ids,
      :port_ranges)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a port range.
    #
    # @!attribute [rw] from_port
    #   The start of the port range.
    #   @return [Integer]
    #
    # @!attribute [rw] to_port
    #   The end of the port range.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessEndpointPortRange AWS API Documentation
    #
    class VerifiedAccessEndpointPortRange < Struct.new(
      :from_port,
      :to_port)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the RDS options for a Verified Access endpoint.
    #
    # @!attribute [rw] protocol
    #   The protocol.
    #   @return [String]
    #
    # @!attribute [rw] port
    #   The port.
    #   @return [Integer]
    #
    # @!attribute [rw] rds_db_instance_arn
    #   The ARN of the RDS instance.
    #   @return [String]
    #
    # @!attribute [rw] rds_db_cluster_arn
    #   The ARN of the DB cluster.
    #   @return [String]
    #
    # @!attribute [rw] rds_db_proxy_arn
    #   The ARN of the RDS proxy.
    #   @return [String]
    #
    # @!attribute [rw] rds_endpoint
    #   The RDS endpoint.
    #   @return [String]
    #
    # @!attribute [rw] subnet_ids
    #   The IDs of the subnets.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessEndpointRdsOptions AWS API Documentation
    #
    class VerifiedAccessEndpointRdsOptions < Struct.new(
      :protocol,
      :port,
      :rds_db_instance_arn,
      :rds_db_cluster_arn,
      :rds_db_proxy_arn,
      :rds_endpoint,
      :subnet_ids)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the status of a Verified Access endpoint.
    #
    # @!attribute [rw] code
    #   The status code of the Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The status message of the Verified Access endpoint.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessEndpointStatus AWS API Documentation
    #
    class VerifiedAccessEndpointStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the targets for the specified Verified Access endpoint.
    #
    # @!attribute [rw] verified_access_endpoint_id
    #   The ID of the Verified Access endpoint.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_endpoint_target_ip_address
    #   The IP address of the target.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_endpoint_target_dns
    #   The DNS name of the target.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessEndpointTarget AWS API Documentation
    #
    class VerifiedAccessEndpointTarget < Struct.new(
      :verified_access_endpoint_id,
      :verified_access_endpoint_target_ip_address,
      :verified_access_endpoint_target_dns)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Verified Access group.
    #
    # @!attribute [rw] verified_access_group_id
    #   The ID of the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Amazon Web Services Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the Amazon Web Services Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] owner
    #   The Amazon Web Services account number that owns the group.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_group_arn
    #   The ARN of the Verified Access group.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [String]
    #
    # @!attribute [rw] last_updated_time
    #   The last updated time.
    #   @return [String]
    #
    # @!attribute [rw] deletion_time
    #   The deletion time.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] sse_specification
    #   The options in use for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationResponse]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessGroup AWS API Documentation
    #
    class VerifiedAccessGroup < Struct.new(
      :verified_access_group_id,
      :verified_access_instance_id,
      :description,
      :owner,
      :verified_access_group_arn,
      :creation_time,
      :last_updated_time,
      :deletion_time,
      :tags,
      :sse_specification)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Verified Access instance.
    #
    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Amazon Web Services Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the Amazon Web Services Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] verified_access_trust_providers
    #   The IDs of the Amazon Web Services Verified Access trust providers.
    #   @return [Array<Types::VerifiedAccessTrustProviderCondensed>]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [String]
    #
    # @!attribute [rw] last_updated_time
    #   The last updated time.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] fips_enabled
    #   Indicates whether support for Federal Information Processing
    #   Standards (FIPS) is enabled on the instance.
    #   @return [Boolean]
    #
    # @!attribute [rw] cidr_endpoints_custom_sub_domain
    #   The custom subdomain.
    #   @return [Types::VerifiedAccessInstanceCustomSubDomain]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessInstance AWS API Documentation
    #
    class VerifiedAccessInstance < Struct.new(
      :verified_access_instance_id,
      :description,
      :verified_access_trust_providers,
      :creation_time,
      :last_updated_time,
      :tags,
      :fips_enabled,
      :cidr_endpoints_custom_sub_domain)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a custom subdomain for a network CIDR endpoint for Verified
    # Access.
    #
    # @!attribute [rw] sub_domain
    #   The subdomain.
    #   @return [String]
    #
    # @!attribute [rw] nameservers
    #   The name servers.
    #   @return [Array<String>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessInstanceCustomSubDomain AWS API Documentation
    #
    class VerifiedAccessInstanceCustomSubDomain < Struct.new(
      :sub_domain,
      :nameservers)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes logging options for an Amazon Web Services Verified Access
    # instance.
    #
    # @!attribute [rw] verified_access_instance_id
    #   The ID of the Amazon Web Services Verified Access instance.
    #   @return [String]
    #
    # @!attribute [rw] access_logs
    #   Details about the logging options.
    #   @return [Types::VerifiedAccessLogs]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessInstanceLoggingConfiguration AWS API Documentation
    #
    class VerifiedAccessInstanceLoggingConfiguration < Struct.new(
      :verified_access_instance_id,
      :access_logs)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a set of routes.
    #
    # @!attribute [rw] config
    #   The base64-encoded Open VPN client configuration.
    #   @return [String]
    #
    # @!attribute [rw] routes
    #   The routes.
    #   @return [Array<Types::VerifiedAccessInstanceOpenVpnClientConfigurationRoute>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessInstanceOpenVpnClientConfiguration AWS API Documentation
    #
    class VerifiedAccessInstanceOpenVpnClientConfiguration < Struct.new(
      :config,
      :routes)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a route.
    #
    # @!attribute [rw] cidr
    #   The CIDR block.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessInstanceOpenVpnClientConfigurationRoute AWS API Documentation
    #
    class VerifiedAccessInstanceOpenVpnClientConfigurationRoute < Struct.new(
      :cidr)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the trust provider.
    #
    # @!attribute [rw] type
    #   The trust provider type.
    #   @return [String]
    #
    # @!attribute [rw] scopes
    #   The set of user claims to be requested from the IdP.
    #   @return [String]
    #
    # @!attribute [rw] issuer
    #   The OIDC issuer identifier of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] authorization_endpoint
    #   The authorization endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] public_signing_key_endpoint
    #   The public signing key endpoint.
    #   @return [String]
    #
    # @!attribute [rw] token_endpoint
    #   The token endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] user_info_endpoint
    #   The user info endpoint of the IdP.
    #   @return [String]
    #
    # @!attribute [rw] client_id
    #   The OAuth 2.0 client identifier.
    #   @return [String]
    #
    # @!attribute [rw] client_secret
    #   The OAuth 2.0 client secret.
    #   @return [String]
    #
    # @!attribute [rw] pkce_enabled
    #   Indicates whether Proof of Key Code Exchange (PKCE) is enabled.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessInstanceUserTrustProviderClientConfiguration AWS API Documentation
    #
    class VerifiedAccessInstanceUserTrustProviderClientConfiguration < Struct.new(
      :type,
      :scopes,
      :issuer,
      :authorization_endpoint,
      :public_signing_key_endpoint,
      :token_endpoint,
      :user_info_endpoint,
      :client_id,
      :client_secret,
      :pkce_enabled)
      SENSITIVE = [:client_secret]
      include Aws::Structure
    end

    # Options for CloudWatch Logs as a logging destination.
    #
    # @!attribute [rw] enabled
    #   Indicates whether logging is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] delivery_status
    #   The delivery status for access logs.
    #   @return [Types::VerifiedAccessLogDeliveryStatus]
    #
    # @!attribute [rw] log_group
    #   The ID of the CloudWatch Logs log group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessLogCloudWatchLogsDestination AWS API Documentation
    #
    class VerifiedAccessLogCloudWatchLogsDestination < Struct.new(
      :enabled,
      :delivery_status,
      :log_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for CloudWatch Logs as a logging destination.
    #
    # @!attribute [rw] enabled
    #   Indicates whether logging is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] log_group
    #   The ID of the CloudWatch Logs log group.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessLogCloudWatchLogsDestinationOptions AWS API Documentation
    #
    class VerifiedAccessLogCloudWatchLogsDestinationOptions < Struct.new(
      :enabled,
      :log_group)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a log delivery status.
    #
    # @!attribute [rw] code
    #   The status code.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   The status message.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessLogDeliveryStatus AWS API Documentation
    #
    class VerifiedAccessLogDeliveryStatus < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for Kinesis as a logging destination.
    #
    # @!attribute [rw] enabled
    #   Indicates whether logging is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] delivery_status
    #   The delivery status.
    #   @return [Types::VerifiedAccessLogDeliveryStatus]
    #
    # @!attribute [rw] delivery_stream
    #   The ID of the delivery stream.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessLogKinesisDataFirehoseDestination AWS API Documentation
    #
    class VerifiedAccessLogKinesisDataFirehoseDestination < Struct.new(
      :enabled,
      :delivery_status,
      :delivery_stream)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes Amazon Kinesis Data Firehose logging options.
    #
    # @!attribute [rw] enabled
    #   Indicates whether logging is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] delivery_stream
    #   The ID of the delivery stream.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessLogKinesisDataFirehoseDestinationOptions AWS API Documentation
    #
    class VerifiedAccessLogKinesisDataFirehoseDestinationOptions < Struct.new(
      :enabled,
      :delivery_stream)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for Verified Access logs.
    #
    # @!attribute [rw] s3
    #   Sends Verified Access logs to Amazon S3.
    #   @return [Types::VerifiedAccessLogS3DestinationOptions]
    #
    # @!attribute [rw] cloud_watch_logs
    #   Sends Verified Access logs to CloudWatch Logs.
    #   @return [Types::VerifiedAccessLogCloudWatchLogsDestinationOptions]
    #
    # @!attribute [rw] kinesis_data_firehose
    #   Sends Verified Access logs to Kinesis.
    #   @return [Types::VerifiedAccessLogKinesisDataFirehoseDestinationOptions]
    #
    # @!attribute [rw] log_version
    #   The logging version.
    #
    #   Valid values: `ocsf-0.1` \| `ocsf-1.0.0-rc.2`
    #   @return [String]
    #
    # @!attribute [rw] include_trust_context
    #   Indicates whether to include trust data sent by trust providers in
    #   the logs.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessLogOptions AWS API Documentation
    #
    class VerifiedAccessLogOptions < Struct.new(
      :s3,
      :cloud_watch_logs,
      :kinesis_data_firehose,
      :log_version,
      :include_trust_context)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for Amazon S3 as a logging destination.
    #
    # @!attribute [rw] enabled
    #   Indicates whether logging is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] delivery_status
    #   The delivery status.
    #   @return [Types::VerifiedAccessLogDeliveryStatus]
    #
    # @!attribute [rw] bucket_name
    #   The bucket name.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   The bucket prefix.
    #   @return [String]
    #
    # @!attribute [rw] bucket_owner
    #   The Amazon Web Services account number that owns the bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessLogS3Destination AWS API Documentation
    #
    class VerifiedAccessLogS3Destination < Struct.new(
      :enabled,
      :delivery_status,
      :bucket_name,
      :prefix,
      :bucket_owner)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for Amazon S3 as a logging destination.
    #
    # @!attribute [rw] enabled
    #   Indicates whether logging is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] bucket_name
    #   The bucket name.
    #   @return [String]
    #
    # @!attribute [rw] prefix
    #   The bucket prefix.
    #   @return [String]
    #
    # @!attribute [rw] bucket_owner
    #   The ID of the Amazon Web Services account that owns the Amazon S3
    #   bucket.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessLogS3DestinationOptions AWS API Documentation
    #
    class VerifiedAccessLogS3DestinationOptions < Struct.new(
      :enabled,
      :bucket_name,
      :prefix,
      :bucket_owner)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the options for Verified Access logs.
    #
    # @!attribute [rw] s3
    #   Amazon S3 logging options.
    #   @return [Types::VerifiedAccessLogS3Destination]
    #
    # @!attribute [rw] cloud_watch_logs
    #   CloudWatch Logs logging destination.
    #   @return [Types::VerifiedAccessLogCloudWatchLogsDestination]
    #
    # @!attribute [rw] kinesis_data_firehose
    #   Kinesis logging destination.
    #   @return [Types::VerifiedAccessLogKinesisDataFirehoseDestination]
    #
    # @!attribute [rw] log_version
    #   The log version.
    #   @return [String]
    #
    # @!attribute [rw] include_trust_context
    #   Indicates whether trust data is included in the logs.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessLogs AWS API Documentation
    #
    class VerifiedAccessLogs < Struct.new(
      :s3,
      :cloud_watch_logs,
      :kinesis_data_firehose,
      :log_version,
      :include_trust_context)
      SENSITIVE = []
      include Aws::Structure
    end

    # Verified Access provides server side encryption by default to data at
    # rest using Amazon Web Services-owned KMS keys. You also have the
    # option of using customer managed KMS keys, which can be specified
    # using the options below.
    #
    # @!attribute [rw] customer_managed_key_enabled
    #   Enable or disable the use of customer managed KMS keys for server
    #   side encryption.
    #
    #   Valid values: `True` \| `False`
    #   @return [Boolean]
    #
    # @!attribute [rw] kms_key_arn
    #   The ARN of the KMS key.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessSseSpecificationRequest AWS API Documentation
    #
    class VerifiedAccessSseSpecificationRequest < Struct.new(
      :customer_managed_key_enabled,
      :kms_key_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # The options in use for server side encryption.
    #
    # @!attribute [rw] customer_managed_key_enabled
    #   Indicates whether customer managed KMS keys are in use for server
    #   side encryption.
    #
    #   Valid values: `True` \| `False`
    #   @return [Boolean]
    #
    # @!attribute [rw] kms_key_arn
    #   The ARN of the KMS key.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessSseSpecificationResponse AWS API Documentation
    #
    class VerifiedAccessSseSpecificationResponse < Struct.new(
      :customer_managed_key_enabled,
      :kms_key_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a Verified Access trust provider.
    #
    # @!attribute [rw] verified_access_trust_provider_id
    #   The ID of the Amazon Web Services Verified Access trust provider.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description for the Amazon Web Services Verified Access trust
    #   provider.
    #   @return [String]
    #
    # @!attribute [rw] trust_provider_type
    #   The type of Verified Access trust provider.
    #   @return [String]
    #
    # @!attribute [rw] user_trust_provider_type
    #   The type of user-based trust provider.
    #   @return [String]
    #
    # @!attribute [rw] device_trust_provider_type
    #   The type of device-based trust provider.
    #   @return [String]
    #
    # @!attribute [rw] oidc_options
    #   The options for an OpenID Connect-compatible user-identity trust
    #   provider.
    #   @return [Types::OidcOptions]
    #
    # @!attribute [rw] device_options
    #   The options for device-identity trust provider.
    #   @return [Types::DeviceOptions]
    #
    # @!attribute [rw] policy_reference_name
    #   The identifier to be used when working with policy rules.
    #   @return [String]
    #
    # @!attribute [rw] creation_time
    #   The creation time.
    #   @return [String]
    #
    # @!attribute [rw] last_updated_time
    #   The last updated time.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] sse_specification
    #   The options in use for server side encryption.
    #   @return [Types::VerifiedAccessSseSpecificationResponse]
    #
    # @!attribute [rw] native_application_oidc_options
    #   The OpenID Connect (OIDC) options.
    #   @return [Types::NativeApplicationOidcOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessTrustProvider AWS API Documentation
    #
    class VerifiedAccessTrustProvider < Struct.new(
      :verified_access_trust_provider_id,
      :description,
      :trust_provider_type,
      :user_trust_provider_type,
      :device_trust_provider_type,
      :oidc_options,
      :device_options,
      :policy_reference_name,
      :creation_time,
      :last_updated_time,
      :tags,
      :sse_specification,
      :native_application_oidc_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # Condensed information about a trust provider.
    #
    # @!attribute [rw] verified_access_trust_provider_id
    #   The ID of the trust provider.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   The description of trust provider.
    #   @return [String]
    #
    # @!attribute [rw] trust_provider_type
    #   The type of trust provider (user- or device-based).
    #   @return [String]
    #
    # @!attribute [rw] user_trust_provider_type
    #   The type of user-based trust provider.
    #   @return [String]
    #
    # @!attribute [rw] device_trust_provider_type
    #   The type of device-based trust provider.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VerifiedAccessTrustProviderCondensed AWS API Documentation
    #
    class VerifiedAccessTrustProviderCondensed < Struct.new(
      :verified_access_trust_provider_id,
      :description,
      :trust_provider_type,
      :user_trust_provider_type,
      :device_trust_provider_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes telemetry for a VPN tunnel.
    #
    # @!attribute [rw] accepted_route_count
    #   The number of accepted routes.
    #   @return [Integer]
    #
    # @!attribute [rw] last_status_change
    #   The date and time of the last change in status. This field is
    #   updated when changes in IKE (Phase 1), IPSec (Phase 2), or BGP
    #   status are detected.
    #   @return [Time]
    #
    # @!attribute [rw] outside_ip_address
    #   The Internet-routable IP address of the virtual private gateway's
    #   outside interface.
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The status of the VPN tunnel.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   If an error occurs, a description of the error.
    #   @return [String]
    #
    # @!attribute [rw] certificate_arn
    #   The Amazon Resource Name (ARN) of the VPN tunnel endpoint
    #   certificate.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VgwTelemetry AWS API Documentation
    #
    class VgwTelemetry < Struct.new(
      :accepted_route_count,
      :last_status_change,
      :outside_ip_address,
      :status,
      :status_message,
      :certificate_arn)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a volume.
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone for the volume.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost.
    #   @return [String]
    #
    # @!attribute [rw] iops
    #   The number of I/O operations per second (IOPS). For `gp3`, `io1`,
    #   and `io2` volumes, this represents the number of IOPS that are
    #   provisioned for the volume. For `gp2` volumes, this represents the
    #   baseline performance of the volume and the rate at which the volume
    #   accumulates I/O credits for bursting.
    #   @return [Integer]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the volume.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] volume_type
    #   The volume type.
    #   @return [String]
    #
    # @!attribute [rw] fast_restored
    #   <note markdown="1"> This parameter is not returned by CreateVolume.
    #
    #    </note>
    #
    #   Indicates whether the volume was created using fast snapshot
    #   restore.
    #   @return [Boolean]
    #
    # @!attribute [rw] multi_attach_enabled
    #   Indicates whether Amazon EBS Multi-Attach is enabled.
    #   @return [Boolean]
    #
    # @!attribute [rw] throughput
    #   The throughput that the volume supports, in MiB/s.
    #   @return [Integer]
    #
    # @!attribute [rw] sse_type
    #   <note markdown="1"> This parameter is not returned by CreateVolume.
    #
    #    </note>
    #
    #   Reserved for future use.
    #   @return [String]
    #
    # @!attribute [rw] operator
    #   The service provider that manages the volume.
    #   @return [Types::OperatorResponse]
    #
    # @!attribute [rw] volume_initialization_rate
    #   The Amazon EBS Provisioned Rate for Volume Initialization (volume
    #   initialization rate) specified for the volume during creation, in
    #   MiB/s. If no volume initialization rate was specified, the value is
    #   `null`.
    #   @return [Integer]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @!attribute [rw] size
    #   The size of the volume, in GiBs.
    #   @return [Integer]
    #
    # @!attribute [rw] snapshot_id
    #   The snapshot from which the volume was created, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone for the volume.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The volume state.
    #   @return [String]
    #
    # @!attribute [rw] create_time
    #   The time stamp when volume creation was initiated.
    #   @return [Time]
    #
    # @!attribute [rw] attachments
    #   <note markdown="1"> This parameter is not returned by CreateVolume.
    #
    #    </note>
    #
    #   Information about the volume attachments.
    #   @return [Array<Types::VolumeAttachment>]
    #
    # @!attribute [rw] encrypted
    #   Indicates whether the volume is encrypted.
    #   @return [Boolean]
    #
    # @!attribute [rw] kms_key_id
    #   The Amazon Resource Name (ARN) of the KMS key that was used to
    #   protect the volume encryption key for the volume.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Volume AWS API Documentation
    #
    class Volume < Struct.new(
      :availability_zone_id,
      :outpost_arn,
      :iops,
      :tags,
      :volume_type,
      :fast_restored,
      :multi_attach_enabled,
      :throughput,
      :sse_type,
      :operator,
      :volume_initialization_rate,
      :volume_id,
      :size,
      :snapshot_id,
      :availability_zone,
      :state,
      :create_time,
      :attachments,
      :encrypted,
      :kms_key_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes volume attachment details.
    #
    # @!attribute [rw] delete_on_termination
    #   Indicates whether the EBS volume is deleted on instance termination.
    #   @return [Boolean]
    #
    # @!attribute [rw] associated_resource
    #   The ARN of the Amazon Web Services-managed resource to which the
    #   volume is attached.
    #   @return [String]
    #
    # @!attribute [rw] instance_owning_service
    #   The service principal of the Amazon Web Services service that owns
    #   the underlying resource to which the volume is attached.
    #
    #   This parameter is returned only for volumes that are attached to
    #   Amazon Web Services-managed resources.
    #   @return [String]
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance.
    #
    #   If the volume is attached to an Amazon Web Services-managed
    #   resource, this parameter returns `null`.
    #   @return [String]
    #
    # @!attribute [rw] device
    #   The device name.
    #
    #   If the volume is attached to an Amazon Web Services-managed
    #   resource, this parameter returns `null`.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The attachment state of the volume.
    #   @return [String]
    #
    # @!attribute [rw] attach_time
    #   The time stamp when the attachment initiated.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeAttachment AWS API Documentation
    #
    class VolumeAttachment < Struct.new(
      :delete_on_termination,
      :associated_resource,
      :instance_owning_service,
      :volume_id,
      :instance_id,
      :device,
      :state,
      :attach_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an EBS volume.
    #
    # @!attribute [rw] size
    #   The size of the volume, in GiB.
    #   @return [Integer]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeDetail AWS API Documentation
    #
    class VolumeDetail < Struct.new(
      :size)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the modification status of an EBS volume.
    #
    # @!attribute [rw] volume_id
    #   The ID of the volume.
    #   @return [String]
    #
    # @!attribute [rw] modification_state
    #   The current modification state.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   A status message about the modification progress or failure.
    #   @return [String]
    #
    # @!attribute [rw] target_size
    #   The target size of the volume, in GiB.
    #   @return [Integer]
    #
    # @!attribute [rw] target_iops
    #   The target IOPS rate of the volume.
    #   @return [Integer]
    #
    # @!attribute [rw] target_volume_type
    #   The target EBS volume type of the volume.
    #   @return [String]
    #
    # @!attribute [rw] target_throughput
    #   The target throughput of the volume, in MiB/s.
    #   @return [Integer]
    #
    # @!attribute [rw] target_multi_attach_enabled
    #   The target setting for Amazon EBS Multi-Attach.
    #   @return [Boolean]
    #
    # @!attribute [rw] original_size
    #   The original size of the volume, in GiB.
    #   @return [Integer]
    #
    # @!attribute [rw] original_iops
    #   The original IOPS rate of the volume.
    #   @return [Integer]
    #
    # @!attribute [rw] original_volume_type
    #   The original EBS volume type of the volume.
    #   @return [String]
    #
    # @!attribute [rw] original_throughput
    #   The original throughput of the volume, in MiB/s.
    #   @return [Integer]
    #
    # @!attribute [rw] original_multi_attach_enabled
    #   The original setting for Amazon EBS Multi-Attach.
    #   @return [Boolean]
    #
    # @!attribute [rw] progress
    #   The modification progress, from 0 to 100 percent complete.
    #   @return [Integer]
    #
    # @!attribute [rw] start_time
    #   The modification start time.
    #   @return [Time]
    #
    # @!attribute [rw] end_time
    #   The modification completion or failure time.
    #   @return [Time]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeModification AWS API Documentation
    #
    class VolumeModification < Struct.new(
      :volume_id,
      :modification_state,
      :status_message,
      :target_size,
      :target_iops,
      :target_volume_type,
      :target_throughput,
      :target_multi_attach_enabled,
      :original_size,
      :original_iops,
      :original_volume_type,
      :original_throughput,
      :original_multi_attach_enabled,
      :progress,
      :start_time,
      :end_time)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a volume status operation code.
    #
    # @!attribute [rw] code
    #   The code identifying the operation, for example, `enable-volume-io`.
    #   @return [String]
    #
    # @!attribute [rw] description
    #   A description of the operation.
    #   @return [String]
    #
    # @!attribute [rw] event_id
    #   The ID of the event associated with this operation.
    #   @return [String]
    #
    # @!attribute [rw] event_type
    #   The event type associated with this operation.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusAction AWS API Documentation
    #
    class VolumeStatusAction < Struct.new(
      :code,
      :description,
      :event_id,
      :event_type)
      SENSITIVE = []
      include Aws::Structure
    end

    # Information about the instances to which the volume is attached.
    #
    # @!attribute [rw] io_performance
    #   The maximum IOPS supported by the attached instance.
    #   @return [String]
    #
    # @!attribute [rw] instance_id
    #   The ID of the attached instance.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusAttachmentStatus AWS API Documentation
    #
    class VolumeStatusAttachmentStatus < Struct.new(
      :io_performance,
      :instance_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a volume status.
    #
    # @!attribute [rw] name
    #   The name of the volume status.
    #
    #   * `io-enabled` - Indicates the volume I/O status. For more
    #     information, see [Amazon EBS volume status checks][1].
    #
    #   * `io-performance` - Indicates the volume performance status. For
    #     more information, see [Amazon EBS volume status checks][1].
    #
    #   * `initialization-state` - Indicates the status of the volume
    #     initialization process. For more information, see [Initialize
    #     Amazon EBS volumes][2].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-checks.html
    #   [2]: https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html
    #   @return [String]
    #
    # @!attribute [rw] status
    #   The intended status of the volume status.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusDetails AWS API Documentation
    #
    class VolumeStatusDetails < Struct.new(
      :name,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a volume status event.
    #
    # @!attribute [rw] description
    #   A description of the event.
    #   @return [String]
    #
    # @!attribute [rw] event_id
    #   The ID of this event.
    #   @return [String]
    #
    # @!attribute [rw] event_type
    #   The type of this event.
    #   @return [String]
    #
    # @!attribute [rw] not_after
    #   The latest end time of the event.
    #   @return [Time]
    #
    # @!attribute [rw] not_before
    #   The earliest start time of the event.
    #   @return [Time]
    #
    # @!attribute [rw] instance_id
    #   The ID of the instance associated with the event.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusEvent AWS API Documentation
    #
    class VolumeStatusEvent < Struct.new(
      :description,
      :event_id,
      :event_type,
      :not_after,
      :not_before,
      :instance_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the status of a volume.
    #
    # @!attribute [rw] details
    #   The details of the volume status.
    #   @return [Array<Types::VolumeStatusDetails>]
    #
    # @!attribute [rw] status
    #   The status of the volume.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusInfo AWS API Documentation
    #
    class VolumeStatusInfo < Struct.new(
      :details,
      :status)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the volume status.
    #
    # @!attribute [rw] actions
    #   The details of the operation.
    #   @return [Array<Types::VolumeStatusAction>]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone of the volume.
    #   @return [String]
    #
    # @!attribute [rw] outpost_arn
    #   The Amazon Resource Name (ARN) of the Outpost.
    #   @return [String]
    #
    # @!attribute [rw] events
    #   A list of events associated with the volume.
    #   @return [Array<Types::VolumeStatusEvent>]
    #
    # @!attribute [rw] volume_id
    #   The volume ID.
    #   @return [String]
    #
    # @!attribute [rw] volume_status
    #   The volume status.
    #   @return [Types::VolumeStatusInfo]
    #
    # @!attribute [rw] attachment_statuses
    #   Information about the instances to which the volume is attached.
    #   @return [Array<Types::VolumeStatusAttachmentStatus>]
    #
    # @!attribute [rw] initialization_status_details
    #   Information about the volume initialization. It can take up to 5
    #   minutes for the volume initialization information to be updated.
    #
    #   Only available for volumes created from snapshots. Not available for
    #   empty volumes created without a snapshot.
    #
    #   For more information, see [ Initialize Amazon EBS volumes][1].
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/ebs/latest/userguide/initalize-volume.html
    #   @return [Types::InitializationStatusDetails]
    #
    # @!attribute [rw] availability_zone_id
    #   The ID of the Availability Zone.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VolumeStatusItem AWS API Documentation
    #
    class VolumeStatusItem < Struct.new(
      :actions,
      :availability_zone,
      :outpost_arn,
      :events,
      :volume_id,
      :volume_status,
      :attachment_statuses,
      :initialization_status_details,
      :availability_zone_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a VPC.
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the VPC.
    #   @return [String]
    #
    # @!attribute [rw] instance_tenancy
    #   The allowed tenancy of instances launched into the VPC.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block_association_set
    #   Information about the IPv6 CIDR blocks associated with the VPC.
    #   @return [Array<Types::VpcIpv6CidrBlockAssociation>]
    #
    # @!attribute [rw] cidr_block_association_set
    #   Information about the IPv4 CIDR blocks associated with the VPC.
    #   @return [Array<Types::VpcCidrBlockAssociation>]
    #
    # @!attribute [rw] is_default
    #   Indicates whether the VPC is the default VPC.
    #   @return [Boolean]
    #
    # @!attribute [rw] encryption_control
    #   @return [Types::VpcEncryptionControl]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the VPC.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] block_public_access_states
    #   The state of VPC Block Public Access (BPA).
    #   @return [Types::BlockPublicAccessStates]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] cidr_block
    #   The primary IPv4 CIDR block for the VPC.
    #   @return [String]
    #
    # @!attribute [rw] dhcp_options_id
    #   The ID of the set of DHCP options you've associated with the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/Vpc AWS API Documentation
    #
    class Vpc < Struct.new(
      :owner_id,
      :instance_tenancy,
      :ipv_6_cidr_block_association_set,
      :cidr_block_association_set,
      :is_default,
      :encryption_control,
      :tags,
      :block_public_access_states,
      :vpc_id,
      :state,
      :cidr_block,
      :dhcp_options_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an attachment between a virtual private gateway and a VPC.
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the attachment.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcAttachment AWS API Documentation
    #
    class VpcAttachment < Struct.new(
      :vpc_id,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # A VPC BPA exclusion is a mode that can be applied to a single VPC or
    # subnet that exempts it from the account’s BPA mode and will allow
    # bidirectional or egress-only access. You can create BPA exclusions for
    # VPCs and subnets even when BPA is not enabled on the account to ensure
    # that there is no traffic disruption to the exclusions when VPC BPA is
    # turned on. To learn more about VPC BPA, see [Block public access to
    # VPCs and subnets][1] in the *Amazon VPC User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/userguide/security-vpc-bpa.html
    #
    # @!attribute [rw] exclusion_id
    #   The ID of the exclusion.
    #   @return [String]
    #
    # @!attribute [rw] internet_gateway_exclusion_mode
    #   The exclusion mode for internet gateway traffic.
    #
    #   * `allow-bidirectional`: Allow all internet traffic to and from the
    #     excluded VPCs and subnets.
    #
    #   * `allow-egress`: Allow outbound internet traffic from the excluded
    #     VPCs and subnets. Block inbound internet traffic to the excluded
    #     VPCs and subnets. Only applies when VPC Block Public Access is set
    #     to Bidirectional.
    #   @return [String]
    #
    # @!attribute [rw] resource_arn
    #   The ARN of the exclusion.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the exclusion.
    #   @return [String]
    #
    # @!attribute [rw] reason
    #   The reason for the current exclusion state.
    #   @return [String]
    #
    # @!attribute [rw] creation_timestamp
    #   When the exclusion was created.
    #   @return [Time]
    #
    # @!attribute [rw] last_update_timestamp
    #   When the exclusion was last updated.
    #   @return [Time]
    #
    # @!attribute [rw] deletion_timestamp
    #   When the exclusion was deleted.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   `tag` - The key/value combination of a tag assigned to the resource.
    #   Use the tag key in the filter name and the tag value as the filter
    #   value. For example, to find all resources that have a tag with the
    #   key `Owner` and the value `TeamA`, specify `tag:Owner` for the
    #   filter name and `TeamA` for the filter value.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcBlockPublicAccessExclusion AWS API Documentation
    #
    class VpcBlockPublicAccessExclusion < Struct.new(
      :exclusion_id,
      :internet_gateway_exclusion_mode,
      :resource_arn,
      :state,
      :reason,
      :creation_timestamp,
      :last_update_timestamp,
      :deletion_timestamp,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # VPC Block Public Access (BPA) enables you to block resources in VPCs
    # and subnets that you own in a Region from reaching or being reached
    # from the internet through internet gateways and egress-only internet
    # gateways. To learn more about VPC BPA, see [Block public access to
    # VPCs and subnets][1] in the *Amazon VPC User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpc/latest/userguide/security-vpc-bpa.html
    #
    # @!attribute [rw] aws_account_id
    #   An Amazon Web Services account ID.
    #   @return [String]
    #
    # @!attribute [rw] aws_region
    #   An Amazon Web Services Region.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of VPC BPA.
    #   @return [String]
    #
    # @!attribute [rw] internet_gateway_block_mode
    #   The current mode of VPC BPA.
    #
    #   * `off`: VPC BPA is not enabled and traffic is allowed to and from
    #     internet gateways and egress-only internet gateways in this
    #     Region.
    #
    #   * `block-bidirectional`: Block all traffic to and from internet
    #     gateways and egress-only internet gateways in this Region (except
    #     for excluded VPCs and subnets).
    #
    #   * `block-ingress`: Block all internet traffic to the VPCs in this
    #     Region (except for VPCs or subnets which are excluded). Only
    #     traffic to and from NAT gateways and egress-only internet gateways
    #     is allowed because these gateways only allow outbound connections
    #     to be established.
    #   @return [String]
    #
    # @!attribute [rw] reason
    #   The reason for the current state.
    #   @return [String]
    #
    # @!attribute [rw] last_update_timestamp
    #   The last time the VPC BPA mode was updated.
    #   @return [Time]
    #
    # @!attribute [rw] managed_by
    #   The entity that manages the state of VPC BPA. Possible values
    #   include:
    #
    #   * `account` - The state is managed by the account.
    #
    #   * `declarative-policy` - The state is managed by a declarative
    #     policy and can't be modified by the account.
    #   @return [String]
    #
    # @!attribute [rw] exclusions_allowed
    #   Determines if exclusions are allowed. If you have [enabled VPC BPA
    #   at the Organization level][1], exclusions may be `not-allowed`.
    #   Otherwise, they are `allowed`.
    #
    #
    #
    #   [1]: https://docs.aws.amazon.com/vpc/latest/userguide/security-vpc-bpa.html#security-vpc-bpa-exclusions-orgs
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcBlockPublicAccessOptions AWS API Documentation
    #
    class VpcBlockPublicAccessOptions < Struct.new(
      :aws_account_id,
      :aws_region,
      :state,
      :internet_gateway_block_mode,
      :reason,
      :last_update_timestamp,
      :managed_by,
      :exclusions_allowed)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv4 CIDR block associated with a VPC.
    #
    # @!attribute [rw] association_id
    #   The association ID for the IPv4 CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] cidr_block
    #   The IPv4 CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] cidr_block_state
    #   Information about the state of the CIDR block.
    #   @return [Types::VpcCidrBlockState]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcCidrBlockAssociation AWS API Documentation
    #
    class VpcCidrBlockAssociation < Struct.new(
      :association_id,
      :cidr_block,
      :cidr_block_state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the state of a CIDR block.
    #
    # @!attribute [rw] state
    #   The state of the CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] status_message
    #   A message about the status of the CIDR block, if applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcCidrBlockState AWS API Documentation
    #
    class VpcCidrBlockState < Struct.new(
      :state,
      :status_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # <note markdown="1"> Deprecated.
    #
    #  </note>
    #
    # Describes whether a VPC is enabled for ClassicLink.
    #
    # @!attribute [rw] classic_link_enabled
    #   Indicates whether the VPC is enabled for ClassicLink.
    #   @return [Boolean]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the VPC.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcClassicLink AWS API Documentation
    #
    class VpcClassicLink < Struct.new(
      :classic_link_enabled,
      :tags,
      :vpc_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] vpc_id
    #   @return [String]
    #
    # @!attribute [rw] vpc_encryption_control_id
    #   @return [String]
    #
    # @!attribute [rw] mode
    #   @return [String]
    #
    # @!attribute [rw] state
    #   @return [String]
    #
    # @!attribute [rw] state_message
    #   @return [String]
    #
    # @!attribute [rw] resource_exclusions
    #   @return [Types::VpcEncryptionControlExclusions]
    #
    # @!attribute [rw] tags
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcEncryptionControl AWS API Documentation
    #
    class VpcEncryptionControl < Struct.new(
      :vpc_id,
      :vpc_encryption_control_id,
      :mode,
      :state,
      :state_message,
      :resource_exclusions,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] state
    #   @return [String]
    #
    # @!attribute [rw] state_message
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcEncryptionControlExclusion AWS API Documentation
    #
    class VpcEncryptionControlExclusion < Struct.new(
      :state,
      :state_message)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] internet_gateway
    #   @return [Types::VpcEncryptionControlExclusion]
    #
    # @!attribute [rw] egress_only_internet_gateway
    #   @return [Types::VpcEncryptionControlExclusion]
    #
    # @!attribute [rw] nat_gateway
    #   @return [Types::VpcEncryptionControlExclusion]
    #
    # @!attribute [rw] virtual_private_gateway
    #   @return [Types::VpcEncryptionControlExclusion]
    #
    # @!attribute [rw] vpc_peering
    #   @return [Types::VpcEncryptionControlExclusion]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcEncryptionControlExclusions AWS API Documentation
    #
    class VpcEncryptionControlExclusions < Struct.new(
      :internet_gateway,
      :egress_only_internet_gateway,
      :nat_gateway,
      :virtual_private_gateway,
      :vpc_peering)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a VPC endpoint.
    #
    # @!attribute [rw] vpc_endpoint_id
    #   The ID of the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_type
    #   The type of endpoint.
    #   @return [String]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC to which the endpoint is associated.
    #   @return [String]
    #
    # @!attribute [rw] service_name
    #   The name of the service to which the endpoint is associated.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The state of the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] policy_document
    #   The policy document associated with the endpoint, if applicable.
    #   @return [String]
    #
    # @!attribute [rw] route_table_ids
    #   (Gateway endpoint) The IDs of the route tables associated with the
    #   endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] subnet_ids
    #   (Interface endpoint) The subnets for the endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] groups
    #   (Interface endpoint) Information about the security groups that are
    #   associated with the network interface.
    #   @return [Array<Types::SecurityGroupIdentifier>]
    #
    # @!attribute [rw] ip_address_type
    #   The IP address type for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] dns_options
    #   The DNS options for the endpoint.
    #   @return [Types::DnsOptions]
    #
    # @!attribute [rw] private_dns_enabled
    #   (Interface endpoint) Indicates whether the VPC is associated with a
    #   private hosted zone.
    #   @return [Boolean]
    #
    # @!attribute [rw] requester_managed
    #   Indicates whether the endpoint is being managed by its service.
    #   @return [Boolean]
    #
    # @!attribute [rw] network_interface_ids
    #   (Interface endpoint) The network interfaces for the endpoint.
    #   @return [Array<String>]
    #
    # @!attribute [rw] dns_entries
    #   (Interface endpoint) The DNS entries for the endpoint.
    #   @return [Array<Types::DnsEntry>]
    #
    # @!attribute [rw] creation_timestamp
    #   The date and time that the endpoint was created.
    #   @return [Time]
    #
    # @!attribute [rw] tags
    #   The tags assigned to the endpoint.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] last_error
    #   The last error that occurred for endpoint.
    #   @return [Types::LastError]
    #
    # @!attribute [rw] ipv_4_prefixes
    #   Array of IPv4 prefixes.
    #   @return [Array<Types::SubnetIpPrefixes>]
    #
    # @!attribute [rw] ipv_6_prefixes
    #   Array of IPv6 prefixes.
    #   @return [Array<Types::SubnetIpPrefixes>]
    #
    # @!attribute [rw] failure_reason
    #   Reason for the failure.
    #   @return [String]
    #
    # @!attribute [rw] service_network_arn
    #   The Amazon Resource Name (ARN) of the service network.
    #   @return [String]
    #
    # @!attribute [rw] resource_configuration_arn
    #   The Amazon Resource Name (ARN) of the resource configuration.
    #   @return [String]
    #
    # @!attribute [rw] service_region
    #   The Region where the service is hosted.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcEndpoint AWS API Documentation
    #
    class VpcEndpoint < Struct.new(
      :vpc_endpoint_id,
      :vpc_endpoint_type,
      :vpc_id,
      :service_name,
      :state,
      :policy_document,
      :route_table_ids,
      :subnet_ids,
      :groups,
      :ip_address_type,
      :dns_options,
      :private_dns_enabled,
      :requester_managed,
      :network_interface_ids,
      :dns_entries,
      :creation_timestamp,
      :tags,
      :owner_id,
      :last_error,
      :ipv_4_prefixes,
      :ipv_6_prefixes,
      :failure_reason,
      :service_network_arn,
      :resource_configuration_arn,
      :service_region)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the VPC resources, VPC endpoint services, Lattice services,
    # or service networks associated with the VPC endpoint.
    #
    # @!attribute [rw] id
    #   The ID of the VPC endpoint association.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_id
    #   The ID of the VPC endpoint.
    #   @return [String]
    #
    # @!attribute [rw] service_network_arn
    #   The Amazon Resource Name (ARN) of the service network.
    #   @return [String]
    #
    # @!attribute [rw] service_network_name
    #   The name of the service network.
    #   @return [String]
    #
    # @!attribute [rw] associated_resource_accessibility
    #   The connectivity status of the resources associated to a VPC
    #   endpoint. The resource is accessible if the associated resource
    #   configuration is `AVAILABLE`, otherwise the resource is
    #   inaccessible.
    #   @return [String]
    #
    # @!attribute [rw] failure_reason
    #   A message related to why an VPC endpoint association failed.
    #   @return [String]
    #
    # @!attribute [rw] failure_code
    #   An error code related to why an VPC endpoint association failed.
    #   @return [String]
    #
    # @!attribute [rw] dns_entry
    #   The DNS entry of the VPC endpoint association.
    #   @return [Types::DnsEntry]
    #
    # @!attribute [rw] private_dns_entry
    #   The private DNS entry of the VPC endpoint association.
    #   @return [Types::DnsEntry]
    #
    # @!attribute [rw] associated_resource_arn
    #   The Amazon Resource Name (ARN) of the associated resource.
    #   @return [String]
    #
    # @!attribute [rw] resource_configuration_group_arn
    #   The Amazon Resource Name (ARN) of the resource configuration group.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags to apply to the VPC endpoint association.
    #   @return [Array<Types::Tag>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcEndpointAssociation AWS API Documentation
    #
    class VpcEndpointAssociation < Struct.new(
      :id,
      :vpc_endpoint_id,
      :service_network_arn,
      :service_network_name,
      :associated_resource_accessibility,
      :failure_reason,
      :failure_code,
      :dns_entry,
      :private_dns_entry,
      :associated_resource_arn,
      :resource_configuration_group_arn,
      :tags)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a VPC endpoint connection to a service.
    #
    # @!attribute [rw] service_id
    #   The ID of the service to which the endpoint is connected.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_id
    #   The ID of the VPC endpoint.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_owner
    #   The ID of the Amazon Web Services account that owns the VPC
    #   endpoint.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_state
    #   The state of the VPC endpoint.
    #   @return [String]
    #
    # @!attribute [rw] creation_timestamp
    #   The date and time that the VPC endpoint was created.
    #   @return [Time]
    #
    # @!attribute [rw] dns_entries
    #   The DNS entries for the VPC endpoint.
    #   @return [Array<Types::DnsEntry>]
    #
    # @!attribute [rw] network_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of the network load balancers for
    #   the service.
    #   @return [Array<String>]
    #
    # @!attribute [rw] gateway_load_balancer_arns
    #   The Amazon Resource Names (ARNs) of the Gateway Load Balancers for
    #   the service.
    #   @return [Array<String>]
    #
    # @!attribute [rw] ip_address_type
    #   The IP address type for the endpoint.
    #   @return [String]
    #
    # @!attribute [rw] vpc_endpoint_connection_id
    #   The ID of the VPC endpoint connection.
    #   @return [String]
    #
    # @!attribute [rw] tags
    #   The tags.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vpc_endpoint_region
    #   The Region of the endpoint.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcEndpointConnection AWS API Documentation
    #
    class VpcEndpointConnection < Struct.new(
      :service_id,
      :vpc_endpoint_id,
      :vpc_endpoint_owner,
      :vpc_endpoint_state,
      :creation_timestamp,
      :dns_entries,
      :network_load_balancer_arns,
      :gateway_load_balancer_arns,
      :ip_address_type,
      :vpc_endpoint_connection_id,
      :tags,
      :vpc_endpoint_region)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes an IPv6 CIDR block associated with a VPC.
    #
    # @!attribute [rw] association_id
    #   The association ID for the IPv6 CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block
    #   The IPv6 CIDR block.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block_state
    #   Information about the state of the CIDR block.
    #   @return [Types::VpcCidrBlockState]
    #
    # @!attribute [rw] network_border_group
    #   The name of the unique set of Availability Zones, Local Zones, or
    #   Wavelength Zones from which Amazon Web Services advertises IP
    #   addresses, for example, `us-east-1-wl1-bos-wlz-1`.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_pool
    #   The ID of the IPv6 address pool from which the IPv6 CIDR block is
    #   allocated.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_address_attribute
    #   Public IPv6 addresses are those advertised on the internet from
    #   Amazon Web Services. Private IP addresses are not and cannot be
    #   advertised on the internet from Amazon Web Services.
    #   @return [String]
    #
    # @!attribute [rw] ip_source
    #   The source that allocated the IP address space. `byoip` or `amazon`
    #   indicates public IP address space allocated by Amazon or space that
    #   you have allocated with Bring your own IP (BYOIP). `none` indicates
    #   private space.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcIpv6CidrBlockAssociation AWS API Documentation
    #
    class VpcIpv6CidrBlockAssociation < Struct.new(
      :association_id,
      :ipv_6_cidr_block,
      :ipv_6_cidr_block_state,
      :network_border_group,
      :ipv_6_pool,
      :ipv_6_address_attribute,
      :ip_source)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a VPC peering connection.
    #
    # @!attribute [rw] accepter_vpc_info
    #   Information about the accepter VPC. CIDR block information is only
    #   returned when describing an active VPC peering connection.
    #   @return [Types::VpcPeeringConnectionVpcInfo]
    #
    # @!attribute [rw] expiration_time
    #   The time that an unaccepted VPC peering connection will expire.
    #   @return [Time]
    #
    # @!attribute [rw] requester_vpc_info
    #   Information about the requester VPC. CIDR block information is only
    #   returned when describing an active VPC peering connection.
    #   @return [Types::VpcPeeringConnectionVpcInfo]
    #
    # @!attribute [rw] status
    #   The status of the VPC peering connection.
    #   @return [Types::VpcPeeringConnectionStateReason]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the resource.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vpc_peering_connection_id
    #   The ID of the VPC peering connection.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcPeeringConnection AWS API Documentation
    #
    class VpcPeeringConnection < Struct.new(
      :accepter_vpc_info,
      :expiration_time,
      :requester_vpc_info,
      :status,
      :tags,
      :vpc_peering_connection_id)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the VPC peering connection options.
    #
    # @!attribute [rw] allow_dns_resolution_from_remote_vpc
    #   Indicates whether a local VPC can resolve public DNS hostnames to
    #   private IP addresses when queried from instances in a peer VPC.
    #   @return [Boolean]
    #
    # @!attribute [rw] allow_egress_from_local_classic_link_to_remote_vpc
    #   Deprecated.
    #   @return [Boolean]
    #
    # @!attribute [rw] allow_egress_from_local_vpc_to_remote_classic_link
    #   Deprecated.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcPeeringConnectionOptionsDescription AWS API Documentation
    #
    class VpcPeeringConnectionOptionsDescription < Struct.new(
      :allow_dns_resolution_from_remote_vpc,
      :allow_egress_from_local_classic_link_to_remote_vpc,
      :allow_egress_from_local_vpc_to_remote_classic_link)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes the status of a VPC peering connection.
    #
    # @!attribute [rw] code
    #   The status of the VPC peering connection.
    #   @return [String]
    #
    # @!attribute [rw] message
    #   A message that provides more information about the status, if
    #   applicable.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcPeeringConnectionStateReason AWS API Documentation
    #
    class VpcPeeringConnectionStateReason < Struct.new(
      :code,
      :message)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a VPC in a VPC peering connection.
    #
    # @!attribute [rw] cidr_block
    #   The IPv4 CIDR block for the VPC.
    #   @return [String]
    #
    # @!attribute [rw] ipv_6_cidr_block_set
    #   The IPv6 CIDR block for the VPC.
    #   @return [Array<Types::Ipv6CidrBlock>]
    #
    # @!attribute [rw] cidr_block_set
    #   Information about the IPv4 CIDR blocks for the VPC.
    #   @return [Array<Types::CidrBlock>]
    #
    # @!attribute [rw] owner_id
    #   The ID of the Amazon Web Services account that owns the VPC.
    #   @return [String]
    #
    # @!attribute [rw] peering_options
    #   Information about the VPC peering connection options for the
    #   accepter or requester VPC.
    #   @return [Types::VpcPeeringConnectionOptionsDescription]
    #
    # @!attribute [rw] vpc_id
    #   The ID of the VPC.
    #   @return [String]
    #
    # @!attribute [rw] region
    #   The Region in which the VPC is located.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpcPeeringConnectionVpcInfo AWS API Documentation
    #
    class VpcPeeringConnectionVpcInfo < Struct.new(
      :cidr_block,
      :ipv_6_cidr_block_set,
      :cidr_block_set,
      :owner_id,
      :peering_options,
      :vpc_id,
      :region)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a VPN connection.
    #
    # @!attribute [rw] category
    #   The category of the VPN connection. A value of `VPN` indicates an
    #   Amazon Web Services VPN connection. A value of `VPN-Classic`
    #   indicates an Amazon Web Services Classic VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] transit_gateway_id
    #   The ID of the transit gateway associated with the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] core_network_arn
    #   The ARN of the core network.
    #   @return [String]
    #
    # @!attribute [rw] core_network_attachment_arn
    #   The ARN of the core network attachment.
    #   @return [String]
    #
    # @!attribute [rw] gateway_association_state
    #   The current state of the gateway association.
    #   @return [String]
    #
    # @!attribute [rw] options
    #   The VPN connection options.
    #   @return [Types::VpnConnectionOptions]
    #
    # @!attribute [rw] routes
    #   The static routes associated with the VPN connection.
    #   @return [Array<Types::VpnStaticRoute>]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the VPN connection.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vgw_telemetry
    #   Information about the VPN tunnel.
    #   @return [Array<Types::VgwTelemetry>]
    #
    # @!attribute [rw] pre_shared_key_arn
    #   The Amazon Resource Name (ARN) of the Secrets Manager secret storing
    #   the pre-shared key(s) for the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] vpn_connection_id
    #   The ID of the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] customer_gateway_configuration
    #   The configuration information for the VPN connection's customer
    #   gateway (in the native XML format). This element is always present
    #   in the CreateVpnConnection response; however, it's present in the
    #   DescribeVpnConnections response only if the VPN connection is in the
    #   `pending` or `available` state.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] customer_gateway_id
    #   The ID of the customer gateway at your end of the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] vpn_gateway_id
    #   The ID of the virtual private gateway at the Amazon Web Services
    #   side of the VPN connection.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnConnection AWS API Documentation
    #
    class VpnConnection < Struct.new(
      :category,
      :transit_gateway_id,
      :core_network_arn,
      :core_network_attachment_arn,
      :gateway_association_state,
      :options,
      :routes,
      :tags,
      :vgw_telemetry,
      :pre_shared_key_arn,
      :vpn_connection_id,
      :state,
      :customer_gateway_configuration,
      :type,
      :customer_gateway_id,
      :vpn_gateway_id)
      SENSITIVE = [:customer_gateway_configuration]
      include Aws::Structure
    end

    # List of customer gateway devices that have a sample configuration file
    # available for use. You can also see the list of device types with
    # sample configuration files available under [Your customer gateway
    # device][1] in the *Amazon Web Services Site-to-Site VPN User Guide*.
    #
    #
    #
    # [1]: https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html
    #
    # @!attribute [rw] vpn_connection_device_type_id
    #   Customer gateway device identifier.
    #   @return [String]
    #
    # @!attribute [rw] vendor
    #   Customer gateway device vendor.
    #   @return [String]
    #
    # @!attribute [rw] platform
    #   Customer gateway device platform.
    #   @return [String]
    #
    # @!attribute [rw] software
    #   Customer gateway device software version.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnConnectionDeviceType AWS API Documentation
    #
    class VpnConnectionDeviceType < Struct.new(
      :vpn_connection_device_type_id,
      :vendor,
      :platform,
      :software)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes VPN connection options.
    #
    # @!attribute [rw] enable_acceleration
    #   Indicates whether acceleration is enabled for the VPN connection.
    #   @return [Boolean]
    #
    # @!attribute [rw] static_routes_only
    #   Indicates whether the VPN connection uses static routes only. Static
    #   routes must be used for devices that don't support BGP.
    #   @return [Boolean]
    #
    # @!attribute [rw] local_ipv_4_network_cidr
    #   The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
    #   connection.
    #   @return [String]
    #
    # @!attribute [rw] remote_ipv_4_network_cidr
    #   The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] local_ipv_6_network_cidr
    #   The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
    #   connection.
    #   @return [String]
    #
    # @!attribute [rw] remote_ipv_6_network_cidr
    #   The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
    #   @return [String]
    #
    # @!attribute [rw] outside_ip_address_type
    #   The type of IPv4 address assigned to the outside interface of the
    #   customer gateway.
    #
    #   Valid values: `PrivateIpv4` \| `PublicIpv4` \| `Ipv6`
    #
    #   Default: `PublicIpv4`
    #   @return [String]
    #
    # @!attribute [rw] transport_transit_gateway_attachment_id
    #   The transit gateway attachment ID in use for the VPN tunnel.
    #   @return [String]
    #
    # @!attribute [rw] tunnel_inside_ip_version
    #   Indicates whether the VPN tunnels process IPv4 or IPv6 traffic.
    #   @return [String]
    #
    # @!attribute [rw] tunnel_options
    #   Indicates the VPN tunnel options.
    #   @return [Array<Types::TunnelOption>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnConnectionOptions AWS API Documentation
    #
    class VpnConnectionOptions < Struct.new(
      :enable_acceleration,
      :static_routes_only,
      :local_ipv_4_network_cidr,
      :remote_ipv_4_network_cidr,
      :local_ipv_6_network_cidr,
      :remote_ipv_6_network_cidr,
      :outside_ip_address_type,
      :transport_transit_gateway_attachment_id,
      :tunnel_inside_ip_version,
      :tunnel_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes VPN connection options.
    #
    # @!attribute [rw] enable_acceleration
    #   Indicate whether to enable acceleration for the VPN connection.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @!attribute [rw] tunnel_inside_ip_version
    #   Indicate whether the VPN tunnels process IPv4 or IPv6 traffic.
    #
    #   Default: `ipv4`
    #   @return [String]
    #
    # @!attribute [rw] tunnel_options
    #   The tunnel options for the VPN connection.
    #   @return [Array<Types::VpnTunnelOptionsSpecification>]
    #
    # @!attribute [rw] local_ipv_4_network_cidr
    #   The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
    #   connection.
    #
    #   Default: `0.0.0.0/0`
    #   @return [String]
    #
    # @!attribute [rw] remote_ipv_4_network_cidr
    #   The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
    #
    #   Default: `0.0.0.0/0`
    #   @return [String]
    #
    # @!attribute [rw] local_ipv_6_network_cidr
    #   The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
    #   connection.
    #
    #   Default: `::/0`
    #   @return [String]
    #
    # @!attribute [rw] remote_ipv_6_network_cidr
    #   The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
    #
    #   Default: `::/0`
    #   @return [String]
    #
    # @!attribute [rw] outside_ip_address_type
    #   The type of IP address assigned to the outside interface of the
    #   customer gateway device.
    #
    #   Valid values: `PrivateIpv4` \| `PublicIpv4` \| `Ipv6`
    #
    #   Default: `PublicIpv4`
    #   @return [String]
    #
    # @!attribute [rw] transport_transit_gateway_attachment_id
    #   The transit gateway attachment ID to use for the VPN tunnel.
    #
    #   Required if `OutsideIpAddressType` is set to `PrivateIpv4`.
    #   @return [String]
    #
    # @!attribute [rw] static_routes_only
    #   Indicate whether the VPN connection uses static routes only. If you
    #   are creating a VPN connection for a device that does not support
    #   BGP, you must specify `true`. Use CreateVpnConnectionRoute to create
    #   a static route.
    #
    #   Default: `false`
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnConnectionOptionsSpecification AWS API Documentation
    #
    class VpnConnectionOptionsSpecification < Struct.new(
      :enable_acceleration,
      :tunnel_inside_ip_version,
      :tunnel_options,
      :local_ipv_4_network_cidr,
      :remote_ipv_4_network_cidr,
      :local_ipv_6_network_cidr,
      :remote_ipv_6_network_cidr,
      :outside_ip_address_type,
      :transport_transit_gateway_attachment_id,
      :static_routes_only)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a virtual private gateway.
    #
    # @!attribute [rw] amazon_side_asn
    #   The private Autonomous System Number (ASN) for the Amazon side of a
    #   BGP session.
    #   @return [Integer]
    #
    # @!attribute [rw] tags
    #   Any tags assigned to the virtual private gateway.
    #   @return [Array<Types::Tag>]
    #
    # @!attribute [rw] vpn_gateway_id
    #   The ID of the virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the virtual private gateway.
    #   @return [String]
    #
    # @!attribute [rw] type
    #   The type of VPN connection the virtual private gateway supports.
    #   @return [String]
    #
    # @!attribute [rw] availability_zone
    #   The Availability Zone where the virtual private gateway was created,
    #   if applicable. This field may be empty or not returned.
    #   @return [String]
    #
    # @!attribute [rw] vpc_attachments
    #   Any VPCs attached to the virtual private gateway.
    #   @return [Array<Types::VpcAttachment>]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnGateway AWS API Documentation
    #
    class VpnGateway < Struct.new(
      :amazon_side_asn,
      :tags,
      :vpn_gateway_id,
      :state,
      :type,
      :availability_zone,
      :vpc_attachments)
      SENSITIVE = []
      include Aws::Structure
    end

    # Describes a static route for a VPN connection.
    #
    # @!attribute [rw] destination_cidr_block
    #   The CIDR block associated with the local subnet of the customer data
    #   center.
    #   @return [String]
    #
    # @!attribute [rw] source
    #   Indicates how the routes were provided.
    #   @return [String]
    #
    # @!attribute [rw] state
    #   The current state of the static route.
    #   @return [String]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnStaticRoute AWS API Documentation
    #
    class VpnStaticRoute < Struct.new(
      :destination_cidr_block,
      :source,
      :state)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for logging VPN tunnel activity.
    #
    # @!attribute [rw] cloud_watch_log_options
    #   Options for sending VPN tunnel logs to CloudWatch.
    #   @return [Types::CloudWatchLogOptions]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnTunnelLogOptions AWS API Documentation
    #
    class VpnTunnelLogOptions < Struct.new(
      :cloud_watch_log_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # Options for logging VPN tunnel activity.
    #
    # @!attribute [rw] cloud_watch_log_options
    #   Options for sending VPN tunnel logs to CloudWatch.
    #   @return [Types::CloudWatchLogOptionsSpecification]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnTunnelLogOptionsSpecification AWS API Documentation
    #
    class VpnTunnelLogOptionsSpecification < Struct.new(
      :cloud_watch_log_options)
      SENSITIVE = []
      include Aws::Structure
    end

    # The tunnel options for a single VPN tunnel.
    #
    # @!attribute [rw] tunnel_inside_cidr
    #   The range of inside IPv4 addresses for the tunnel. Any specified
    #   CIDR blocks must be unique across all VPN connections that use the
    #   same virtual private gateway.
    #
    #   Constraints: A size /30 CIDR block from the `169.254.0.0/16` range.
    #   The following CIDR blocks are reserved and cannot be used:
    #
    #   * `169.254.0.0/30`
    #
    #   * `169.254.1.0/30`
    #
    #   * `169.254.2.0/30`
    #
    #   * `169.254.3.0/30`
    #
    #   * `169.254.4.0/30`
    #
    #   * `169.254.5.0/30`
    #
    #   * `169.254.169.252/30`
    #   @return [String]
    #
    # @!attribute [rw] tunnel_inside_ipv_6_cidr
    #   The range of inside IPv6 addresses for the tunnel. Any specified
    #   CIDR blocks must be unique across all VPN connections that use the
    #   same transit gateway.
    #
    #   Constraints: A size /126 CIDR block from the local `fd00::/8` range.
    #   @return [String]
    #
    # @!attribute [rw] pre_shared_key
    #   The pre-shared key (PSK) to establish initial authentication between
    #   the virtual private gateway and customer gateway.
    #
    #   Constraints: Allowed characters are alphanumeric characters, periods
    #   (.), and underscores (\_). Must be between 8 and 64 characters in
    #   length and cannot start with zero (0).
    #   @return [String]
    #
    # @!attribute [rw] phase_1_lifetime_seconds
    #   The lifetime for phase 1 of the IKE negotiation, in seconds.
    #
    #   Constraints: A value between 900 and 28,800.
    #
    #   Default: `28800`
    #   @return [Integer]
    #
    # @!attribute [rw] phase_2_lifetime_seconds
    #   The lifetime for phase 2 of the IKE negotiation, in seconds.
    #
    #   Constraints: A value between 900 and 3,600. The value must be less
    #   than the value for `Phase1LifetimeSeconds`.
    #
    #   Default: `3600`
    #   @return [Integer]
    #
    # @!attribute [rw] rekey_margin_time_seconds
    #   The margin time, in seconds, before the phase 2 lifetime expires,
    #   during which the Amazon Web Services side of the VPN connection
    #   performs an IKE rekey. The exact time of the rekey is randomly
    #   selected based on the value for `RekeyFuzzPercentage`.
    #
    #   Constraints: A value between 60 and half of `Phase2LifetimeSeconds`.
    #
    #   Default: `270`
    #   @return [Integer]
    #
    # @!attribute [rw] rekey_fuzz_percentage
    #   The percentage of the rekey window (determined by
    #   `RekeyMarginTimeSeconds`) during which the rekey time is randomly
    #   selected.
    #
    #   Constraints: A value between 0 and 100.
    #
    #   Default: `100`
    #   @return [Integer]
    #
    # @!attribute [rw] replay_window_size
    #   The number of packets in an IKE replay window.
    #
    #   Constraints: A value between 64 and 2048.
    #
    #   Default: `1024`
    #   @return [Integer]
    #
    # @!attribute [rw] dpd_timeout_seconds
    #   The number of seconds after which a DPD timeout occurs.
    #
    #   Constraints: A value greater than or equal to 30.
    #
    #   Default: `30`
    #   @return [Integer]
    #
    # @!attribute [rw] dpd_timeout_action
    #   The action to take after DPD timeout occurs. Specify `restart` to
    #   restart the IKE initiation. Specify `clear` to end the IKE session.
    #
    #   Valid Values: `clear` \| `none` \| `restart`
    #
    #   Default: `clear`
    #   @return [String]
    #
    # @!attribute [rw] phase_1_encryption_algorithms
    #   One or more encryption algorithms that are permitted for the VPN
    #   tunnel for phase 1 IKE negotiations.
    #
    #   Valid values: `AES128` \| `AES256` \| `AES128-GCM-16` \|
    #   `AES256-GCM-16`
    #   @return [Array<Types::Phase1EncryptionAlgorithmsRequestListValue>]
    #
    # @!attribute [rw] phase_2_encryption_algorithms
    #   One or more encryption algorithms that are permitted for the VPN
    #   tunnel for phase 2 IKE negotiations.
    #
    #   Valid values: `AES128` \| `AES256` \| `AES128-GCM-16` \|
    #   `AES256-GCM-16`
    #   @return [Array<Types::Phase2EncryptionAlgorithmsRequestListValue>]
    #
    # @!attribute [rw] phase_1_integrity_algorithms
    #   One or more integrity algorithms that are permitted for the VPN
    #   tunnel for phase 1 IKE negotiations.
    #
    #   Valid values: `SHA1` \| `SHA2-256` \| `SHA2-384` \| `SHA2-512`
    #   @return [Array<Types::Phase1IntegrityAlgorithmsRequestListValue>]
    #
    # @!attribute [rw] phase_2_integrity_algorithms
    #   One or more integrity algorithms that are permitted for the VPN
    #   tunnel for phase 2 IKE negotiations.
    #
    #   Valid values: `SHA1` \| `SHA2-256` \| `SHA2-384` \| `SHA2-512`
    #   @return [Array<Types::Phase2IntegrityAlgorithmsRequestListValue>]
    #
    # @!attribute [rw] phase_1_dh_group_numbers
    #   One or more Diffie-Hellman group numbers that are permitted for the
    #   VPN tunnel for phase 1 IKE negotiations.
    #
    #   Valid values: `2` \| `14` \| `15` \| `16` \| `17` \| `18` \| `19` \|
    #   `20` \| `21` \| `22` \| `23` \| `24`
    #   @return [Array<Types::Phase1DHGroupNumbersRequestListValue>]
    #
    # @!attribute [rw] phase_2_dh_group_numbers
    #   One or more Diffie-Hellman group numbers that are permitted for the
    #   VPN tunnel for phase 2 IKE negotiations.
    #
    #   Valid values: `2` \| `5` \| `14` \| `15` \| `16` \| `17` \| `18` \|
    #   `19` \| `20` \| `21` \| `22` \| `23` \| `24`
    #   @return [Array<Types::Phase2DHGroupNumbersRequestListValue>]
    #
    # @!attribute [rw] ike_versions
    #   The IKE versions that are permitted for the VPN tunnel.
    #
    #   Valid values: `ikev1` \| `ikev2`
    #   @return [Array<Types::IKEVersionsRequestListValue>]
    #
    # @!attribute [rw] startup_action
    #   The action to take when the establishing the tunnel for the VPN
    #   connection. By default, your customer gateway device must initiate
    #   the IKE negotiation and bring up the tunnel. Specify `start` for
    #   Amazon Web Services to initiate the IKE negotiation.
    #
    #   Valid Values: `add` \| `start`
    #
    #   Default: `add`
    #   @return [String]
    #
    # @!attribute [rw] log_options
    #   Options for logging VPN tunnel activity.
    #   @return [Types::VpnTunnelLogOptionsSpecification]
    #
    # @!attribute [rw] enable_tunnel_lifecycle_control
    #   Turn on or off tunnel endpoint lifecycle control feature.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/VpnTunnelOptionsSpecification AWS API Documentation
    #
    class VpnTunnelOptionsSpecification < Struct.new(
      :tunnel_inside_cidr,
      :tunnel_inside_ipv_6_cidr,
      :pre_shared_key,
      :phase_1_lifetime_seconds,
      :phase_2_lifetime_seconds,
      :rekey_margin_time_seconds,
      :rekey_fuzz_percentage,
      :replay_window_size,
      :dpd_timeout_seconds,
      :dpd_timeout_action,
      :phase_1_encryption_algorithms,
      :phase_2_encryption_algorithms,
      :phase_1_integrity_algorithms,
      :phase_2_integrity_algorithms,
      :phase_1_dh_group_numbers,
      :phase_2_dh_group_numbers,
      :ike_versions,
      :startup_action,
      :log_options,
      :enable_tunnel_lifecycle_control)
      SENSITIVE = [:pre_shared_key]
      include Aws::Structure
    end

    # @!attribute [rw] cidr
    #   The address range, in CIDR notation.
    #   @return [String]
    #
    # @!attribute [rw] dry_run
    #   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
    #   `DryRunOperation`. Otherwise, it is `UnauthorizedOperation`.
    #   @return [Boolean]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/WithdrawByoipCidrRequest AWS API Documentation
    #
    class WithdrawByoipCidrRequest < Struct.new(
      :cidr,
      :dry_run)
      SENSITIVE = []
      include Aws::Structure
    end

    # @!attribute [rw] byoip_cidr
    #   Information about the address pool.
    #   @return [Types::ByoipCidr]
    #
    # @see http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/WithdrawByoipCidrResult AWS API Documentation
    #
    class WithdrawByoipCidrResult < Struct.new(
      :byoip_cidr)
      SENSITIVE = []
      include Aws::Structure
    end

  end
end

