# WARNING: DO NOT EDIT, AUTO-GENERATED CODE!
# See https://github.com/aws-beam/aws-codegen for more details.

defmodule AWS.EC2 do
  @moduledoc """
  Amazon Elastic Compute Cloud

  You can access the features of Amazon Elastic Compute Cloud (Amazon EC2)
  programmatically.

  For more information,
  see the [Amazon EC2 Developer Guide](https://docs.aws.amazon.com/ec2/latest/devguide).
  """

  alias AWS.Client
  alias AWS.Request

  @typedoc """

  ## Example:
      
      describe_traffic_mirror_targets_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TrafficMirrorTargetIds") => list(String.t() | atom())
      }
      
  """
  @type describe_traffic_mirror_targets_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_pool_allocation() :: %{
        "Cidr" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "IpamPoolAllocationId" => String.t() | atom(),
        "ResourceId" => String.t() | atom(),
        "ResourceOwner" => String.t() | atom(),
        "ResourceRegion" => String.t() | atom(),
        "ResourceType" => list(any())
      }
      
  """
  @type ipam_pool_allocation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_connects_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayAttachmentIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateway_connects_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_instance_open_vpn_client_configuration() :: %{
        "Config" => String.t() | atom(),
        "Routes" => list(verified_access_instance_open_vpn_client_configuration_route())
      }
      
  """
  @type verified_access_instance_open_vpn_client_configuration() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_transit_gateway_peering_attachments_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayPeeringAttachments" => list(transit_gateway_peering_attachment())
      }
      
  """
  @type describe_transit_gateway_peering_attachments_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_prefix_list_reference_request() :: %{
        optional("Blackhole") => boolean(),
        optional("DryRun") => boolean(),
        optional("TransitGatewayAttachmentId") => String.t() | atom(),
        required("PrefixListId") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_prefix_list_reference_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      stale_ip_permission() :: %{
        "FromPort" => integer(),
        "IpProtocol" => String.t() | atom(),
        "IpRanges" => list(String.t() | atom()),
        "PrefixListIds" => list(String.t() | atom()),
        "ToPort" => integer(),
        "UserIdGroupPairs" => list(user_id_group_pair())
      }
      
  """
  @type stale_ip_permission() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      address_transfer() :: %{
        "AddressTransferStatus" => list(any()),
        "AllocationId" => String.t() | atom(),
        "PublicIp" => String.t() | atom(),
        "TransferAccountId" => String.t() | atom(),
        "TransferOfferAcceptedTimestamp" => non_neg_integer(),
        "TransferOfferExpirationTimestamp" => non_neg_integer()
      }
      
  """
  @type address_transfer() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_verified_access_endpoint_policy_result() :: %{
        "PolicyDocument" => String.t() | atom(),
        "PolicyEnabled" => boolean()
      }
      
  """
  @type get_verified_access_endpoint_policy_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_host_reservation_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("CurrencyCode") => list(any()),
        optional("LimitPrice") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("HostIdSet") => list(String.t() | atom()),
        required("OfferingId") => String.t() | atom()
      }
      
  """
  @type purchase_host_reservation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_ipam_result() :: %{
        "Ipam" => ipam()
      }
      
  """
  @type create_ipam_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      register_transit_gateway_multicast_group_members_request() :: %{
        optional("DryRun") => boolean(),
        optional("GroupIpAddress") => String.t() | atom(),
        required("NetworkInterfaceIds") => list(String.t() | atom()),
        required("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type register_transit_gateway_multicast_group_members_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      memory_mi_b() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type memory_mi_b() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_requirements_request() :: %{
        "AcceleratorCount" => accelerator_count_request(),
        "AcceleratorManufacturers" => list(list(any())()),
        "AcceleratorNames" => list(list(any())()),
        "AcceleratorTotalMemoryMiB" => accelerator_total_memory_mi_b_request(),
        "AcceleratorTypes" => list(list(any())()),
        "AllowedInstanceTypes" => list(String.t() | atom()),
        "BareMetal" => list(any()),
        "BaselineEbsBandwidthMbps" => baseline_ebs_bandwidth_mbps_request(),
        "BaselinePerformanceFactors" => baseline_performance_factors_request(),
        "BurstablePerformance" => list(any()),
        "CpuManufacturers" => list(list(any())()),
        "ExcludedInstanceTypes" => list(String.t() | atom()),
        "InstanceGenerations" => list(list(any())()),
        "LocalStorage" => list(any()),
        "LocalStorageTypes" => list(list(any())()),
        "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" => integer(),
        "MemoryGiBPerVCpu" => memory_gi_b_per_v_cpu_request(),
        "MemoryMiB" => memory_mi_b_request(),
        "NetworkBandwidthGbps" => network_bandwidth_gbps_request(),
        "NetworkInterfaceCount" => network_interface_count_request(),
        "OnDemandMaxPricePercentageOverLowestPrice" => integer(),
        "RequireHibernateSupport" => boolean(),
        "SpotMaxPricePercentageOverLowestPrice" => integer(),
        "TotalLocalStorageGB" => total_local_storage_g_b_request(),
        "VCpuCount" => v_cpu_count_range_request()
      }
      
  """
  @type instance_requirements_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_insights_access_scopes_result() :: %{
        "NetworkInsightsAccessScopes" => list(network_insights_access_scope()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_network_insights_access_scopes_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ena_srd_specification() :: %{
        "EnaSrdEnabled" => boolean(),
        "EnaSrdUdpSpecification" => ena_srd_udp_specification()
      }
      
  """
  @type ena_srd_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_image_block_public_access_result() :: %{
        "ImageBlockPublicAccessState" => list(any())
      }
      
  """
  @type enable_image_block_public_access_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_vpc_attachment_result() :: %{
        "TransitGatewayVpcAttachment" => transit_gateway_vpc_attachment()
      }
      
  """
  @type create_transit_gateway_vpc_attachment_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      assign_private_ip_addresses_result() :: %{
        "AssignedIpv4Prefixes" => list(ipv4_prefix_specification()),
        "AssignedPrivateIpAddresses" => list(assigned_private_ip_address()),
        "NetworkInterfaceId" => String.t() | atom()
      }
      
  """
  @type assign_private_ip_addresses_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_console_screenshot_request() :: %{
        optional("DryRun") => boolean(),
        optional("WakeUp") => boolean(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type get_console_screenshot_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      inference_accelerator_info() :: %{
        "Accelerators" => list(inference_device_info()),
        "TotalInferenceMemoryInMiB" => integer()
      }
      
  """
  @type inference_accelerator_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_trunk_interface_result() :: %{
        "ClientToken" => String.t() | atom(),
        "InterfaceAssociation" => trunk_interface_association()
      }
      
  """
  @type associate_trunk_interface_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_instance_export_task_result() :: %{
        "ExportTask" => export_task()
      }
      
  """
  @type create_instance_export_task_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Options") => transit_gateway_request_options(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_transit_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_acl_entry() :: %{
        "CidrBlock" => String.t() | atom(),
        "Egress" => boolean(),
        "IcmpTypeCode" => icmp_type_code(),
        "Ipv6CidrBlock" => String.t() | atom(),
        "PortRange" => port_range(),
        "Protocol" => String.t() | atom(),
        "RuleAction" => list(any()),
        "RuleNumber" => integer()
      }
      
  """
  @type network_acl_entry() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_interface_attachment_changes() :: %{
        "AttachmentId" => String.t() | atom(),
        "DefaultEnaQueueCount" => boolean(),
        "DeleteOnTermination" => boolean(),
        "EnaQueueCount" => integer()
      }
      
  """
  @type network_interface_attachment_changes() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_and_overrides_response() :: %{
        "LaunchTemplateSpecification" => fleet_launch_template_specification(),
        "Overrides" => fleet_launch_template_overrides()
      }
      
  """
  @type launch_template_and_overrides_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase2_integrity_algorithms_request_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type phase2_integrity_algorithms_request_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpn_gateway() :: %{
        "AmazonSideAsn" => float(),
        "AvailabilityZone" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "Type" => list(any()),
        "VpcAttachments" => list(vpc_attachment()),
        "VpnGatewayId" => String.t() | atom()
      }
      
  """
  @type vpn_gateway() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_flow_logs_integration_template_request() :: %{
        optional("DryRun") => boolean(),
        required("ConfigDeliveryS3DestinationArn") => String.t() | atom(),
        required("FlowLogId") => String.t() | atom(),
        required("IntegrateServices") => integrate_services()
      }
      
  """
  @type get_flow_logs_integration_template_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_connect_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("Options") => create_transit_gateway_connect_request_options(),
        required("TransportTransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_connect_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ena_srd_specification_request() :: %{
        "EnaSrdEnabled" => boolean(),
        "EnaSrdUdpSpecification" => ena_srd_udp_specification_request()
      }
      
  """
  @type ena_srd_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_image_references_request() :: %{
        optional("DryRun") => boolean(),
        optional("IncludeAllResourceTypes") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ResourceTypes") => list(resource_type_request()),
        required("ImageIds") => list(String.t() | atom())
      }
      
  """
  @type describe_image_references_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_route() :: %{
        "ClientVpnEndpointId" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "DestinationCidr" => String.t() | atom(),
        "Origin" => String.t() | atom(),
        "Status" => client_vpn_route_status(),
        "TargetSubnet" => String.t() | atom(),
        "Type" => String.t() | atom()
      }
      
  """
  @type client_vpn_route() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      byoip_cidr() :: %{
        "AsnAssociations" => list(asn_association()),
        "Cidr" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "NetworkBorderGroup" => String.t() | atom(),
        "State" => list(any()),
        "StatusMessage" => String.t() | atom()
      }
      
  """
  @type byoip_cidr() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_availability_zones_result() :: %{
        "AvailabilityZones" => list(availability_zone())
      }
      
  """
  @type describe_availability_zones_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_resource_discoveries_result() :: %{
        "IpamResourceDiscoveries" => list(ipam_resource_discovery()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_ipam_resource_discoveries_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      update_security_group_rule_descriptions_egress_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type update_security_group_rule_descriptions_egress_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_reserved_instances_listings_request() :: %{
        optional("Filters") => list(filter()),
        optional("ReservedInstancesId") => String.t() | atom(),
        optional("ReservedInstancesListingId") => String.t() | atom()
      }
      
  """
  @type describe_reserved_instances_listings_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpn_static_route() :: %{
        "DestinationCidrBlock" => String.t() | atom(),
        "Source" => list(any()),
        "State" => list(any())
      }
      
  """
  @type vpn_static_route() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_prefix_list_attachment() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "TransitGatewayAttachmentId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_prefix_list_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instance_recurrence() :: %{
        "Frequency" => String.t() | atom(),
        "Interval" => integer(),
        "OccurrenceDaySet" => list(integer()),
        "OccurrenceRelativeToEnd" => boolean(),
        "OccurrenceUnit" => String.t() | atom()
      }
      
  """
  @type scheduled_instance_recurrence() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_attachments_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayAttachmentIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateway_attachments_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_endpoint_port_range() :: %{
        "FromPort" => integer(),
        "ToPort" => integer()
      }
      
  """
  @type verified_access_endpoint_port_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_snapshot_tier_status_result() :: %{
        "NextToken" => String.t() | atom(),
        "SnapshotTierStatuses" => list(snapshot_tier_status())
      }
      
  """
  @type describe_snapshot_tier_status_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpn_tunnel_options_specification() :: %{
        "DPDTimeoutAction" => String.t() | atom(),
        "DPDTimeoutSeconds" => integer(),
        "EnableTunnelLifecycleControl" => boolean(),
        "IKEVersions" => list(i_k_e_versions_request_list_value()),
        "LogOptions" => vpn_tunnel_log_options_specification(),
        "Phase1DHGroupNumbers" => list(phase1_d_h_group_numbers_request_list_value()),
        "Phase1EncryptionAlgorithms" => list(phase1_encryption_algorithms_request_list_value()),
        "Phase1IntegrityAlgorithms" => list(phase1_integrity_algorithms_request_list_value()),
        "Phase1LifetimeSeconds" => integer(),
        "Phase2DHGroupNumbers" => list(phase2_d_h_group_numbers_request_list_value()),
        "Phase2EncryptionAlgorithms" => list(phase2_encryption_algorithms_request_list_value()),
        "Phase2IntegrityAlgorithms" => list(phase2_integrity_algorithms_request_list_value()),
        "Phase2LifetimeSeconds" => integer(),
        "PreSharedKey" => String.t() | atom(),
        "RekeyFuzzPercentage" => integer(),
        "RekeyMarginTimeSeconds" => integer(),
        "ReplayWindowSize" => integer(),
        "StartupAction" => String.t() | atom(),
        "TunnelInsideCidr" => String.t() | atom(),
        "TunnelInsideIpv6Cidr" => String.t() | atom()
      }
      
  """
  @type modify_vpn_tunnel_options_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_templates_monitoring() :: %{
        "Enabled" => boolean()
      }
      
  """
  @type launch_templates_monitoring() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      peering_attachment_status() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type peering_attachment_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_attribute_result() :: %{
        "EnableDnsHostnames" => attribute_boolean_value(),
        "EnableDnsSupport" => attribute_boolean_value(),
        "EnableNetworkAddressUsageMetrics" => attribute_boolean_value(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type describe_vpc_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_network_performance_options_request() :: %{
        "BandwidthWeighting" => list(any())
      }
      
  """
  @type instance_network_performance_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_id_format_request() :: %{
        required("Resource") => String.t() | atom(),
        required("UseLongIds") => boolean()
      }
      
  """
  @type modify_id_format_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_connect_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_connect_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_elastic_inference_accelerator_response() :: %{
        "Count" => integer(),
        "Type" => String.t() | atom()
      }
      
  """
  @type launch_template_elastic_inference_accelerator_response() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_transit_gateway_multicast_domain_result() :: %{
        "TransitGatewayMulticastDomain" => transit_gateway_multicast_domain()
      }
      
  """
  @type create_transit_gateway_multicast_domain_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_peering_attachment_request() :: %{
        optional("DryRun") => boolean(),
        optional("Options") => create_transit_gateway_peering_attachment_request_options(),
        optional("TagSpecifications") => list(tag_specification()),
        required("PeerAccountId") => String.t() | atom(),
        required("PeerRegion") => String.t() | atom(),
        required("PeerTransitGatewayId") => String.t() | atom(),
        required("TransitGatewayId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_peering_attachment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unsuccessful_instance_credit_specification_item_error() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type unsuccessful_instance_credit_specification_item_error() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      register_instance_event_notification_attributes_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceTagAttribute") => register_instance_tag_attribute_request()
      }
      
  """
  @type register_instance_event_notification_attributes_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_client_vpn_connections_result() :: %{
        "Connections" => list(client_vpn_connection()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_client_vpn_connections_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_virtual_interface_result() :: %{
        "LocalGatewayVirtualInterface" => local_gateway_virtual_interface()
      }
      
  """
  @type create_local_gateway_virtual_interface_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      subnet_association() :: %{
        "State" => list(any()),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type subnet_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_result() :: %{
        "TransitGateway" => transit_gateway()
      }
      
  """
  @type delete_transit_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_maintenance_options() :: %{
        "AutoRecovery" => list(any()),
        "RebootMigration" => list(any())
      }
      
  """
  @type instance_maintenance_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_network_interface() :: %{
        "Association" => instance_network_interface_association(),
        "Attachment" => instance_network_interface_attachment(),
        "ConnectionTrackingConfiguration" => connection_tracking_specification_response(),
        "Description" => String.t() | atom(),
        "Groups" => list(group_identifier()),
        "InterfaceType" => String.t() | atom(),
        "Ipv4Prefixes" => list(instance_ipv4_prefix()),
        "Ipv6Addresses" => list(instance_ipv6_address()),
        "Ipv6Prefixes" => list(instance_ipv6_prefix()),
        "MacAddress" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "Operator" => operator_response(),
        "OwnerId" => String.t() | atom(),
        "PrivateDnsName" => String.t() | atom(),
        "PrivateIpAddress" => String.t() | atom(),
        "PrivateIpAddresses" => list(instance_private_ip_address()),
        "SourceDestCheck" => boolean(),
        "Status" => list(any()),
        "SubnetId" => String.t() | atom(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type instance_network_interface() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fast_launch_images_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("ImageIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_fast_launch_images_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_specification() :: %{
        "ExcludeBootVolume" => boolean(),
        "ExcludeDataVolumeIds" => list(String.t() | atom()),
        "InstanceId" => String.t() | atom()
      }
      
  """
  @type instance_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_address_transfer_result() :: %{
        "AddressTransfer" => address_transfer()
      }
      
  """
  @type disable_address_transfer_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_route_server_peer_result() :: %{
        "RouteServerPeer" => route_server_peer()
      }
      
  """
  @type create_route_server_peer_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_coip_pool_result() :: %{
        "CoipPool" => coip_pool()
      }
      
  """
  @type create_coip_pool_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_virtual_interface_group_request() :: %{
        optional("DryRun") => boolean(),
        optional("LocalBgpAsn") => integer(),
        optional("LocalBgpAsnExtended") => float(),
        optional("TagSpecifications") => list(tag_specification()),
        required("LocalGatewayId") => String.t() | atom()
      }
      
  """
  @type create_local_gateway_virtual_interface_group_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      stop_instances_request() :: %{
        optional("DryRun") => boolean(),
        optional("Force") => boolean(),
        optional("Hibernate") => boolean(),
        optional("SkipOsShutdown") => boolean(),
        required("InstanceIds") => list(String.t() | atom())
      }
      
  """
  @type stop_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpn_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("VpnGatewayId") => String.t() | atom()
      }
      
  """
  @type delete_vpn_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      detach_network_interface_request() :: %{
        optional("DryRun") => boolean(),
        optional("Force") => boolean(),
        required("AttachmentId") => String.t() | atom()
      }
      
  """
  @type detach_network_interface_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_route_servers_result() :: %{
        "NextToken" => String.t() | atom(),
        "RouteServers" => list(route_server())
      }
      
  """
  @type describe_route_servers_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unmonitor_instances_result() :: %{
        "InstanceMonitorings" => list(instance_monitoring())
      }
      
  """
  @type unmonitor_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_vpc_peering_connection_request() :: %{
        optional("DryRun") => boolean(),
        required("VpcPeeringConnectionId") => String.t() | atom()
      }
      
  """
  @type reject_vpc_peering_connection_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_transit_gateway_policy_table_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom(),
        required("TransitGatewayPolicyTableId") => String.t() | atom()
      }
      
  """
  @type associate_transit_gateway_policy_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_peering_connection_options_description() :: %{
        "AllowDnsResolutionFromRemoteVpc" => boolean(),
        "AllowEgressFromLocalClassicLinkToRemoteVpc" => boolean(),
        "AllowEgressFromLocalVpcToRemoteClassicLink" => boolean()
      }
      
  """
  @type vpc_peering_connection_options_description() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      license_configuration() :: %{
        "LicenseConfigurationArn" => String.t() | atom()
      }
      
  """
  @type license_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fpga_image_attribute_result() :: %{
        "FpgaImageAttribute" => fpga_image_attribute()
      }
      
  """
  @type describe_fpga_image_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_instance_event_window_result() :: %{
        "InstanceEventWindowState" => instance_event_window_state_change()
      }
      
  """
  @type delete_instance_event_window_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_block_status_result() :: %{
        "CapacityBlockStatuses" => list(capacity_block_status()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_capacity_block_status_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_route_tables_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayRouteTables" => list(transit_gateway_route_table())
      }
      
  """
  @type describe_transit_gateway_route_tables_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_route_table_result() :: %{
        "ClientToken" => String.t() | atom(),
        "RouteTable" => route_table()
      }
      
  """
  @type create_route_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      revoked_security_group_rule() :: %{
        "CidrIpv4" => String.t() | atom(),
        "CidrIpv6" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "FromPort" => integer(),
        "GroupId" => String.t() | atom(),
        "IpProtocol" => String.t() | atom(),
        "IsEgress" => boolean(),
        "PrefixListId" => String.t() | atom(),
        "ReferencedGroupId" => String.t() | atom(),
        "SecurityGroupRuleId" => String.t() | atom(),
        "ToPort" => integer()
      }
      
  """
  @type revoked_security_group_rule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cpu_performance_factor() :: %{
        "References" => list(performance_factor_reference())
      }
      
  """
  @type cpu_performance_factor() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_snapshot_request() :: %{
        optional("DryRun") => boolean(),
        required("SnapshotId") => String.t() | atom()
      }
      
  """
  @type delete_snapshot_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_aws_network_performance_metric_subscription_result() :: %{
        "Output" => boolean()
      }
      
  """
  @type disable_aws_network_performance_metric_subscription_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_route_table_request() :: %{
        optional("DryRun") => boolean(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type delete_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_address_transfers_result() :: %{
        "AddressTransfers" => list(address_transfer()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_address_transfers_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_service_link_virtual_interfaces_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ServiceLinkVirtualInterfaceIds") => list(String.t() | atom())
      }
      
  """
  @type describe_service_link_virtual_interfaces_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_spot_fleet_requests_error_item() :: %{
        "Error" => cancel_spot_fleet_requests_error(),
        "SpotFleetRequestId" => String.t() | atom()
      }
      
  """
  @type cancel_spot_fleet_requests_error_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_price() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "InstanceType" => list(any()),
        "ProductDescription" => list(any()),
        "SpotPrice" => String.t() | atom(),
        "Timestamp" => non_neg_integer()
      }
      
  """
  @type spot_price() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "AvailableInstanceCount" => integer(),
        "CapacityAllocations" => list(capacity_allocation()),
        "CapacityBlockId" => String.t() | atom(),
        "CapacityReservationArn" => String.t() | atom(),
        "CapacityReservationFleetId" => String.t() | atom(),
        "CapacityReservationId" => String.t() | atom(),
        "CommitmentInfo" => capacity_reservation_commitment_info(),
        "CreateDate" => non_neg_integer(),
        "DeliveryPreference" => list(any()),
        "EbsOptimized" => boolean(),
        "EndDate" => non_neg_integer(),
        "EndDateType" => list(any()),
        "EphemeralStorage" => boolean(),
        "InstanceMatchCriteria" => list(any()),
        "InstancePlatform" => list(any()),
        "InstanceType" => String.t() | atom(),
        "OutpostArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "PlacementGroupArn" => String.t() | atom(),
        "ReservationType" => list(any()),
        "StartDate" => non_neg_integer(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "Tenancy" => list(any()),
        "TotalInstanceCount" => integer(),
        "UnusedReservationBillingOwnerId" => String.t() | atom()
      }
      
  """
  @type capacity_reservation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_delegate_mac_volume_ownership_task_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("InstanceId") => String.t() | atom(),
        required("MacCredentials") => String.t() | atom()
      }
      
  """
  @type create_delegate_mac_volume_ownership_task_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      move_address_to_vpc_result() :: %{
        "AllocationId" => String.t() | atom(),
        "Status" => list(any())
      }
      
  """
  @type move_address_to_vpc_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_instance_metadata_options_request() :: %{
        "HttpEndpoint" => list(any()),
        "HttpProtocolIpv6" => list(any()),
        "HttpPutResponseHopLimit" => integer(),
        "HttpTokens" => list(any()),
        "InstanceMetadataTags" => list(any())
      }
      
  """
  @type launch_template_instance_metadata_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_peering_attachment_result() :: %{
        "TransitGatewayPeeringAttachment" => transit_gateway_peering_attachment()
      }
      
  """
  @type delete_transit_gateway_peering_attachment_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      internet_gateway() :: %{
        "Attachments" => list(internet_gateway_attachment()),
        "InternetGatewayId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type internet_gateway() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_placement() :: %{
        "Affinity" => String.t() | atom(),
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "HostId" => String.t() | atom(),
        "HostResourceGroupArn" => String.t() | atom(),
        "PartitionNumber" => integer(),
        "SpreadDomain" => String.t() | atom(),
        "Tenancy" => list(any())
      }
      
  """
  @type launch_template_placement() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      volume_status_item() :: %{
        "Actions" => list(volume_status_action()),
        "AttachmentStatuses" => list(volume_status_attachment_status()),
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "Events" => list(volume_status_event()),
        "InitializationStatusDetails" => initialization_status_details(),
        "OutpostArn" => String.t() | atom(),
        "VolumeId" => String.t() | atom(),
        "VolumeStatus" => volume_status_info()
      }
      
  """
  @type volume_status_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_route_table_association_request() :: %{
        optional("DryRun") => boolean(),
        required("AssociationId") => String.t() | atom(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type replace_route_table_association_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_instance_maintenance_options() :: %{
        "AutoRecovery" => list(any())
      }
      
  """
  @type launch_template_instance_maintenance_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_interface_permission_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type delete_network_interface_permission_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_enclave_certificate_iam_role_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type disassociate_enclave_certificate_iam_role_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_block_device_mapping_request() :: %{
        "DeviceName" => String.t() | atom(),
        "Ebs" => fleet_ebs_block_device_request(),
        "NoDevice" => String.t() | atom(),
        "VirtualName" => String.t() | atom()
      }
      
  """
  @type fleet_block_device_mapping_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_instance_requests_result() :: %{
        "NextToken" => String.t() | atom(),
        "SpotInstanceRequests" => list(spot_instance_request())
      }
      
  """
  @type describe_spot_instance_requests_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_client_vpn_client_certificate_revocation_list_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type import_client_vpn_client_certificate_revocation_list_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      network_acl() :: %{
        "Associations" => list(network_acl_association()),
        "Entries" => list(network_acl_entry()),
        "IsDefault" => boolean(),
        "NetworkAclId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type network_acl() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      search_transit_gateway_routes_result() :: %{
        "AdditionalRoutesAvailable" => boolean(),
        "Routes" => list(transit_gateway_route())
      }
      
  """
  @type search_transit_gateway_routes_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      snapshot_detail() :: %{
        "Description" => String.t() | atom(),
        "DeviceName" => String.t() | atom(),
        "DiskImageSize" => float(),
        "Format" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "Status" => String.t() | atom(),
        "StatusMessage" => String.t() | atom(),
        "Url" => String.t() | atom(),
        "UserBucket" => user_bucket_details()
      }
      
  """
  @type snapshot_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_discovered_resource_cidr() :: %{
        "AvailabilityZoneId" => String.t() | atom(),
        "IpSource" => list(any()),
        "IpUsage" => float(),
        "IpamResourceDiscoveryId" => String.t() | atom(),
        "NetworkInterfaceAttachmentStatus" => list(any()),
        "ResourceCidr" => String.t() | atom(),
        "ResourceId" => String.t() | atom(),
        "ResourceOwnerId" => String.t() | atom(),
        "ResourceRegion" => String.t() | atom(),
        "ResourceTags" => list(ipam_resource_tag()),
        "ResourceType" => list(any()),
        "SampleTime" => non_neg_integer(),
        "SubnetId" => String.t() | atom(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type ipam_discovered_resource_cidr() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_subnet_cidr_reservations_result() :: %{
        "NextToken" => String.t() | atom(),
        "SubnetIpv4CidrReservations" => list(subnet_cidr_reservation()),
        "SubnetIpv6CidrReservations" => list(subnet_cidr_reservation())
      }
      
  """
  @type get_subnet_cidr_reservations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      asn_authorization_context() :: %{
        "Message" => String.t() | atom(),
        "Signature" => String.t() | atom()
      }
      
  """
  @type asn_authorization_context() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      snapshot_recycle_bin_info() :: %{
        "Description" => String.t() | atom(),
        "RecycleBinEnterTime" => non_neg_integer(),
        "RecycleBinExitTime" => non_neg_integer(),
        "SnapshotId" => String.t() | atom(),
        "VolumeId" => String.t() | atom()
      }
      
  """
  @type snapshot_recycle_bin_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_options() :: %{
        "AmazonSideAsn" => float(),
        "AssociationDefaultRouteTableId" => String.t() | atom(),
        "AutoAcceptSharedAttachments" => list(any()),
        "DefaultRouteTableAssociation" => list(any()),
        "DefaultRouteTablePropagation" => list(any()),
        "DnsSupport" => list(any()),
        "MulticastSupport" => list(any()),
        "PropagationDefaultRouteTableId" => String.t() | atom(),
        "SecurityGroupReferencingSupport" => list(any()),
        "TransitGatewayCidrBlocks" => list(String.t() | atom()),
        "VpnEcmpSupport" => list(any())
      }
      
  """
  @type transit_gateway_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_managed_prefix_lists_result() :: %{
        "NextToken" => String.t() | atom(),
        "PrefixLists" => list(managed_prefix_list())
      }
      
  """
  @type describe_managed_prefix_lists_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      detach_verified_access_trust_provider_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("VerifiedAccessInstanceId") => String.t() | atom(),
        required("VerifiedAccessTrustProviderId") => String.t() | atom()
      }
      
  """
  @type detach_verified_access_trust_provider_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_prefix_list_reference() :: %{
        "Blackhole" => boolean(),
        "PrefixListId" => String.t() | atom(),
        "PrefixListOwnerId" => String.t() | atom(),
        "State" => list(any()),
        "TransitGatewayAttachment" => transit_gateway_prefix_list_attachment(),
        "TransitGatewayRouteTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_prefix_list_reference() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_status_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IncludeAllInstances") => boolean(),
        optional("InstanceIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_instance_status_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_route_server_associations_request() :: %{
        optional("DryRun") => boolean(),
        required("RouteServerId") => String.t() | atom()
      }
      
  """
  @type get_route_server_associations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_connect_peer_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayConnectPeerId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_connect_peer_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_fast_snapshot_restore_state_error_item() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "Error" => disable_fast_snapshot_restore_state_error()
      }
      
  """
  @type disable_fast_snapshot_restore_state_error_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase1_integrity_algorithms_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type phase1_integrity_algorithms_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_capacity_reservation_fleet_result() :: %{
        "AllocationStrategy" => String.t() | atom(),
        "CapacityReservationFleetId" => String.t() | atom(),
        "CreateTime" => non_neg_integer(),
        "EndDate" => non_neg_integer(),
        "FleetCapacityReservations" => list(fleet_capacity_reservation()),
        "InstanceMatchCriteria" => list(any()),
        "State" => list(any()),
        "Tags" => list(tag()),
        "Tenancy" => list(any()),
        "TotalFulfilledCapacity" => float(),
        "TotalTargetCapacity" => integer()
      }
      
  """
  @type create_capacity_reservation_fleet_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_market_options() :: %{
        "BlockDurationMinutes" => integer(),
        "InstanceInterruptionBehavior" => list(any()),
        "MaxPrice" => String.t() | atom(),
        "SpotInstanceType" => list(any()),
        "ValidUntil" => non_neg_integer()
      }
      
  """
  @type spot_market_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_capacity_reservation_billing_ownership_request() :: %{
        optional("DryRun") => boolean(),
        required("CapacityReservationId") => String.t() | atom()
      }
      
  """
  @type reject_capacity_reservation_billing_ownership_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      image_usage_report_entry() :: %{
        "AccountId" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "ReportCreationTime" => non_neg_integer(),
        "ReportId" => String.t() | atom(),
        "ResourceType" => String.t() | atom(),
        "UsageCount" => float()
      }
      
  """
  @type image_usage_report_entry() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      authorize_security_group_egress_result() :: %{
        "Return" => boolean(),
        "SecurityGroupRules" => list(security_group_rule())
      }
      
  """
  @type authorize_security_group_egress_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_instance_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("DiskImages") => list(disk_image()),
        optional("DryRun") => boolean(),
        optional("LaunchSpecification") => import_instance_launch_specification(),
        required("Platform") => list(any())
      }
      
  """
  @type import_instance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_managed_prefix_list_entries_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TargetVersion") => float(),
        required("PrefixListId") => String.t() | atom()
      }
      
  """
  @type get_managed_prefix_list_entries_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_types_result() :: %{
        "InstanceTypes" => list(instance_type_info()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_instance_types_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_resource_cidr_result() :: %{
        "IpamResourceCidr" => ipam_resource_cidr()
      }
      
  """
  @type modify_ipam_resource_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_spot_datafeed_subscription_request() :: %{
        optional("DryRun") => boolean(),
        optional("Prefix") => String.t() | atom(),
        required("Bucket") => String.t() | atom()
      }
      
  """
  @type create_spot_datafeed_subscription_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_egress_only_internet_gateways_request() :: %{
        optional("DryRun") => boolean(),
        optional("EgressOnlyInternetGatewayIds") => list(String.t() | atom()),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_egress_only_internet_gateways_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_egress_only_internet_gateway_result() :: %{
        "ReturnCode" => boolean()
      }
      
  """
  @type delete_egress_only_internet_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_group_result() :: %{
        "VerifiedAccessGroup" => verified_access_group()
      }
      
  """
  @type modify_verified_access_group_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_managed_prefix_list_result() :: %{
        "PrefixList" => managed_prefix_list()
      }
      
  """
  @type delete_managed_prefix_list_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      asn_association() :: %{
        "Asn" => String.t() | atom(),
        "Cidr" => String.t() | atom(),
        "State" => list(any()),
        "StatusMessage" => String.t() | atom()
      }
      
  """
  @type asn_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deregister_transit_gateway_multicast_group_members_result() :: %{
        "DeregisteredMulticastGroupMembers" => transit_gateway_multicast_deregistered_group_members()
      }
      
  """
  @type deregister_transit_gateway_multicast_group_members_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_launch_template_versions_result() :: %{
        "LaunchTemplateVersions" => list(launch_template_version()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_launch_template_versions_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_transit_gateway_prefix_list_reference_request() :: %{
        optional("Blackhole") => boolean(),
        optional("DryRun") => boolean(),
        optional("TransitGatewayAttachmentId") => String.t() | atom(),
        required("PrefixListId") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type modify_transit_gateway_prefix_list_reference_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_tags_request() :: %{
        optional("DryRun") => boolean(),
        optional("Tags") => list(tag()),
        required("Resources") => list(String.t() | atom())
      }
      
  """
  @type delete_tags_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_ipam_resource_discovery_result() :: %{
        "IpamResourceDiscoveryAssociation" => ipam_resource_discovery_association()
      }
      
  """
  @type disassociate_ipam_resource_discovery_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      target_groups_config() :: %{
        "TargetGroups" => list(target_group())
      }
      
  """
  @type target_groups_config() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_metadata_options_request() :: %{
        "HttpEndpoint" => list(any()),
        "HttpProtocolIpv6" => list(any()),
        "HttpPutResponseHopLimit" => integer(),
        "HttpTokens" => list(any()),
        "InstanceMetadataTags" => list(any())
      }
      
  """
  @type instance_metadata_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpn_tunnel_certificate_result() :: %{
        "VpnConnection" => vpn_connection()
      }
      
  """
  @type modify_vpn_tunnel_certificate_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deregister_instance_tag_attribute_request() :: %{
        "IncludeAllTagsOfInstance" => boolean(),
        "InstanceTagKeys" => list(String.t() | atom())
      }
      
  """
  @type deregister_instance_tag_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_capacity_reservation_attributes_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_instance_capacity_reservation_attributes_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      spot_instance_state_fault() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type spot_instance_state_fault() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_queued_reserved_instances_result() :: %{
        "FailedQueuedPurchaseDeletions" => list(failed_queued_purchase_deletion()),
        "SuccessfulQueuedPurchaseDeletions" => list(successful_queued_purchase_deletion())
      }
      
  """
  @type delete_queued_reserved_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_virtual_interface_groups_result() :: %{
        "LocalGatewayVirtualInterfaceGroups" => list(local_gateway_virtual_interface_group()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_virtual_interface_groups_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_traffic_mirror_filter_rule_request() :: %{
        optional("DryRun") => boolean(),
        required("TrafficMirrorFilterRuleId") => String.t() | atom()
      }
      
  """
  @type delete_traffic_mirror_filter_rule_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_managed_prefix_list_associations_result() :: %{
        "NextToken" => String.t() | atom(),
        "PrefixListAssociations" => list(prefix_list_association())
      }
      
  """
  @type get_managed_prefix_list_associations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_route_server_peer_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("BgpOptions") => route_server_bgp_options_request(),
        required("PeerAddress") => String.t() | atom(),
        required("RouteServerEndpointId") => String.t() | atom()
      }
      
  """
  @type create_route_server_peer_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_vpc_cidr_block_request() :: %{
        optional("AmazonProvidedIpv6CidrBlock") => boolean(),
        optional("CidrBlock") => String.t() | atom(),
        optional("Ipv4IpamPoolId") => String.t() | atom(),
        optional("Ipv4NetmaskLength") => integer(),
        optional("Ipv6CidrBlock") => String.t() | atom(),
        optional("Ipv6CidrBlockNetworkBorderGroup") => String.t() | atom(),
        optional("Ipv6IpamPoolId") => String.t() | atom(),
        optional("Ipv6NetmaskLength") => integer(),
        optional("Ipv6Pool") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type associate_vpc_cidr_block_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      path_component() :: %{
        "AclRule" => analysis_acl_rule(),
        "AdditionalDetails" => list(additional_detail()),
        "AttachedTo" => analysis_component(),
        "Component" => analysis_component(),
        "DestinationVpc" => analysis_component(),
        "ElasticLoadBalancerListener" => analysis_component(),
        "Explanations" => list(explanation()),
        "FirewallStatefulRule" => firewall_stateful_rule(),
        "FirewallStatelessRule" => firewall_stateless_rule(),
        "InboundHeader" => analysis_packet_header(),
        "OutboundHeader" => analysis_packet_header(),
        "RouteTableRoute" => analysis_route_table_route(),
        "SecurityGroupRule" => analysis_security_group_rule(),
        "SequenceNumber" => integer(),
        "ServiceName" => String.t() | atom(),
        "SourceVpc" => analysis_component(),
        "Subnet" => analysis_component(),
        "TransitGateway" => analysis_component(),
        "TransitGatewayRouteTableRoute" => transit_gateway_route_table_route(),
        "Vpc" => analysis_component()
      }
      
  """
  @type path_component() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      provision_public_ipv4_pool_cidr_request() :: %{
        optional("DryRun") => boolean(),
        optional("NetworkBorderGroup") => String.t() | atom(),
        required("IpamPoolId") => String.t() | atom(),
        required("NetmaskLength") => integer(),
        required("PoolId") => String.t() | atom()
      }
      
  """
  @type provision_public_ipv4_pool_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_transit_gateway_routes_result() :: %{
        "S3Location" => String.t() | atom()
      }
      
  """
  @type export_transit_gateway_routes_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_attribute() :: %{
        "BlockDeviceMappings" => list(block_device_mapping()),
        "BootMode" => attribute_value(),
        "DeregistrationProtection" => attribute_value(),
        "Description" => attribute_value(),
        "ImageId" => String.t() | atom(),
        "ImdsSupport" => attribute_value(),
        "KernelId" => attribute_value(),
        "LastLaunchedTime" => attribute_value(),
        "LaunchPermissions" => list(launch_permission()),
        "ProductCodes" => list(product_code()),
        "RamdiskId" => attribute_value(),
        "SriovNetSupport" => attribute_value(),
        "TpmSupport" => attribute_value(),
        "UefiData" => attribute_value()
      }
      
  """
  @type image_attribute() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_client_vpn_client_configuration_request() :: %{
        optional("DryRun") => boolean(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type export_client_vpn_client_configuration_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_insights_access_scope_analysis_result() :: %{
        "NetworkInsightsAccessScopeAnalysisId" => String.t() | atom()
      }
      
  """
  @type delete_network_insights_access_scope_analysis_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      disk_image_volume_description() :: %{
        "Id" => String.t() | atom(),
        "Size" => float()
      }
      
  """
  @type disk_image_volume_description() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_volume_request() :: %{
        optional("AvailabilityZone") => String.t() | atom(),
        optional("AvailabilityZoneId") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("Image") => disk_image_detail(),
        required("Volume") => volume_detail()
      }
      
  """
  @type import_volume_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_multicast_domain_associations_result() :: %{
        "MulticastDomainAssociations" => list(transit_gateway_multicast_domain_association()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_multicast_domain_associations_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_instance_event_window_result() :: %{
        "InstanceEventWindow" => instance_event_window()
      }
      
  """
  @type create_instance_event_window_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deregister_instance_event_notification_attributes_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceTagAttribute") => deregister_instance_tag_attribute_request()
      }
      
  """
  @type deregister_instance_event_notification_attributes_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      attribute_summary() :: %{
        "AttributeName" => String.t() | atom(),
        "MostFrequentValue" => String.t() | atom(),
        "NumberOfMatchedAccounts" => integer(),
        "NumberOfUnmatchedAccounts" => integer(),
        "RegionalSummaries" => list(regional_summary())
      }
      
  """
  @type attribute_summary() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_transit_gateway_multicast_domain_result() :: %{
        "Associations" => transit_gateway_multicast_domain_associations()
      }
      
  """
  @type associate_transit_gateway_multicast_domain_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_spot_market_options_request() :: %{
        "BlockDurationMinutes" => integer(),
        "InstanceInterruptionBehavior" => list(any()),
        "MaxPrice" => String.t() | atom(),
        "SpotInstanceType" => list(any()),
        "ValidUntil" => non_neg_integer()
      }
      
  """
  @type launch_template_spot_market_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      security_group_vpc_association() :: %{
        "GroupId" => String.t() | atom(),
        "GroupOwnerId" => String.t() | atom(),
        "State" => list(any()),
        "StateReason" => String.t() | atom(),
        "VpcId" => String.t() | atom(),
        "VpcOwnerId" => String.t() | atom()
      }
      
  """
  @type security_group_vpc_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_log_s3_destination_options() :: %{
        "BucketName" => String.t() | atom(),
        "BucketOwner" => String.t() | atom(),
        "Enabled" => boolean(),
        "Prefix" => String.t() | atom()
      }
      
  """
  @type verified_access_log_s3_destination_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_verified_access_endpoint_result() :: %{
        "VerifiedAccessEndpoint" => verified_access_endpoint()
      }
      
  """
  @type delete_verified_access_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      peering_connection_options() :: %{
        "AllowDnsResolutionFromRemoteVpc" => boolean(),
        "AllowEgressFromLocalClassicLinkToRemoteVpc" => boolean(),
        "AllowEgressFromLocalVpcToRemoteClassicLink" => boolean()
      }
      
  """
  @type peering_connection_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_endpoints_result() :: %{
        "Unsuccessful" => list(unsuccessful_item())
      }
      
  """
  @type delete_vpc_endpoints_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_carrier_gateway_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type create_carrier_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_multicast_registered_group_sources() :: %{
        "GroupIpAddress" => String.t() | atom(),
        "RegisteredNetworkInterfaceIds" => list(String.t() | atom()),
        "TransitGatewayMulticastDomainId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_multicast_registered_group_sources() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_subnet_cidr_reservation_result() :: %{
        "SubnetCidrReservation" => subnet_cidr_reservation()
      }
      
  """
  @type create_subnet_cidr_reservation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      availability_zone() :: %{
        "GroupLongName" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "Messages" => list(availability_zone_message()),
        "NetworkBorderGroup" => String.t() | atom(),
        "OptInStatus" => list(any()),
        "ParentZoneId" => String.t() | atom(),
        "ParentZoneName" => String.t() | atom(),
        "RegionName" => String.t() | atom(),
        "State" => list(any()),
        "ZoneId" => String.t() | atom(),
        "ZoneName" => String.t() | atom(),
        "ZoneType" => String.t() | atom()
      }
      
  """
  @type availability_zone() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_ipam_pool_request() :: %{
        optional("Cascade") => boolean(),
        optional("DryRun") => boolean(),
        required("IpamPoolId") => String.t() | atom()
      }
      
  """
  @type delete_ipam_pool_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_network_insights_access_scope_content_result() :: %{
        "NetworkInsightsAccessScopeContent" => network_insights_access_scope_content()
      }
      
  """
  @type get_network_insights_access_scope_content_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_serial_console_access_result() :: %{
        "SerialConsoleAccessEnabled" => boolean()
      }
      
  """
  @type enable_serial_console_access_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_nat_gateway_address_result() :: %{
        "NatGatewayAddresses" => list(nat_gateway_address()),
        "NatGatewayId" => String.t() | atom()
      }
      
  """
  @type disassociate_nat_gateway_address_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      s3_object_tag() :: %{
        "Key" => String.t() | atom(),
        "Value" => String.t() | atom()
      }
      
  """
  @type s3_object_tag() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_associated_ipv6_pool_cidrs_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("PoolId") => String.t() | atom()
      }
      
  """
  @type get_associated_ipv6_pool_cidrs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_volume_request() :: %{
        optional("DryRun") => boolean(),
        optional("Iops") => integer(),
        optional("MultiAttachEnabled") => boolean(),
        optional("Size") => integer(),
        optional("Throughput") => integer(),
        optional("VolumeType") => list(any()),
        required("VolumeId") => String.t() | atom()
      }
      
  """
  @type modify_volume_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_customer_gateway_result() :: %{
        "CustomerGateway" => customer_gateway()
      }
      
  """
  @type create_customer_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      security_group_rule_description() :: %{
        "Description" => String.t() | atom(),
        "SecurityGroupRuleId" => String.t() | atom()
      }
      
  """
  @type security_group_rule_description() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_addresses_attribute_request() :: %{
        optional("AllocationIds") => list(String.t() | atom()),
        optional("Attribute") => list(any()),
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_addresses_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_transit_gateway_prefix_list_reference_result() :: %{
        "TransitGatewayPrefixListReference" => transit_gateway_prefix_list_reference()
      }
      
  """
  @type modify_transit_gateway_prefix_list_reference_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_snapshot_block_public_access_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type disable_snapshot_block_public_access_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unsuccessful_item_error() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type unsuccessful_item_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_route_server_endpoint_result() :: %{
        "RouteServerEndpoint" => route_server_endpoint()
      }
      
  """
  @type delete_route_server_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_endpoint_port_range() :: %{
        "FromPort" => integer(),
        "ToPort" => integer()
      }
      
  """
  @type create_verified_access_endpoint_port_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      volume_status_info() :: %{
        "Details" => list(volume_status_details()),
        "Status" => list(any())
      }
      
  """
  @type volume_status_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_coip_pools_result() :: %{
        "CoipPools" => list(coip_pool()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_coip_pools_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_snapshot_tier_request() :: %{
        optional("DryRun") => boolean(),
        optional("StorageTier") => list(any()),
        required("SnapshotId") => String.t() | atom()
      }
      
  """
  @type modify_snapshot_tier_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reserved_instances_modification() :: %{
        "ClientToken" => String.t() | atom(),
        "CreateDate" => non_neg_integer(),
        "EffectiveDate" => non_neg_integer(),
        "ModificationResults" => list(reserved_instances_modification_result()),
        "ReservedInstancesIds" => list(reserved_instances_id()),
        "ReservedInstancesModificationId" => String.t() | atom(),
        "Status" => String.t() | atom(),
        "StatusMessage" => String.t() | atom(),
        "UpdateDate" => non_neg_integer()
      }
      
  """
  @type reserved_instances_modification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      allocate_address_result() :: %{
        "AllocationId" => String.t() | atom(),
        "CarrierIp" => String.t() | atom(),
        "CustomerOwnedIp" => String.t() | atom(),
        "CustomerOwnedIpv4Pool" => String.t() | atom(),
        "Domain" => list(any()),
        "NetworkBorderGroup" => String.t() | atom(),
        "PublicIp" => String.t() | atom(),
        "PublicIpv4Pool" => String.t() | atom()
      }
      
  """
  @type allocate_address_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      active_vpn_tunnel_status() :: %{
        "IkeVersion" => String.t() | atom(),
        "Phase1DHGroup" => integer(),
        "Phase1EncryptionAlgorithm" => String.t() | atom(),
        "Phase1IntegrityAlgorithm" => String.t() | atom(),
        "Phase2DHGroup" => integer(),
        "Phase2EncryptionAlgorithm" => String.t() | atom(),
        "Phase2IntegrityAlgorithm" => String.t() | atom(),
        "ProvisioningStatus" => list(any()),
        "ProvisioningStatusReason" => String.t() | atom()
      }
      
  """
  @type active_vpn_tunnel_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_coip_pool_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("LocalGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type create_coip_pool_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ebs_default_kms_key_id_result() :: %{
        "KmsKeyId" => String.t() | atom()
      }
      
  """
  @type get_ebs_default_kms_key_id_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_volume_request() :: %{
        optional("DryRun") => boolean(),
        required("VolumeId") => String.t() | atom()
      }
      
  """
  @type delete_volume_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_block_status_request() :: %{
        optional("CapacityBlockIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_capacity_block_status_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_dhcp_options_request() :: %{
        optional("DhcpOptionsIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_dhcp_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_classic_link_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("VpcIds") => list(String.t() | atom())
      }
      
  """
  @type describe_vpc_classic_link_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpcs_result() :: %{
        "NextToken" => String.t() | atom(),
        "Vpcs" => list(vpc())
      }
      
  """
  @type describe_vpcs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_peering_connection_options_result() :: %{
        "AccepterPeeringConnectionOptions" => peering_connection_options(),
        "RequesterPeeringConnectionOptions" => peering_connection_options()
      }
      
  """
  @type modify_vpc_peering_connection_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_block_public_access_options_result() :: %{
        "VpcBlockPublicAccessOptions" => vpc_block_public_access_options()
      }
      
  """
  @type modify_vpc_block_public_access_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_network_interface_association() :: %{
        "CarrierIp" => String.t() | atom(),
        "CustomerOwnedIp" => String.t() | atom(),
        "IpOwnerId" => String.t() | atom(),
        "PublicDnsName" => String.t() | atom(),
        "PublicIp" => String.t() | atom()
      }
      
  """
  @type instance_network_interface_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_connect_peer_result() :: %{
        "TransitGatewayConnectPeer" => transit_gateway_connect_peer()
      }
      
  """
  @type create_transit_gateway_connect_peer_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_traffic_mirror_filter_rules_result() :: %{
        "NextToken" => String.t() | atom(),
        "TrafficMirrorFilterRules" => list(traffic_mirror_filter_rule())
      }
      
  """
  @type describe_traffic_mirror_filter_rules_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_vpc_peering_connection_result() :: %{
        "VpcPeeringConnection" => vpc_peering_connection()
      }
      
  """
  @type accept_vpc_peering_connection_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fpga_image() :: %{
        "CreateTime" => non_neg_integer(),
        "DataRetentionSupport" => boolean(),
        "Description" => String.t() | atom(),
        "FpgaImageGlobalId" => String.t() | atom(),
        "FpgaImageId" => String.t() | atom(),
        "InstanceTypes" => list(String.t() | atom()),
        "Name" => String.t() | atom(),
        "OwnerAlias" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "PciId" => pci_id(),
        "ProductCodes" => list(product_code()),
        "Public" => boolean(),
        "ShellVersion" => String.t() | atom(),
        "State" => fpga_image_state(),
        "Tags" => list(tag()),
        "UpdateTime" => non_neg_integer()
      }
      
  """
  @type fpga_image() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_peering_connection_request() :: %{
        optional("DryRun") => boolean(),
        optional("PeerOwnerId") => String.t() | atom(),
        optional("PeerRegion") => String.t() | atom(),
        optional("PeerVpcId") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type create_vpc_peering_connection_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_ipam_byoasn_request() :: %{
        optional("DryRun") => boolean(),
        required("Asn") => String.t() | atom(),
        required("Cidr") => String.t() | atom()
      }
      
  """
  @type disassociate_ipam_byoasn_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instance_availability() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailableInstanceCount" => integer(),
        "FirstSlotStartTime" => non_neg_integer(),
        "HourlyPrice" => String.t() | atom(),
        "InstanceType" => String.t() | atom(),
        "MaxTermDurationInDays" => integer(),
        "MinTermDurationInDays" => integer(),
        "NetworkPlatform" => String.t() | atom(),
        "Platform" => String.t() | atom(),
        "PurchaseToken" => String.t() | atom(),
        "Recurrence" => scheduled_instance_recurrence(),
        "SlotDurationInHours" => integer(),
        "TotalScheduledInstanceHours" => integer()
      }
      
  """
  @type scheduled_instance_availability() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_snapshot_request() :: %{
        optional("ClientData") => client_data(),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DiskContainer") => snapshot_disk_container(),
        optional("DryRun") => boolean(),
        optional("Encrypted") => boolean(),
        optional("KmsKeyId") => String.t() | atom(),
        optional("RoleName") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type import_snapshot_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_resource_discovery_association() :: %{
        "IpamArn" => String.t() | atom(),
        "IpamId" => String.t() | atom(),
        "IpamRegion" => String.t() | atom(),
        "IpamResourceDiscoveryAssociationArn" => String.t() | atom(),
        "IpamResourceDiscoveryAssociationId" => String.t() | atom(),
        "IpamResourceDiscoveryId" => String.t() | atom(),
        "IsDefault" => boolean(),
        "OwnerId" => String.t() | atom(),
        "ResourceDiscoveryStatus" => list(any()),
        "State" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type ipam_resource_discovery_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_security_group_vpc_request() :: %{
        optional("DryRun") => boolean(),
        required("GroupId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type associate_security_group_vpc_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reset_instance_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("Attribute") => list(any()),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type reset_instance_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      detach_volume_request() :: %{
        optional("Device") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Force") => boolean(),
        optional("InstanceId") => String.t() | atom(),
        required("VolumeId") => String.t() | atom()
      }
      
  """
  @type detach_volume_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instances_iam_instance_profile() :: %{
        "Arn" => String.t() | atom(),
        "Name" => String.t() | atom()
      }
      
  """
  @type scheduled_instances_iam_instance_profile() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_interface_count() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type network_interface_count() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_flow_logs_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DeliverCrossAccountRole") => String.t() | atom(),
        optional("DeliverLogsPermissionArn") => String.t() | atom(),
        optional("DestinationOptions") => destination_options_request(),
        optional("DryRun") => boolean(),
        optional("LogDestination") => String.t() | atom(),
        optional("LogDestinationType") => list(any()),
        optional("LogFormat") => String.t() | atom(),
        optional("LogGroupName") => String.t() | atom(),
        optional("MaxAggregationInterval") => integer(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("TrafficType") => list(any()),
        required("ResourceIds") => list(String.t() | atom()),
        required("ResourceType") => list(any())
      }
      
  """
  @type create_flow_logs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      register_instance_event_notification_attributes_result() :: %{
        "InstanceTagAttribute" => instance_tag_notification_attribute()
      }
      
  """
  @type register_instance_event_notification_attributes_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_verified_access_endpoint_cidr_options() :: %{
        "PortRanges" => list(modify_verified_access_endpoint_port_range())
      }
      
  """
  @type modify_verified_access_endpoint_cidr_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_task_s3_location_request() :: %{
        "S3Bucket" => String.t() | atom(),
        "S3Prefix" => String.t() | atom()
      }
      
  """
  @type export_task_s3_location_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_fast_snapshot_restore_state_error_item() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "Error" => enable_fast_snapshot_restore_state_error()
      }
      
  """
  @type enable_fast_snapshot_restore_state_error_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_image_attribute_request() :: %{
        optional("Attribute") => String.t() | atom(),
        optional("Description") => attribute_value(),
        optional("DryRun") => boolean(),
        optional("ImdsSupport") => attribute_value(),
        optional("LaunchPermission") => launch_permission_modifications(),
        optional("OperationType") => list(any()),
        optional("OrganizationArns") => list(String.t() | atom()),
        optional("OrganizationalUnitArns") => list(String.t() | atom()),
        optional("ProductCodes") => list(String.t() | atom()),
        optional("UserGroups") => list(String.t() | atom()),
        optional("UserIds") => list(String.t() | atom()),
        optional("Value") => String.t() | atom(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type modify_image_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_vpc_peering_connection_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type reject_vpc_peering_connection_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_instance_network_interface_specification_request() :: %{
        "AssociateCarrierIpAddress" => boolean(),
        "AssociatePublicIpAddress" => boolean(),
        "ConnectionTrackingSpecification" => connection_tracking_specification_request(),
        "DeleteOnTermination" => boolean(),
        "Description" => String.t() | atom(),
        "DeviceIndex" => integer(),
        "EnaQueueCount" => integer(),
        "EnaSrdSpecification" => ena_srd_specification_request(),
        "Groups" => list(String.t() | atom()),
        "InterfaceType" => String.t() | atom(),
        "Ipv4PrefixCount" => integer(),
        "Ipv4Prefixes" => list(ipv4_prefix_specification_request()),
        "Ipv6AddressCount" => integer(),
        "Ipv6Addresses" => list(instance_ipv6_address_request()),
        "Ipv6PrefixCount" => integer(),
        "Ipv6Prefixes" => list(ipv6_prefix_specification_request()),
        "NetworkCardIndex" => integer(),
        "NetworkInterfaceId" => String.t() | atom(),
        "PrimaryIpv6" => boolean(),
        "PrivateIpAddress" => String.t() | atom(),
        "PrivateIpAddresses" => list(private_ip_address_specification()),
        "SecondaryPrivateIpAddressCount" => integer(),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type launch_template_instance_network_interface_specification_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_address_attribute_result() :: %{
        "Address" => address_attribute()
      }
      
  """
  @type modify_address_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      dns_servers_options_modify_structure() :: %{
        "CustomDnsServers" => list(String.t() | atom()),
        "Enabled" => boolean()
      }
      
  """
  @type dns_servers_options_modify_structure() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_prefix_lists_result() :: %{
        "NextToken" => String.t() | atom(),
        "PrefixLists" => list(prefix_list())
      }
      
  """
  @type describe_prefix_lists_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_templates_monitoring_request() :: %{
        "Enabled" => boolean()
      }
      
  """
  @type launch_templates_monitoring_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_event_start_time_result() :: %{
        "Event" => instance_status_event()
      }
      
  """
  @type modify_instance_event_start_time_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_customer_gateways_result() :: %{
        "CustomerGateways" => list(customer_gateway())
      }
      
  """
  @type describe_customer_gateways_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_cpu_options_request() :: %{
        optional("DryRun") => boolean(),
        required("CoreCount") => integer(),
        required("InstanceId") => String.t() | atom(),
        required("ThreadsPerCore") => integer()
      }
      
  """
  @type modify_instance_cpu_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_log_kinesis_data_firehose_destination_options() :: %{
        "DeliveryStream" => String.t() | atom(),
        "Enabled" => boolean()
      }
      
  """
  @type verified_access_log_kinesis_data_firehose_destination_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      ipam_resource_cidr() :: %{
        "AvailabilityZoneId" => String.t() | atom(),
        "ComplianceStatus" => list(any()),
        "IpUsage" => float(),
        "IpamId" => String.t() | atom(),
        "IpamPoolId" => String.t() | atom(),
        "IpamScopeId" => String.t() | atom(),
        "ManagementState" => list(any()),
        "OverlapStatus" => list(any()),
        "ResourceCidr" => String.t() | atom(),
        "ResourceId" => String.t() | atom(),
        "ResourceName" => String.t() | atom(),
        "ResourceOwnerId" => String.t() | atom(),
        "ResourceRegion" => String.t() | atom(),
        "ResourceTags" => list(ipam_resource_tag()),
        "ResourceType" => list(any()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type ipam_resource_cidr() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_client_vpn_target_network_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("ClientVpnEndpointId") => String.t() | atom(),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type associate_client_vpn_target_network_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_route_result() :: %{
        "Route" => transit_gateway_route()
      }
      
  """
  @type delete_transit_gateway_route_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      volume_status_event() :: %{
        "Description" => String.t() | atom(),
        "EventId" => String.t() | atom(),
        "EventType" => String.t() | atom(),
        "InstanceId" => String.t() | atom(),
        "NotAfter" => non_neg_integer(),
        "NotBefore" => non_neg_integer()
      }
      
  """
  @type volume_status_event() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      revoke_security_group_egress_result() :: %{
        "Return" => boolean(),
        "RevokedSecurityGroupRules" => list(revoked_security_group_rule()),
        "UnknownIpPermissions" => list(ip_permission())
      }
      
  """
  @type revoke_security_group_egress_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      efa_info() :: %{
        "MaximumEfaInterfaces" => integer()
      }
      
  """
  @type efa_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_market_options_request() :: %{
        "MarketType" => list(any()),
        "SpotOptions" => spot_market_options()
      }
      
  """
  @type instance_market_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_vpn_tunnel_request() :: %{
        optional("ApplyPendingMaintenance") => boolean(),
        optional("DryRun") => boolean(),
        required("VpnConnectionId") => String.t() | atom(),
        required("VpnTunnelOutsideIpAddress") => String.t() | atom()
      }
      
  """
  @type replace_vpn_tunnel_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reboot_instances_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceIds") => list(String.t() | atom())
      }
      
  """
  @type reboot_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_transit_gateway_route_table_result() :: %{
        "Association" => transit_gateway_association()
      }
      
  """
  @type disassociate_transit_gateway_route_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      volume_attachment() :: %{
        "AssociatedResource" => String.t() | atom(),
        "AttachTime" => non_neg_integer(),
        "DeleteOnTermination" => boolean(),
        "Device" => String.t() | atom(),
        "InstanceId" => String.t() | atom(),
        "InstanceOwningService" => String.t() | atom(),
        "State" => list(any()),
        "VolumeId" => String.t() | atom()
      }
      
  """
  @type volume_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      resource_type_request() :: %{
        "ResourceType" => list(any()),
        "ResourceTypeOptions" => list(resource_type_option())
      }
      
  """
  @type resource_type_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_transit_gateway_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Options") => modify_transit_gateway_options(),
        required("TransitGatewayId") => String.t() | atom()
      }
      
  """
  @type modify_transit_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_instance_uefi_data_result() :: %{
        "InstanceId" => String.t() | atom(),
        "UefiData" => String.t() | atom()
      }
      
  """
  @type get_instance_uefi_data_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_route_table_vpc_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("LocalGatewayRouteTableVpcAssociationIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_route_table_vpc_associations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      update_security_group_rule_descriptions_ingress_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type update_security_group_rule_descriptions_ingress_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_store_image_tasks_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("ImageIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_store_image_tasks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_connection_notification_request() :: %{
        optional("ConnectionEvents") => list(String.t() | atom()),
        optional("ConnectionNotificationArn") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("ConnectionNotificationId") => String.t() | atom()
      }
      
  """
  @type modify_vpc_endpoint_connection_notification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      terminate_instances_request() :: %{
        optional("DryRun") => boolean(),
        optional("Force") => boolean(),
        optional("SkipOsShutdown") => boolean(),
        required("InstanceIds") => list(String.t() | atom())
      }
      
  """
  @type terminate_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_interface_permission_state() :: %{
        "State" => list(any()),
        "StatusMessage" => String.t() | atom()
      }
      
  """
  @type network_interface_permission_state() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_service_payer_responsibility_request() :: %{
        optional("DryRun") => boolean(),
        required("PayerResponsibility") => list(any()),
        required("ServiceId") => String.t() | atom()
      }
      
  """
  @type modify_vpc_endpoint_service_payer_responsibility_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      access_scope_analysis_finding() :: %{
        "FindingComponents" => list(path_component()),
        "FindingId" => String.t() | atom(),
        "NetworkInsightsAccessScopeAnalysisId" => String.t() | atom(),
        "NetworkInsightsAccessScopeId" => String.t() | atom()
      }
      
  """
  @type access_scope_analysis_finding() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_count() :: %{
        "InstanceCount" => integer(),
        "State" => list(any())
      }
      
  """
  @type instance_count() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_usage_resource_type_option() :: %{
        "OptionName" => String.t() | atom(),
        "OptionValues" => list(String.t() | atom())
      }
      
  """
  @type image_usage_resource_type_option() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_scheduled_instances_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ScheduledInstanceIds") => list(String.t() | atom()),
        optional("SlotStartTimeRange") => slot_start_time_range_request()
      }
      
  """
  @type describe_scheduled_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      s3_storage() :: %{
        "AWSAccessKeyId" => String.t() | atom(),
        "Bucket" => String.t() | atom(),
        "Prefix" => String.t() | atom(),
        "UploadPolicy" => binary(),
        "UploadPolicySignature" => String.t() | atom()
      }
      
  """
  @type s3_storage() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_vpc_classic_link_request() :: %{
        optional("DryRun") => boolean(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type disable_vpc_classic_link_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_block_public_access_exclusion_request() :: %{
        optional("DryRun") => boolean(),
        required("ExclusionId") => String.t() | atom()
      }
      
  """
  @type delete_vpc_block_public_access_exclusion_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_attachment() :: %{
        "State" => list(any()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type vpc_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_image_block_public_access_request() :: %{
        optional("DryRun") => boolean(),
        required("ImageBlockPublicAccessState") => list(any())
      }
      
  """
  @type enable_image_block_public_access_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_volume_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("Attribute") => list(any()),
        required("VolumeId") => String.t() | atom()
      }
      
  """
  @type describe_volume_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      authorization_rule() :: %{
        "AccessAll" => boolean(),
        "ClientVpnEndpointId" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "DestinationCidr" => String.t() | atom(),
        "GroupId" => String.t() | atom(),
        "Status" => client_vpn_authorization_rule_status()
      }
      
  """
  @type authorization_rule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_nat_gateway_result() :: %{
        "ClientToken" => String.t() | atom(),
        "NatGateway" => nat_gateway()
      }
      
  """
  @type create_nat_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_table() :: %{
        "Associations" => list(route_table_association()),
        "OwnerId" => String.t() | atom(),
        "PropagatingVgws" => list(propagating_vgw()),
        "RouteTableId" => String.t() | atom(),
        "Routes" => list(route()),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type route_table() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_policy_table_result() :: %{
        "TransitGatewayPolicyTable" => transit_gateway_policy_table()
      }
      
  """
  @type create_transit_gateway_policy_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      added_principal() :: %{
        "Principal" => String.t() | atom(),
        "PrincipalType" => list(any()),
        "ServiceId" => String.t() | atom(),
        "ServicePermissionId" => String.t() | atom()
      }
      
  """
  @type added_principal() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_ipam_external_resource_verification_token_result() :: %{
        "IpamExternalResourceVerificationToken" => ipam_external_resource_verification_token()
      }
      
  """
  @type create_ipam_external_resource_verification_token_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_vpc_endpoint_service_configuration_request() :: %{
        optional("AcceptanceRequired") => boolean(),
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("GatewayLoadBalancerArns") => list(String.t() | atom()),
        optional("NetworkLoadBalancerArns") => list(String.t() | atom()),
        optional("PrivateDnsName") => String.t() | atom(),
        optional("SupportedIpAddressTypes") => list(String.t() | atom()),
        optional("SupportedRegions") => list(String.t() | atom()),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_vpc_endpoint_service_configuration_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_ebs_encryption_by_default_result() :: %{
        "EbsEncryptionByDefault" => boolean()
      }
      
  """
  @type enable_ebs_encryption_by_default_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_route_table_announcement() :: %{
        "AnnouncementDirection" => list(any()),
        "CoreNetworkId" => String.t() | atom(),
        "CreationTime" => non_neg_integer(),
        "PeerCoreNetworkId" => String.t() | atom(),
        "PeerTransitGatewayId" => String.t() | atom(),
        "PeeringAttachmentId" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TransitGatewayId" => String.t() | atom(),
        "TransitGatewayRouteTableAnnouncementId" => String.t() | atom(),
        "TransitGatewayRouteTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_route_table_announcement() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_maintenance_strategies() :: %{
        "CapacityRebalance" => spot_capacity_rebalance()
      }
      
  """
  @type spot_maintenance_strategies() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      block_device_mapping() :: %{
        "DeviceName" => String.t() | atom(),
        "Ebs" => ebs_block_device(),
        "NoDevice" => String.t() | atom(),
        "VirtualName" => String.t() | atom()
      }
      
  """
  @type block_device_mapping() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      request_spot_fleet_request() :: %{
        optional("DryRun") => boolean(),
        required("SpotFleetRequestConfig") => spot_fleet_request_config_data()
      }
      
  """
  @type request_spot_fleet_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_coip_pool_request() :: %{
        optional("DryRun") => boolean(),
        required("CoipPoolId") => String.t() | atom()
      }
      
  """
  @type delete_coip_pool_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      neuron_device_memory_info() :: %{
        "SizeInMiB" => integer()
      }
      
  """
  @type neuron_device_memory_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unmonitor_instances_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceIds") => list(String.t() | atom())
      }
      
  """
  @type unmonitor_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_groups_for_capacity_reservation_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("CapacityReservationId") => String.t() | atom()
      }
      
  """
  @type get_groups_for_capacity_reservation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      target_configuration_request() :: %{
        "InstanceCount" => integer(),
        "OfferingId" => String.t() | atom()
      }
      
  """
  @type target_configuration_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      local_gateway_route() :: %{
        "CoipPoolId" => String.t() | atom(),
        "DestinationCidrBlock" => String.t() | atom(),
        "DestinationPrefixListId" => String.t() | atom(),
        "LocalGatewayRouteTableArn" => String.t() | atom(),
        "LocalGatewayRouteTableId" => String.t() | atom(),
        "LocalGatewayVirtualInterfaceGroupId" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "State" => list(any()),
        "SubnetId" => String.t() | atom(),
        "Type" => list(any())
      }
      
  """
  @type local_gateway_route() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_fleet_instances_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("SpotFleetRequestId") => String.t() | atom()
      }
      
  """
  @type describe_spot_fleet_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_license_configuration() :: %{
        "LicenseConfigurationArn" => String.t() | atom()
      }
      
  """
  @type launch_template_license_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      request_spot_instances_request() :: %{
        optional("AvailabilityZoneGroup") => String.t() | atom(),
        optional("BlockDurationMinutes") => integer(),
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("InstanceCount") => integer(),
        optional("InstanceInterruptionBehavior") => list(any()),
        optional("LaunchGroup") => String.t() | atom(),
        optional("LaunchSpecification") => request_spot_launch_specification(),
        optional("SpotPrice") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("Type") => list(any()),
        optional("ValidFrom") => non_neg_integer(),
        optional("ValidUntil") => non_neg_integer()
      }
      
  """
  @type request_spot_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_launch_template_result() :: %{
        "LaunchTemplate" => launch_template()
      }
      
  """
  @type delete_launch_template_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_launch_template_version_result() :: %{
        "LaunchTemplateVersion" => launch_template_version(),
        "Warning" => validation_warning()
      }
      
  """
  @type create_launch_template_version_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      provision_ipam_pool_cidr_request() :: %{
        optional("Cidr") => String.t() | atom(),
        optional("CidrAuthorizationContext") => ipam_cidr_authorization_context(),
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("IpamExternalResourceVerificationTokenId") => String.t() | atom(),
        optional("NetmaskLength") => integer(),
        optional("VerificationMethod") => list(any()),
        required("IpamPoolId") => String.t() | atom()
      }
      
  """
  @type provision_ipam_pool_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_trunk_interface_associations_request() :: %{
        optional("AssociationIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_trunk_interface_associations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_ebs_block_device_request() :: %{
        "DeleteOnTermination" => boolean(),
        "Encrypted" => boolean(),
        "Iops" => integer(),
        "KmsKeyId" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "Throughput" => integer(),
        "VolumeSize" => integer(),
        "VolumeType" => list(any())
      }
      
  """
  @type fleet_ebs_block_device_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_enclave_certificate_iam_role_request() :: %{
        optional("DryRun") => boolean(),
        required("CertificateArn") => String.t() | atom(),
        required("RoleArn") => String.t() | atom()
      }
      
  """
  @type associate_enclave_certificate_iam_role_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_event_start_time_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceEventId") => String.t() | atom(),
        required("InstanceId") => String.t() | atom(),
        required("NotBefore") => non_neg_integer()
      }
      
  """
  @type modify_instance_event_start_time_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ebs_info() :: %{
        "AttachmentLimitType" => list(any()),
        "EbsOptimizedInfo" => ebs_optimized_info(),
        "EbsOptimizedSupport" => list(any()),
        "EncryptionSupport" => list(any()),
        "MaximumEbsAttachments" => integer(),
        "NvmeSupport" => list(any())
      }
      
  """
  @type ebs_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_vgw_route_propagation_request() :: %{
        optional("DryRun") => boolean(),
        required("GatewayId") => String.t() | atom(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type enable_vgw_route_propagation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_resource_cidr_request() :: %{
        optional("DestinationIpamScopeId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("CurrentIpamScopeId") => String.t() | atom(),
        required("Monitored") => boolean(),
        required("ResourceCidr") => String.t() | atom(),
        required("ResourceId") => String.t() | atom(),
        required("ResourceRegion") => String.t() | atom()
      }
      
  """
  @type modify_ipam_resource_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_subnet_cidr_block_request() :: %{
        required("AssociationId") => String.t() | atom()
      }
      
  """
  @type disassociate_subnet_cidr_block_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accelerator_count() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type accelerator_count() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      connection_notification() :: %{
        "ConnectionEvents" => list(String.t() | atom()),
        "ConnectionNotificationArn" => String.t() | atom(),
        "ConnectionNotificationId" => String.t() | atom(),
        "ConnectionNotificationState" => list(any()),
        "ConnectionNotificationType" => list(any()),
        "ServiceId" => String.t() | atom(),
        "ServiceRegion" => String.t() | atom(),
        "VpcEndpointId" => String.t() | atom()
      }
      
  """
  @type connection_notification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_default_subnet_result() :: %{
        "Subnet" => subnet()
      }
      
  """
  @type create_default_subnet_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      provision_ipam_byoasn_request() :: %{
        optional("DryRun") => boolean(),
        required("Asn") => String.t() | atom(),
        required("AsnAuthorizationContext") => asn_authorization_context(),
        required("IpamId") => String.t() | atom()
      }
      
  """
  @type provision_ipam_byoasn_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_route_table_associations_result() :: %{
        "Associations" => list(transit_gateway_route_table_association()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_route_table_associations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      register_transit_gateway_multicast_group_sources_result() :: %{
        "RegisteredMulticastGroupSources" => transit_gateway_multicast_registered_group_sources()
      }
      
  """
  @type register_transit_gateway_multicast_group_sources_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      vpc() :: %{
        "BlockPublicAccessStates" => block_public_access_states(),
        "CidrBlock" => String.t() | atom(),
        "CidrBlockAssociationSet" => list(vpc_cidr_block_association()),
        "DhcpOptionsId" => String.t() | atom(),
        "EncryptionControl" => vpc_encryption_control(),
        "InstanceTenancy" => list(any()),
        "Ipv6CidrBlockAssociationSet" => list(vpc_ipv6_cidr_block_association()),
        "IsDefault" => boolean(),
        "OwnerId" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type vpc() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_route_server_associations_result() :: %{
        "RouteServerAssociations" => list(route_server_association())
      }
      
  """
  @type get_route_server_associations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_bundle_task_request() :: %{
        optional("DryRun") => boolean(),
        required("BundleId") => String.t() | atom()
      }
      
  """
  @type cancel_bundle_task_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_capacity_reservation_billing_owner_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type disassociate_capacity_reservation_billing_owner_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_images_result() :: %{
        "Images" => list(image()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_images_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_route_server_result() :: %{
        "RouteServerAssociation" => route_server_association()
      }
      
  """
  @type associate_route_server_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      active_instance() :: %{
        "InstanceHealth" => list(any()),
        "InstanceId" => String.t() | atom(),
        "InstanceType" => String.t() | atom(),
        "SpotInstanceRequestId" => String.t() | atom()
      }
      
  """
  @type active_instance() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_network_performance_options_request() :: %{
        "BandwidthWeighting" => list(any())
      }
      
  """
  @type launch_template_network_performance_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_external_resource_verification_token() :: %{
        "IpamArn" => String.t() | atom(),
        "IpamExternalResourceVerificationTokenArn" => String.t() | atom(),
        "IpamExternalResourceVerificationTokenId" => String.t() | atom(),
        "IpamId" => String.t() | atom(),
        "IpamRegion" => String.t() | atom(),
        "NotAfter" => non_neg_integer(),
        "State" => list(any()),
        "Status" => list(any()),
        "Tags" => list(tag()),
        "TokenName" => String.t() | atom(),
        "TokenValue" => String.t() | atom()
      }
      
  """
  @type ipam_external_resource_verification_token() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_image_license_configuration_request() :: %{
        "LicenseConfigurationArn" => String.t() | atom()
      }
      
  """
  @type import_image_license_configuration_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_data() :: %{
        "Comment" => String.t() | atom(),
        "UploadEnd" => non_neg_integer(),
        "UploadSize" => float(),
        "UploadStart" => non_neg_integer()
      }
      
  """
  @type client_data() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_host_reservation_result() :: %{
        "ClientToken" => String.t() | atom(),
        "CurrencyCode" => list(any()),
        "Purchase" => list(purchase()),
        "TotalHourlyPrice" => String.t() | atom(),
        "TotalUpfrontPrice" => String.t() | atom()
      }
      
  """
  @type purchase_host_reservation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase1_encryption_algorithms_request_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type phase1_encryption_algorithms_request_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_scope() :: %{
        "Description" => String.t() | atom(),
        "IpamArn" => String.t() | atom(),
        "IpamRegion" => String.t() | atom(),
        "IpamScopeArn" => String.t() | atom(),
        "IpamScopeId" => String.t() | atom(),
        "IpamScopeType" => list(any()),
        "IsDefault" => boolean(),
        "OwnerId" => String.t() | atom(),
        "PoolCount" => integer(),
        "State" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type ipam_scope() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_fleet_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Context") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("ExcessCapacityTerminationPolicy") => list(any()),
        optional("OnDemandOptions") => on_demand_options_request(),
        optional("ReplaceUnhealthyInstances") => boolean(),
        optional("SpotOptions") => spot_options_request(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("TerminateInstancesWithExpiration") => boolean(),
        optional("Type") => list(any()),
        optional("ValidFrom") => non_neg_integer(),
        optional("ValidUntil") => non_neg_integer(),
        required("LaunchTemplateConfigs") => list(fleet_launch_template_config_request()),
        required("TargetCapacitySpecification") => target_capacity_specification_request()
      }
      
  """
  @type create_fleet_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_ipam_organization_admin_account_request() :: %{
        optional("DryRun") => boolean(),
        required("DelegatedAdminAccountId") => String.t() | atom()
      }
      
  """
  @type disable_ipam_organization_admin_account_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_flow_logs_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filter") => list(filter()),
        optional("FlowLogIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_flow_logs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_commitment_info() :: %{
        "CommitmentEndDate" => non_neg_integer(),
        "CommittedInstanceCount" => integer()
      }
      
  """
  @type capacity_reservation_commitment_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_route_enforcement_options() :: %{
        "Enforced" => boolean()
      }
      
  """
  @type client_route_enforcement_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      elastic_gpu_association() :: %{
        "ElasticGpuAssociationId" => String.t() | atom(),
        "ElasticGpuAssociationState" => String.t() | atom(),
        "ElasticGpuAssociationTime" => String.t() | atom(),
        "ElasticGpuId" => String.t() | atom()
      }
      
  """
  @type elastic_gpu_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_peering_attachment_options() :: %{
        "DynamicRouting" => list(any())
      }
      
  """
  @type transit_gateway_peering_attachment_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attach_vpn_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("VpcId") => String.t() | atom(),
        required("VpnGatewayId") => String.t() | atom()
      }
      
  """
  @type attach_vpn_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_instance_connect_endpoint_result() :: %{
        "ClientToken" => String.t() | atom(),
        "InstanceConnectEndpoint" => ec2_instance_connect_endpoint()
      }
      
  """
  @type create_instance_connect_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      detach_classic_link_vpc_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type detach_classic_link_vpc_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      assign_private_nat_gateway_address_request() :: %{
        optional("DryRun") => boolean(),
        optional("PrivateIpAddressCount") => integer(),
        optional("PrivateIpAddresses") => list(String.t() | atom()),
        required("NatGatewayId") => String.t() | atom()
      }
      
  """
  @type assign_private_nat_gateway_address_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_ipam_scope_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("IpamId") => String.t() | atom()
      }
      
  """
  @type create_ipam_scope_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      private_dns_name_options_response() :: %{
        "EnableResourceNameDnsAAAARecord" => boolean(),
        "EnableResourceNameDnsARecord" => boolean(),
        "HostnameType" => list(any())
      }
      
  """
  @type private_dns_name_options_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reset_address_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("AllocationId") => String.t() | atom(),
        required("Attribute") => list(any())
      }
      
  """
  @type reset_address_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      federated_authentication_request() :: %{
        "SAMLProviderArn" => String.t() | atom(),
        "SelfServiceSAMLProviderArn" => String.t() | atom()
      }
      
  """
  @type federated_authentication_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      elastic_gpu_specification() :: %{
        "Type" => String.t() | atom()
      }
      
  """
  @type elastic_gpu_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_snapshot_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Location") => list(any()),
        optional("OutpostArn") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("VolumeId") => String.t() | atom()
      }
      
  """
  @type create_snapshot_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_route_table_announcement_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("PeeringAttachmentId") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_route_table_announcement_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      associate_nat_gateway_address_result() :: %{
        "NatGatewayAddresses" => list(nat_gateway_address()),
        "NatGatewayId" => String.t() | atom()
      }
      
  """
  @type associate_nat_gateway_address_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipv6_prefix_specification() :: %{
        "Ipv6Prefix" => String.t() | atom()
      }
      
  """
  @type ipv6_prefix_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_endpoint() :: %{
        "EniAddress" => String.t() | atom(),
        "EniId" => String.t() | atom(),
        "FailureReason" => String.t() | atom(),
        "RouteServerEndpointId" => String.t() | atom(),
        "RouteServerId" => String.t() | atom(),
        "State" => list(any()),
        "SubnetId" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type route_server_endpoint() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_image_references_result() :: %{
        "ImageReferences" => list(image_reference()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_image_references_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_route_table_result() :: %{
        "LocalGatewayRouteTable" => local_gateway_route_table()
      }
      
  """
  @type create_local_gateway_route_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_cpu_options_request() :: %{
        "AmdSevSnp" => list(any()),
        "CoreCount" => integer(),
        "ThreadsPerCore" => integer()
      }
      
  """
  @type launch_template_cpu_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_vpc_peering_connection_request() :: %{
        optional("DryRun") => boolean(),
        required("VpcPeeringConnectionId") => String.t() | atom()
      }
      
  """
  @type accept_vpc_peering_connection_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_instance_event_window_request() :: %{
        optional("DryRun") => boolean(),
        optional("ForceDelete") => boolean(),
        required("InstanceEventWindowId") => String.t() | atom()
      }
      
  """
  @type delete_instance_event_window_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_block_extension() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "CapacityBlockExtensionDurationHours" => integer(),
        "CapacityBlockExtensionEndDate" => non_neg_integer(),
        "CapacityBlockExtensionOfferingId" => String.t() | atom(),
        "CapacityBlockExtensionPurchaseDate" => non_neg_integer(),
        "CapacityBlockExtensionStartDate" => non_neg_integer(),
        "CapacityBlockExtensionStatus" => list(any()),
        "CapacityReservationId" => String.t() | atom(),
        "CurrencyCode" => String.t() | atom(),
        "InstanceCount" => integer(),
        "InstanceType" => String.t() | atom(),
        "UpfrontFee" => String.t() | atom()
      }
      
  """
  @type capacity_block_extension() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_transit_gateway_multicast_domain_request() :: %{
        optional("DryRun") => boolean(),
        required("SubnetIds") => list(String.t() | atom()),
        required("TransitGatewayAttachmentId") => String.t() | atom(),
        required("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type disassociate_transit_gateway_multicast_domain_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      import_image_task() :: %{
        "Architecture" => String.t() | atom(),
        "BootMode" => list(any()),
        "Description" => String.t() | atom(),
        "Encrypted" => boolean(),
        "Hypervisor" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "ImportTaskId" => String.t() | atom(),
        "KmsKeyId" => String.t() | atom(),
        "LicenseSpecifications" => list(import_image_license_configuration_response()),
        "LicenseType" => String.t() | atom(),
        "Platform" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "SnapshotDetails" => list(snapshot_detail()),
        "Status" => String.t() | atom(),
        "StatusMessage" => String.t() | atom(),
        "Tags" => list(tag()),
        "UsageOperation" => String.t() | atom()
      }
      
  """
  @type import_image_task() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reset_snapshot_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("Attribute") => list(any()),
        required("SnapshotId") => String.t() | atom()
      }
      
  """
  @type reset_snapshot_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      event_information() :: %{
        "EventDescription" => String.t() | atom(),
        "EventSubType" => String.t() | atom(),
        "InstanceId" => String.t() | atom()
      }
      
  """
  @type event_information() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      pci_id() :: %{
        "DeviceId" => String.t() | atom(),
        "SubsystemId" => String.t() | atom(),
        "SubsystemVendorId" => String.t() | atom(),
        "VendorId" => String.t() | atom()
      }
      
  """
  @type pci_id() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      v_cpu_count_range() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type v_cpu_count_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_info() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "InstanceType" => String.t() | atom(),
        "Tenancy" => list(any())
      }
      
  """
  @type capacity_reservation_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoints_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VpcEndpointIds") => list(String.t() | atom())
      }
      
  """
  @type describe_vpc_endpoints_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_request() :: %{
        "InstanceCount" => integer(),
        "PurchaseToken" => String.t() | atom()
      }
      
  """
  @type purchase_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_route_server_endpoint_request() :: %{
        optional("DryRun") => boolean(),
        required("RouteServerEndpointId") => String.t() | atom()
      }
      
  """
  @type delete_route_server_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_block_device_mapping() :: %{
        "DeviceName" => String.t() | atom(),
        "Ebs" => ebs_instance_block_device()
      }
      
  """
  @type instance_block_device_mapping() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_insights_paths_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NetworkInsightsPathIds") => list(String.t() | atom()),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_network_insights_paths_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_image_from_recycle_bin_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type restore_image_from_recycle_bin_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_interface_permission_result() :: %{
        "InterfacePermission" => network_interface_permission()
      }
      
  """
  @type create_network_interface_permission_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_host_reservation_purchase_preview_result() :: %{
        "CurrencyCode" => list(any()),
        "Purchase" => list(purchase()),
        "TotalHourlyPrice" => String.t() | atom(),
        "TotalUpfrontPrice" => String.t() | atom()
      }
      
  """
  @type get_host_reservation_purchase_preview_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      search_transit_gateway_multicast_groups_result() :: %{
        "MulticastGroups" => list(transit_gateway_multicast_group()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type search_transit_gateway_multicast_groups_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_ipv6_prefix() :: %{
        "Ipv6Prefix" => String.t() | atom()
      }
      
  """
  @type instance_ipv6_prefix() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      assign_ipv6_addresses_request() :: %{
        optional("Ipv6AddressCount") => integer(),
        optional("Ipv6Addresses") => list(String.t() | atom()),
        optional("Ipv6PrefixCount") => integer(),
        optional("Ipv6Prefixes") => list(String.t() | atom()),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type assign_ipv6_addresses_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      private_dns_details() :: %{
        "PrivateDnsName" => String.t() | atom()
      }
      
  """
  @type private_dns_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_images_request() :: %{
        optional("DryRun") => boolean(),
        optional("ExecutableUsers") => list(String.t() | atom()),
        optional("Filters") => list(filter()),
        optional("ImageIds") => list(String.t() | atom()),
        optional("IncludeDeprecated") => boolean(),
        optional("IncludeDisabled") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("Owners") => list(String.t() | atom())
      }
      
  """
  @type describe_images_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_iam_instance_profile_specification_request() :: %{
        "Arn" => String.t() | atom(),
        "Name" => String.t() | atom()
      }
      
  """
  @type launch_template_iam_instance_profile_specification_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_volume_permission() :: %{
        "Group" => list(any()),
        "UserId" => String.t() | atom()
      }
      
  """
  @type create_volume_permission() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_event_window() :: %{
        "AssociationTarget" => instance_event_window_association_target(),
        "CronExpression" => String.t() | atom(),
        "InstanceEventWindowId" => String.t() | atom(),
        "Name" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TimeRanges" => list(instance_event_window_time_range())
      }
      
  """
  @type instance_event_window() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      connection_log_response_options() :: %{
        "CloudwatchLogGroup" => String.t() | atom(),
        "CloudwatchLogStream" => String.t() | atom(),
        "Enabled" => boolean()
      }
      
  """
  @type connection_log_response_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      copy_image_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("CopyImageTags") => boolean(),
        optional("Description") => String.t() | atom(),
        optional("DestinationAvailabilityZone") => String.t() | atom(),
        optional("DestinationAvailabilityZoneId") => String.t() | atom(),
        optional("DestinationOutpostArn") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Encrypted") => boolean(),
        optional("KmsKeyId") => String.t() | atom(),
        optional("SnapshotCopyCompletionDurationMinutes") => float(),
        optional("TagSpecifications") => list(tag_specification()),
        required("Name") => String.t() | atom(),
        required("SourceImageId") => String.t() | atom(),
        required("SourceRegion") => String.t() | atom()
      }
      
  """
  @type copy_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_ipam_pool_result() :: %{
        "IpamPool" => ipam_pool()
      }
      
  """
  @type delete_ipam_pool_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ebs_instance_block_device_specification() :: %{
        "DeleteOnTermination" => boolean(),
        "VolumeId" => String.t() | atom()
      }
      
  """
  @type ebs_instance_block_device_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_security_group_references_request() :: %{
        optional("DryRun") => boolean(),
        required("GroupId") => list(String.t() | atom())
      }
      
  """
  @type describe_security_group_references_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_security_group_vpc_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_security_group_vpc_associations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_security_groups_result() :: %{
        "NextToken" => String.t() | atom(),
        "SecurityGroups" => list(security_group())
      }
      
  """
  @type describe_security_groups_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_fleet_request() :: %{
        optional("Context") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("ExcessCapacityTerminationPolicy") => list(any()),
        optional("LaunchTemplateConfigs") => list(fleet_launch_template_config_request()),
        optional("TargetCapacitySpecification") => target_capacity_specification_request(),
        required("FleetId") => String.t() | atom()
      }
      
  """
  @type modify_fleet_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      revoke_client_vpn_ingress_result() :: %{
        "Status" => client_vpn_authorization_rule_status()
      }
      
  """
  @type revoke_client_vpn_ingress_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      baseline_performance_factors_request() :: %{
        "Cpu" => cpu_performance_factor_request()
      }
      
  """
  @type baseline_performance_factors_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      register_transit_gateway_multicast_group_members_result() :: %{
        "RegisteredMulticastGroupMembers" => transit_gateway_multicast_registered_group_members()
      }
      
  """
  @type register_transit_gateway_multicast_group_members_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_transit_gateway_attachments_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayAttachments" => list(transit_gateway_attachment())
      }
      
  """
  @type describe_transit_gateway_attachments_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_fleet_request_config() :: %{
        "ActivityStatus" => list(any()),
        "CreateTime" => non_neg_integer(),
        "SpotFleetRequestConfig" => spot_fleet_request_config_data(),
        "SpotFleetRequestId" => String.t() | atom(),
        "SpotFleetRequestState" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type spot_fleet_request_config() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_store_image_tasks_result() :: %{
        "NextToken" => String.t() | atom(),
        "StoreImageTaskResults" => list(store_image_task_result())
      }
      
  """
  @type describe_store_image_tasks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_vpc_attachment_request_options() :: %{
        "ApplianceModeSupport" => list(any()),
        "DnsSupport" => list(any()),
        "Ipv6Support" => list(any()),
        "SecurityGroupReferencingSupport" => list(any())
      }
      
  """
  @type create_transit_gateway_vpc_attachment_request_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_key_pairs_result() :: %{
        "KeyPairs" => list(key_pair_info())
      }
      
  """
  @type describe_key_pairs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      recurring_charge() :: %{
        "Amount" => float(),
        "Frequency" => list(any())
      }
      
  """
  @type recurring_charge() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ebs_encryption_by_default_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type get_ebs_encryption_by_default_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      account_attribute_value() :: %{
        "AttributeValue" => String.t() | atom()
      }
      
  """
  @type account_attribute_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_capacity_reservation_billing_owner_request() :: %{
        optional("DryRun") => boolean(),
        required("CapacityReservationId") => String.t() | atom(),
        required("UnusedReservationBillingOwnerId") => String.t() | atom()
      }
      
  """
  @type associate_capacity_reservation_billing_owner_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_internet_gateways_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("InternetGatewayIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_internet_gateways_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_subnet_attribute_request() :: %{
        optional("AssignIpv6AddressOnCreation") => attribute_boolean_value(),
        optional("CustomerOwnedIpv4Pool") => String.t() | atom(),
        optional("DisableLniAtDeviceIndex") => attribute_boolean_value(),
        optional("EnableDns64") => attribute_boolean_value(),
        optional("EnableLniAtDeviceIndex") => integer(),
        optional("EnableResourceNameDnsAAAARecordOnLaunch") => attribute_boolean_value(),
        optional("EnableResourceNameDnsARecordOnLaunch") => attribute_boolean_value(),
        optional("MapCustomerOwnedIpOnLaunch") => attribute_boolean_value(),
        optional("MapPublicIpOnLaunch") => attribute_boolean_value(),
        optional("PrivateDnsHostnameTypeOnLaunch") => list(any()),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type modify_subnet_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_acl_entry_request() :: %{
        optional("CidrBlock") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("IcmpTypeCode") => icmp_type_code(),
        optional("Ipv6CidrBlock") => String.t() | atom(),
        optional("PortRange") => port_range(),
        required("Egress") => boolean(),
        required("NetworkAclId") => String.t() | atom(),
        required("Protocol") => String.t() | atom(),
        required("RuleAction") => list(any()),
        required("RuleNumber") => integer()
      }
      
  """
  @type create_network_acl_entry_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_fast_snapshot_restores_request() :: %{
        optional("DryRun") => boolean(),
        required("AvailabilityZones") => list(String.t() | atom()),
        required("SourceSnapshotIds") => list(String.t() | atom())
      }
      
  """
  @type disable_fast_snapshot_restores_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_pool_result() :: %{
        "IpamPool" => ipam_pool()
      }
      
  """
  @type modify_ipam_pool_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_endpoint_target() :: %{
        "VerifiedAccessEndpointId" => String.t() | atom(),
        "VerifiedAccessEndpointTargetDns" => String.t() | atom(),
        "VerifiedAccessEndpointTargetIpAddress" => String.t() | atom()
      }
      
  """
  @type verified_access_endpoint_target() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      managed_prefix_list() :: %{
        "AddressFamily" => String.t() | atom(),
        "MaxEntries" => integer(),
        "OwnerId" => String.t() | atom(),
        "PrefixListArn" => String.t() | atom(),
        "PrefixListId" => String.t() | atom(),
        "PrefixListName" => String.t() | atom(),
        "State" => list(any()),
        "StateMessage" => String.t() | atom(),
        "Tags" => list(tag()),
        "Version" => float()
      }
      
  """
  @type managed_prefix_list() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_volume_i_o_request() :: %{
        optional("DryRun") => boolean(),
        required("VolumeId") => String.t() | atom()
      }
      
  """
  @type enable_volume_i_o_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      remove_ipam_operating_region() :: %{
        "RegionName" => String.t() | atom()
      }
      
  """
  @type remove_ipam_operating_region() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unassign_ipv6_addresses_result() :: %{
        "NetworkInterfaceId" => String.t() | atom(),
        "UnassignedIpv6Addresses" => list(String.t() | atom()),
        "UnassignedIpv6Prefixes" => list(String.t() | atom())
      }
      
  """
  @type unassign_ipv6_addresses_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_route_table_vpc_association_result() :: %{
        "LocalGatewayRouteTableVpcAssociation" => local_gateway_route_table_vpc_association()
      }
      
  """
  @type create_local_gateway_route_table_vpc_association_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_route_server_endpoint_result() :: %{
        "RouteServerEndpoint" => route_server_endpoint()
      }
      
  """
  @type create_route_server_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_image_request() :: %{
        optional("Architecture") => String.t() | atom(),
        optional("BootMode") => list(any()),
        optional("ClientData") => client_data(),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DiskContainers") => list(image_disk_container()),
        optional("DryRun") => boolean(),
        optional("Encrypted") => boolean(),
        optional("Hypervisor") => String.t() | atom(),
        optional("KmsKeyId") => String.t() | atom(),
        optional("LicenseSpecifications") => list(import_image_license_configuration_request()),
        optional("LicenseType") => String.t() | atom(),
        optional("Platform") => String.t() | atom(),
        optional("RoleName") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("UsageOperation") => String.t() | atom()
      }
      
  """
  @type import_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_endpoint_service_configurations_request() :: %{
        optional("DryRun") => boolean(),
        required("ServiceIds") => list(String.t() | atom())
      }
      
  """
  @type delete_vpc_endpoint_service_configurations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_volumes_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VolumeIds") => list(String.t() | atom())
      }
      
  """
  @type describe_volumes_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unassign_private_nat_gateway_address_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxDrainDurationSeconds") => integer(),
        required("NatGatewayId") => String.t() | atom(),
        required("PrivateIpAddresses") => list(String.t() | atom())
      }
      
  """
  @type unassign_private_nat_gateway_address_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_license_configuration_request() :: %{
        "LicenseConfigurationArn" => String.t() | atom()
      }
      
  """
  @type launch_template_license_configuration_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_policy_table_entries_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("TransitGatewayPolicyTableId") => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_policy_table_entries_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_attachment_propagation() :: %{
        "State" => list(any()),
        "TransitGatewayRouteTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_attachment_propagation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      provision_byoip_cidr_result() :: %{
        "ByoipCidr" => byoip_cidr()
      }
      
  """
  @type provision_byoip_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_instance_connect_endpoint_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceConnectEndpointId") => String.t() | atom()
      }
      
  """
  @type delete_instance_connect_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_policy_table_entries_result() :: %{
        "TransitGatewayPolicyTableEntries" => list(transit_gateway_policy_table_entry())
      }
      
  """
  @type get_transit_gateway_policy_table_entries_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_metadata_options_result() :: %{
        "InstanceId" => String.t() | atom(),
        "InstanceMetadataOptions" => instance_metadata_options_response()
      }
      
  """
  @type modify_instance_metadata_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_network_performance_request() :: %{
        optional("DryRun") => boolean(),
        required("BandwidthWeighting") => list(any()),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type modify_instance_network_performance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_interface() :: %{
        "AssociatedSubnets" => list(String.t() | atom()),
        "Association" => network_interface_association(),
        "Attachment" => network_interface_attachment(),
        "AvailabilityZone" => String.t() | atom(),
        "ConnectionTrackingConfiguration" => connection_tracking_configuration(),
        "DenyAllIgwTraffic" => boolean(),
        "Description" => String.t() | atom(),
        "Groups" => list(group_identifier()),
        "InterfaceType" => list(any()),
        "Ipv4Prefixes" => list(ipv4_prefix_specification()),
        "Ipv6Address" => String.t() | atom(),
        "Ipv6Addresses" => list(network_interface_ipv6_address()),
        "Ipv6Native" => boolean(),
        "Ipv6Prefixes" => list(ipv6_prefix_specification()),
        "MacAddress" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "Operator" => operator_response(),
        "OutpostArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "PrivateDnsName" => String.t() | atom(),
        "PrivateIpAddress" => String.t() | atom(),
        "PrivateIpAddresses" => list(network_interface_private_ip_address()),
        "PublicDnsName" => String.t() | atom(),
        "PublicIpDnsNameOptions" => public_ip_dns_name_options(),
        "RequesterId" => String.t() | atom(),
        "RequesterManaged" => boolean(),
        "SourceDestCheck" => boolean(),
        "Status" => list(any()),
        "SubnetId" => String.t() | atom(),
        "TagSet" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type network_interface() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_target() :: %{
        "CapacityReservationId" => String.t() | atom(),
        "CapacityReservationResourceGroupArn" => String.t() | atom()
      }
      
  """
  @type capacity_reservation_target() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_route_table_vpc_association_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("LocalGatewayRouteTableId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type create_local_gateway_route_table_vpc_association_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      get_console_screenshot_result() :: %{
        "ImageData" => String.t() | atom(),
        "InstanceId" => String.t() | atom()
      }
      
  """
  @type get_console_screenshot_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_peering_connection_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type delete_vpc_peering_connection_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_principal_id_format_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("Resources") => list(String.t() | atom())
      }
      
  """
  @type describe_principal_id_format_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      conversion_task() :: %{
        "ConversionTaskId" => String.t() | atom(),
        "ExpirationTime" => String.t() | atom(),
        "ImportInstance" => import_instance_task_details(),
        "ImportVolume" => import_volume_task_details(),
        "State" => list(any()),
        "StatusMessage" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type conversion_task() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      load_permission_request() :: %{
        "Group" => list(any()),
        "UserId" => String.t() | atom()
      }
      
  """
  @type load_permission_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_security_group_vpc_result() :: %{
        "State" => list(any())
      }
      
  """
  @type disassociate_security_group_vpc_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_route_server_endpoints_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("RouteServerEndpointIds") => list(String.t() | atom())
      }
      
  """
  @type describe_route_server_endpoints_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      nat_gateway_address() :: %{
        "AllocationId" => String.t() | atom(),
        "AssociationId" => String.t() | atom(),
        "FailureMessage" => String.t() | atom(),
        "IsPrimary" => boolean(),
        "NetworkInterfaceId" => String.t() | atom(),
        "PrivateIp" => String.t() | atom(),
        "PublicIp" => String.t() | atom(),
        "Status" => list(any())
      }
      
  """
  @type nat_gateway_address() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      association_status() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type association_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_scopes_result() :: %{
        "IpamScopes" => list(ipam_scope()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_ipam_scopes_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_aws_network_performance_data_result() :: %{
        "DataResponses" => list(data_response()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_aws_network_performance_data_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      subnet() :: %{
        "AssignIpv6AddressOnCreation" => boolean(),
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "AvailableIpAddressCount" => integer(),
        "BlockPublicAccessStates" => block_public_access_states(),
        "CidrBlock" => String.t() | atom(),
        "CustomerOwnedIpv4Pool" => String.t() | atom(),
        "DefaultForAz" => boolean(),
        "EnableDns64" => boolean(),
        "EnableLniAtDeviceIndex" => integer(),
        "Ipv6CidrBlockAssociationSet" => list(subnet_ipv6_cidr_block_association()),
        "Ipv6Native" => boolean(),
        "MapCustomerOwnedIpOnLaunch" => boolean(),
        "MapPublicIpOnLaunch" => boolean(),
        "OutpostArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "PrivateDnsNameOptionsOnLaunch" => private_dns_name_options_on_launch(),
        "State" => list(any()),
        "SubnetArn" => String.t() | atom(),
        "SubnetId" => String.t() | atom(),
        "Tags" => list(tag()),
        "Type" => String.t() | atom(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type subnet() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_vgw_route_propagation_request() :: %{
        optional("DryRun") => boolean(),
        required("GatewayId") => String.t() | atom(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type disable_vgw_route_propagation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_spot_fleet_requests_success_item() :: %{
        "CurrentSpotFleetRequestState" => list(any()),
        "PreviousSpotFleetRequestState" => list(any()),
        "SpotFleetRequestId" => String.t() | atom()
      }
      
  """
  @type cancel_spot_fleet_requests_success_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_nat_gateways_result() :: %{
        "NatGateways" => list(nat_gateway()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_nat_gateways_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      mac_modification_task() :: %{
        "InstanceId" => String.t() | atom(),
        "MacModificationTaskId" => String.t() | atom(),
        "MacSystemIntegrityProtectionConfig" => mac_system_integrity_protection_configuration(),
        "StartTime" => non_neg_integer(),
        "Tags" => list(tag()),
        "TaskState" => list(any()),
        "TaskType" => list(any())
      }
      
  """
  @type mac_modification_task() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_groups_for_capacity_reservation_result() :: %{
        "CapacityReservationGroups" => list(capacity_reservation_group()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_groups_for_capacity_reservation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      add_prefix_list_entry() :: %{
        "Cidr" => String.t() | atom(),
        "Description" => String.t() | atom()
      }
      
  """
  @type add_prefix_list_entry() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      successful_queued_purchase_deletion() :: %{
        "ReservedInstancesId" => String.t() | atom()
      }
      
  """
  @type successful_queued_purchase_deletion() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_instance_market_options_request() :: %{
        "MarketType" => list(any()),
        "SpotOptions" => launch_template_spot_market_options_request()
      }
      
  """
  @type launch_template_instance_market_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_key_pair_result() :: %{
        "KeyPairId" => String.t() | atom(),
        "Return" => boolean()
      }
      
  """
  @type delete_key_pair_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      public_ipv4_pool_range() :: %{
        "AddressCount" => integer(),
        "AvailableAddressCount" => integer(),
        "FirstAddress" => String.t() | atom(),
        "LastAddress" => String.t() | atom()
      }
      
  """
  @type public_ipv4_pool_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_multicast_domain_associations() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceOwnerId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "Subnets" => list(subnet_association()),
        "TransitGatewayAttachmentId" => String.t() | atom(),
        "TransitGatewayMulticastDomainId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_multicast_domain_associations() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_transit_gateway_peering_attachment_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type reject_transit_gateway_peering_attachment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_discovered_resource_cidrs_result() :: %{
        "IpamDiscoveredResourceCidrs" => list(ipam_discovered_resource_cidr()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_ipam_discovered_resource_cidrs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_moving_addresses_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("PublicIps") => list(String.t() | atom())
      }
      
  """
  @type describe_moving_addresses_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_image_usage_report_result() :: %{
        "ReportId" => String.t() | atom()
      }
      
  """
  @type create_image_usage_report_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      subnet_ipv6_cidr_block_association() :: %{
        "AssociationId" => String.t() | atom(),
        "IpSource" => list(any()),
        "Ipv6AddressAttribute" => list(any()),
        "Ipv6CidrBlock" => String.t() | atom(),
        "Ipv6CidrBlockState" => subnet_cidr_block_state()
      }
      
  """
  @type subnet_ipv6_cidr_block_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      analysis_load_balancer_listener() :: %{
        "InstancePort" => integer(),
        "LoadBalancerPort" => integer()
      }
      
  """
  @type analysis_load_balancer_listener() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_encryption_control_exclusion() :: %{
        optional("State") => list(any()),
        optional("StateMessage") => String.t() | atom()
      }
      
  """
  @type vpc_encryption_control_exclusion() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      memory_gi_b_per_v_cpu_request() :: %{
        "Max" => float(),
        "Min" => float()
      }
      
  """
  @type memory_gi_b_per_v_cpu_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_policy_rule() :: %{
        "DestinationCidrBlock" => String.t() | atom(),
        "DestinationPortRange" => String.t() | atom(),
        "MetaData" => transit_gateway_policy_rule_meta_data(),
        "Protocol" => String.t() | atom(),
        "SourceCidrBlock" => String.t() | atom(),
        "SourcePortRange" => String.t() | atom()
      }
      
  """
  @type transit_gateway_policy_rule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_price_history_request() :: %{
        optional("AvailabilityZone") => String.t() | atom(),
        optional("AvailabilityZoneId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EndTime") => non_neg_integer(),
        optional("Filters") => list(filter()),
        optional("InstanceTypes") => list(list(any())()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ProductDescriptions") => list(String.t() | atom()),
        optional("StartTime") => non_neg_integer()
      }
      
  """
  @type describe_spot_price_history_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_subnet_cidr_reservation_result() :: %{
        "DeletedSubnetCidrReservation" => subnet_cidr_reservation()
      }
      
  """
  @type delete_subnet_cidr_reservation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_client_vpn_target_network_request() :: %{
        optional("DryRun") => boolean(),
        required("AssociationId") => String.t() | atom(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type disassociate_client_vpn_target_network_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_client_vpn_target_networks_request() :: %{
        optional("AssociationIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type describe_client_vpn_target_networks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_endpoint_rds_options() :: %{
        "Port" => integer(),
        "Protocol" => list(any()),
        "RdsDbClusterArn" => String.t() | atom(),
        "RdsDbInstanceArn" => String.t() | atom(),
        "RdsDbProxyArn" => String.t() | atom(),
        "RdsEndpoint" => String.t() | atom(),
        "SubnetIds" => list(String.t() | atom())
      }
      
  """
  @type verified_access_endpoint_rds_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_fleet_instances_response() :: %{
        "ActiveInstances" => list(active_instance()),
        "NextToken" => String.t() | atom(),
        "SpotFleetRequestId" => String.t() | atom()
      }
      
  """
  @type describe_spot_fleet_instances_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_ipam_pool_result() :: %{
        "IpamPool" => ipam_pool()
      }
      
  """
  @type create_ipam_pool_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_log_cloud_watch_logs_destination_options() :: %{
        "Enabled" => boolean(),
        "LogGroup" => String.t() | atom()
      }
      
  """
  @type verified_access_log_cloud_watch_logs_destination_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      disable_image_request() :: %{
        optional("DryRun") => boolean(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type disable_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deregister_image_result() :: %{
        "DeleteSnapshotResults" => list(delete_snapshot_return_code()),
        "Return" => boolean()
      }
      
  """
  @type deregister_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_spot_datafeed_subscription_result() :: %{
        "SpotDatafeedSubscription" => spot_datafeed_subscription()
      }
      
  """
  @type create_spot_datafeed_subscription_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_private_dns_name_options_request() :: %{
        optional("DryRun") => boolean(),
        optional("EnableResourceNameDnsAAAARecord") => boolean(),
        optional("EnableResourceNameDnsARecord") => boolean(),
        optional("PrivateDnsHostnameType") => list(any()),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type modify_private_dns_name_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      subnet_configuration() :: %{
        "Ipv4" => String.t() | atom(),
        "Ipv6" => String.t() | atom(),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type subnet_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cpu_options_request() :: %{
        "AmdSevSnp" => list(any()),
        "CoreCount" => integer(),
        "ThreadsPerCore" => integer()
      }
      
  """
  @type cpu_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_flow_logs_result() :: %{
        "ClientToken" => String.t() | atom(),
        "FlowLogIds" => list(String.t() | atom()),
        "Unsuccessful" => list(unsuccessful_item())
      }
      
  """
  @type create_flow_logs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_block_status() :: %{
        "CapacityBlockId" => String.t() | atom(),
        "CapacityReservationStatuses" => list(capacity_reservation_status()),
        "InterconnectStatus" => list(any()),
        "TotalAvailableCapacity" => integer(),
        "TotalCapacity" => integer(),
        "TotalUnavailableCapacity" => integer()
      }
      
  """
  @type capacity_block_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      neuron_device_info() :: %{
        "CoreInfo" => neuron_device_core_info(),
        "Count" => integer(),
        "MemoryInfo" => neuron_device_memory_info(),
        "Name" => String.t() | atom()
      }
      
  """
  @type neuron_device_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_route_enforcement_response_options() :: %{
        "Enforced" => boolean()
      }
      
  """
  @type client_route_enforcement_response_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_placement_groups_result() :: %{
        "PlacementGroups" => list(placement_group())
      }
      
  """
  @type describe_placement_groups_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_pool_cidr() :: %{
        "Cidr" => String.t() | atom(),
        "FailureReason" => ipam_pool_cidr_failure_reason(),
        "IpamPoolCidrId" => String.t() | atom(),
        "NetmaskLength" => integer(),
        "State" => list(any())
      }
      
  """
  @type ipam_pool_cidr() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpn_connection_request() :: %{
        optional("CustomerGatewayId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TransitGatewayId") => String.t() | atom(),
        optional("VpnGatewayId") => String.t() | atom(),
        required("VpnConnectionId") => String.t() | atom()
      }
      
  """
  @type modify_vpn_connection_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_traffic_mirror_filters_result() :: %{
        "NextToken" => String.t() | atom(),
        "TrafficMirrorFilters" => list(traffic_mirror_filter())
      }
      
  """
  @type describe_traffic_mirror_filters_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_route_server_result() :: %{
        "RouteServer" => route_server()
      }
      
  """
  @type modify_route_server_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_route_server_propagation_request() :: %{
        optional("DryRun") => boolean(),
        required("RouteServerId") => String.t() | atom(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type disable_route_server_propagation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_pool_cidr_failure_reason() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type ipam_pool_cidr_failure_reason() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_route_result() :: %{
        "Route" => local_gateway_route()
      }
      
  """
  @type delete_local_gateway_route_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_block_public_access_options_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type describe_vpc_block_public_access_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_image_deregistration_protection_request() :: %{
        optional("DryRun") => boolean(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type disable_image_deregistration_protection_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_ipam_external_resource_verification_token_request() :: %{
        optional("DryRun") => boolean(),
        required("IpamExternalResourceVerificationTokenId") => String.t() | atom()
      }
      
  """
  @type delete_ipam_external_resource_verification_token_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_spot_datafeed_subscription_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type delete_spot_datafeed_subscription_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_route_table_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type create_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_ipam_scope_result() :: %{
        "IpamScope" => ipam_scope()
      }
      
  """
  @type create_ipam_scope_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_ipam_external_resource_verification_token_result() :: %{
        "IpamExternalResourceVerificationToken" => ipam_external_resource_verification_token()
      }
      
  """
  @type delete_ipam_external_resource_verification_token_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      deprovision_ipam_byoasn_request() :: %{
        optional("DryRun") => boolean(),
        required("Asn") => String.t() | atom(),
        required("IpamId") => String.t() | atom()
      }
      
  """
  @type deprovision_ipam_byoasn_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      move_capacity_reservation_instances_result() :: %{
        "DestinationCapacityReservation" => capacity_reservation(),
        "InstanceCount" => integer(),
        "SourceCapacityReservation" => capacity_reservation()
      }
      
  """
  @type move_capacity_reservation_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      start_network_insights_access_scope_analysis_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("ClientToken") => String.t() | atom(),
        required("NetworkInsightsAccessScopeId") => String.t() | atom()
      }
      
  """
  @type start_network_insights_access_scope_analysis_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_fleet_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_fleet_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_verified_access_endpoint_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("VerifiedAccessEndpointId") => String.t() | atom()
      }
      
  """
  @type delete_verified_access_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_usage_resource_type_option_request() :: %{
        "OptionName" => String.t() | atom(),
        "OptionValues" => list(String.t() | atom())
      }
      
  """
  @type image_usage_resource_type_option_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      explanation() :: %{
        "ComponentRegion" => String.t() | atom(),
        "TransitGatewayRouteTable" => analysis_component(),
        "LoadBalancerListenerPort" => integer(),
        "LoadBalancerArn" => String.t() | atom(),
        "PortRanges" => list(port_range()),
        "ComponentAccount" => String.t() | atom(),
        "Vpc" => analysis_component(),
        "RouteTable" => analysis_component(),
        "LoadBalancerTargetPort" => integer(),
        "ClassicLoadBalancerListener" => analysis_load_balancer_listener(),
        "Component" => analysis_component(),
        "NatGateway" => analysis_component(),
        "PrefixList" => analysis_component(),
        "CustomerGateway" => analysis_component(),
        "Subnet" => analysis_component(),
        "PacketField" => String.t() | atom(),
        "Destination" => analysis_component(),
        "SourceVpc" => analysis_component(),
        "AttachedTo" => analysis_component(),
        "Address" => String.t() | atom(),
        "IngressRouteTable" => analysis_component(),
        "TransitGateway" => analysis_component(),
        "TransitGatewayRouteTableRoute" => transit_gateway_route_table_route(),
        "AclRule" => analysis_acl_rule(),
        "SecurityGroup" => analysis_component(),
        "VpcEndpoint" => analysis_component(),
        "Direction" => String.t() | atom(),
        "ElasticLoadBalancerListener" => analysis_component(),
        "MissingComponent" => String.t() | atom(),
        "FirewallStatefulRule" => firewall_stateful_rule(),
        "State" => String.t() | atom(),
        "ExplanationCode" => String.t() | atom(),
        "LoadBalancerTarget" => analysis_load_balancer_target(),
        "Port" => integer(),
        "AvailabilityZones" => list(String.t() | atom()),
        "SecurityGroupRule" => analysis_security_group_rule(),
        "VpnGateway" => analysis_component(),
        "VpnConnection" => analysis_component(),
        "RouteTableRoute" => analysis_route_table_route(),
        "Protocols" => list(String.t() | atom()),
        "Cidrs" => list(String.t() | atom()),
        "LoadBalancerTargetGroup" => analysis_component(),
        "Addresses" => list(String.t() | atom()),
        "InternetGateway" => analysis_component(),
        "Acl" => analysis_component(),
        "SubnetRouteTable" => analysis_component(),
        "NetworkInterface" => analysis_component(),
        "DestinationVpc" => analysis_component(),
        "VpcPeeringConnection" => analysis_component(),
        "LoadBalancerTargetGroups" => list(analysis_component()),
        "AvailabilityZoneIds" => list(String.t() | atom()),
        "SecurityGroups" => list(analysis_component()),
        "FirewallStatelessRule" => firewall_stateless_rule(),
        "TransitGatewayAttachment" => analysis_component()
      }
      
  """
  @type explanation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_nat_gateway_address_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxDrainDurationSeconds") => integer(),
        required("AssociationIds") => list(String.t() | atom()),
        required("NatGatewayId") => String.t() | atom()
      }
      
  """
  @type disassociate_nat_gateway_address_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      placement_group() :: %{
        "GroupArn" => String.t() | atom(),
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "PartitionCount" => integer(),
        "SpreadLevel" => list(any()),
        "State" => list(any()),
        "Strategy" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type placement_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_identity_id_format_request() :: %{
        required("PrincipalArn") => String.t() | atom(),
        required("Resource") => String.t() | atom(),
        required("UseLongIds") => boolean()
      }
      
  """
  @type modify_identity_id_format_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_reachability_analyzer_organization_sharing_result() :: %{
        "ReturnValue" => boolean()
      }
      
  """
  @type enable_reachability_analyzer_organization_sharing_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_vpc_endpoint_connection_notifications_result() :: %{
        "Unsuccessful" => list(unsuccessful_item())
      }
      
  """
  @type delete_vpc_endpoint_connection_notifications_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_route_servers_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("RouteServerIds") => list(String.t() | atom())
      }
      
  """
  @type describe_route_servers_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_enclave_certificate_iam_role_result() :: %{
        "CertificateS3BucketName" => String.t() | atom(),
        "CertificateS3ObjectKey" => String.t() | atom(),
        "EncryptionKmsKeyId" => String.t() | atom()
      }
      
  """
  @type associate_enclave_certificate_iam_role_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_route_table_result() :: %{
        "TransitGatewayRouteTable" => transit_gateway_route_table()
      }
      
  """
  @type delete_transit_gateway_route_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_snapshot_block_public_access_state_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type get_snapshot_block_public_access_state_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ena_srd_udp_specification() :: %{
        "EnaSrdUdpEnabled" => boolean()
      }
      
  """
  @type ena_srd_udp_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_fleet_success_item() :: %{
        "CurrentFleetState" => list(any()),
        "FleetId" => String.t() | atom(),
        "PreviousFleetState" => list(any())
      }
      
  """
  @type delete_fleet_success_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_image_criteria_in_allowed_images_settings_result() :: %{
        "ReturnValue" => boolean()
      }
      
  """
  @type replace_image_criteria_in_allowed_images_settings_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      verified_access_instance_open_vpn_client_configuration_route() :: %{
        "Cidr" => String.t() | atom()
      }
      
  """
  @type verified_access_instance_open_vpn_client_configuration_route() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_network_insights_path_result() :: %{
        "NetworkInsightsPathId" => String.t() | atom()
      }
      
  """
  @type delete_network_insights_path_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      native_application_oidc_options() :: %{
        "AuthorizationEndpoint" => String.t() | atom(),
        "ClientId" => String.t() | atom(),
        "Issuer" => String.t() | atom(),
        "PublicSigningKeyEndpoint" => String.t() | atom(),
        "Scope" => String.t() | atom(),
        "TokenEndpoint" => String.t() | atom(),
        "UserInfoEndpoint" => String.t() | atom()
      }
      
  """
  @type native_application_oidc_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_traffic_mirror_filter_result() :: %{
        "TrafficMirrorFilterId" => String.t() | atom()
      }
      
  """
  @type delete_traffic_mirror_filter_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_instance_status() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom(),
        "UpdateTime" => non_neg_integer()
      }
      
  """
  @type spot_instance_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_placement_groups_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("GroupIds") => list(String.t() | atom()),
        optional("GroupNames") => list(String.t() | atom())
      }
      
  """
  @type describe_placement_groups_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      host_offering() :: %{
        "CurrencyCode" => list(any()),
        "Duration" => integer(),
        "HourlyPrice" => String.t() | atom(),
        "InstanceFamily" => String.t() | atom(),
        "OfferingId" => String.t() | atom(),
        "PaymentOption" => list(any()),
        "UpfrontPrice" => String.t() | atom()
      }
      
  """
  @type host_offering() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_insights_access_scope_analyses_result() :: %{
        "NetworkInsightsAccessScopeAnalyses" => list(network_insights_access_scope_analysis()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_network_insights_access_scope_analyses_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      scheduled_instances_network_interface() :: %{
        "AssociatePublicIpAddress" => boolean(),
        "DeleteOnTermination" => boolean(),
        "Description" => String.t() | atom(),
        "DeviceIndex" => integer(),
        "Groups" => list(String.t() | atom()),
        "Ipv6AddressCount" => integer(),
        "Ipv6Addresses" => list(scheduled_instances_ipv6_address()),
        "NetworkInterfaceId" => String.t() | atom(),
        "PrivateIpAddress" => String.t() | atom(),
        "PrivateIpAddressConfigs" => list(scheduled_instances_private_ip_address_config()),
        "SecondaryPrivateIpAddressCount" => integer(),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type scheduled_instances_network_interface() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_ipam_organization_admin_account_result() :: %{
        "Success" => boolean()
      }
      
  """
  @type enable_ipam_organization_admin_account_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_instance_uefi_data_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type get_instance_uefi_data_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_snapshot_block_public_access_result() :: %{
        "State" => list(any())
      }
      
  """
  @type enable_snapshot_block_public_access_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      certificate_authentication() :: %{
        "ClientRootCertificateChain" => String.t() | atom()
      }
      
  """
  @type certificate_authentication() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_conversion_request() :: %{
        optional("DryRun") => boolean(),
        optional("ReasonMessage") => String.t() | atom(),
        required("ConversionTaskId") => String.t() | atom()
      }
      
  """
  @type cancel_conversion_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_security_group_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("VpcId") => String.t() | atom(),
        required("Description") => String.t() | atom(),
        required("GroupName") => String.t() | atom()
      }
      
  """
  @type create_security_group_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_connections_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_vpc_endpoint_connections_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deprecation_time_condition() :: %{
        "MaximumDaysSinceDeprecated" => integer()
      }
      
  """
  @type deprecation_time_condition() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reset_fpga_image_attribute_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type reset_fpga_image_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_flow_logs_request() :: %{
        optional("DryRun") => boolean(),
        required("FlowLogIds") => list(String.t() | atom())
      }
      
  """
  @type delete_flow_logs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_capacity_reservation_billing_ownership_request() :: %{
        optional("DryRun") => boolean(),
        required("CapacityReservationId") => String.t() | atom()
      }
      
  """
  @type accept_capacity_reservation_billing_ownership_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      disable_aws_network_performance_metric_subscription_request() :: %{
        optional("Destination") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Metric") => list(any()),
        optional("Source") => String.t() | atom(),
        optional("Statistic") => list(any())
      }
      
  """
  @type disable_aws_network_performance_metric_subscription_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      get_network_insights_access_scope_analysis_findings_result() :: %{
        "AnalysisFindings" => list(access_scope_analysis_finding()),
        "AnalysisStatus" => list(any()),
        "NetworkInsightsAccessScopeAnalysisId" => String.t() | atom(),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_network_insights_access_scope_analysis_findings_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_transit_gateway_peering_attachments_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayAttachmentIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateway_peering_attachments_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_security_group_references_result() :: %{
        "SecurityGroupReferenceSet" => list(security_group_reference())
      }
      
  """
  @type describe_security_group_references_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_login_banner_response_options() :: %{
        "BannerText" => String.t() | atom(),
        "Enabled" => boolean()
      }
      
  """
  @type client_login_banner_response_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_group_policy_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("PolicyDocument") => String.t() | atom(),
        optional("PolicyEnabled") => boolean(),
        optional("SseSpecification") => verified_access_sse_specification_request(),
        required("VerifiedAccessGroupId") => String.t() | atom()
      }
      
  """
  @type modify_verified_access_group_policy_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_capacity_reservation_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type cancel_capacity_reservation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      lock_snapshot_result() :: %{
        "CoolOffPeriod" => integer(),
        "CoolOffPeriodExpiresOn" => non_neg_integer(),
        "LockCreatedOn" => non_neg_integer(),
        "LockDuration" => integer(),
        "LockDurationStartTime" => non_neg_integer(),
        "LockExpiresOn" => non_neg_integer(),
        "LockState" => list(any()),
        "SnapshotId" => String.t() | atom()
      }
      
  """
  @type lock_snapshot_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_managed_prefix_list_entries_result() :: %{
        "Entries" => list(prefix_list_entry()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_managed_prefix_list_entries_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_reserved_instances_modifications_request() :: %{
        optional("Filters") => list(filter()),
        optional("NextToken") => String.t() | atom(),
        optional("ReservedInstancesModificationIds") => list(String.t() | atom())
      }
      
  """
  @type describe_reserved_instances_modifications_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_instance_types_from_instance_requirements_request() :: %{
        optional("Context") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("ArchitectureTypes") => list(list(any())()),
        required("InstanceRequirements") => instance_requirements_request(),
        required("VirtualizationTypes") => list(list(any())())
      }
      
  """
  @type get_instance_types_from_instance_requirements_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_hosts_result() :: %{
        "Hosts" => list(host()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_hosts_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_reservation_billing_requests_result() :: %{
        "CapacityReservationBillingRequests" => list(capacity_reservation_billing_request()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_capacity_reservation_billing_requests_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      add_ipam_organizational_unit_exclusion() :: %{
        "OrganizationsEntityPath" => String.t() | atom()
      }
      
  """
  @type add_ipam_organizational_unit_exclusion() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_multicast_registered_group_members() :: %{
        "GroupIpAddress" => String.t() | atom(),
        "RegisteredNetworkInterfaceIds" => list(String.t() | atom()),
        "TransitGatewayMulticastDomainId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_multicast_registered_group_members() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_traffic_mirror_session_result() :: %{
        "ClientToken" => String.t() | atom(),
        "TrafficMirrorSession" => traffic_mirror_session()
      }
      
  """
  @type create_traffic_mirror_session_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      connection_tracking_specification_request() :: %{
        "TcpEstablishedTimeout" => integer(),
        "UdpStreamTimeout" => integer(),
        "UdpTimeout" => integer()
      }
      
  """
  @type connection_tracking_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_vpc_cidr_block_request() :: %{
        required("AssociationId") => String.t() | atom()
      }
      
  """
  @type disassociate_vpc_cidr_block_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      run_scheduled_instances_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("InstanceCount") => integer(),
        required("LaunchSpecification") => scheduled_instances_launch_specification(),
        required("ScheduledInstanceId") => String.t() | atom()
      }
      
  """
  @type run_scheduled_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_trust_provider_condensed() :: %{
        "Description" => String.t() | atom(),
        "DeviceTrustProviderType" => list(any()),
        "TrustProviderType" => list(any()),
        "UserTrustProviderType" => list(any()),
        "VerifiedAccessTrustProviderId" => String.t() | atom()
      }
      
  """
  @type verified_access_trust_provider_condensed() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_reservation_billing_requests_request() :: %{
        optional("CapacityReservationIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("Role") => list(any())
      }
      
  """
  @type describe_capacity_reservation_billing_requests_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      rule_group_type_pair() :: %{
        "RuleGroupArn" => String.t() | atom(),
        "RuleGroupType" => String.t() | atom()
      }
      
  """
  @type rule_group_type_pair() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipv6_range() :: %{
        "CidrIpv6" => String.t() | atom(),
        "Description" => String.t() | atom()
      }
      
  """
  @type ipv6_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_peering_connection_state_reason() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type vpc_peering_connection_state_reason() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      credit_specification() :: %{
        "CpuCredits" => String.t() | atom()
      }
      
  """
  @type credit_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cloud_watch_log_options_specification() :: %{
        "LogEnabled" => boolean(),
        "LogGroupArn" => String.t() | atom(),
        "LogOutputFormat" => String.t() | atom()
      }
      
  """
  @type cloud_watch_log_options_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_discovery_failure_reason() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type ipam_discovery_failure_reason() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase2_integrity_algorithms_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type phase2_integrity_algorithms_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_reserved_instances_listings_result() :: %{
        "ReservedInstancesListings" => list(reserved_instances_listing())
      }
      
  """
  @type describe_reserved_instances_listings_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_request() :: %{
        optional("AddRouteTableIds") => list(String.t() | atom()),
        optional("AddSecurityGroupIds") => list(String.t() | atom()),
        optional("AddSubnetIds") => list(String.t() | atom()),
        optional("DnsOptions") => dns_options_specification(),
        optional("DryRun") => boolean(),
        optional("IpAddressType") => list(any()),
        optional("PolicyDocument") => String.t() | atom(),
        optional("PrivateDnsEnabled") => boolean(),
        optional("RemoveRouteTableIds") => list(String.t() | atom()),
        optional("RemoveSecurityGroupIds") => list(String.t() | atom()),
        optional("RemoveSubnetIds") => list(String.t() | atom()),
        optional("ResetPolicy") => boolean(),
        optional("SubnetConfigurations") => list(subnet_configuration()),
        required("VpcEndpointId") => String.t() | atom()
      }
      
  """
  @type modify_vpc_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fpga_device_info() :: %{
        "Count" => integer(),
        "Manufacturer" => String.t() | atom(),
        "MemoryInfo" => fpga_device_memory_info(),
        "Name" => String.t() | atom()
      }
      
  """
  @type fpga_device_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_identity_id_format_request() :: %{
        optional("Resource") => String.t() | atom(),
        required("PrincipalArn") => String.t() | atom()
      }
      
  """
  @type describe_identity_id_format_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_criterion() :: %{
        "CreationDateCondition" => creation_date_condition(),
        "DeprecationTimeCondition" => deprecation_time_condition(),
        "ImageNames" => list(String.t() | atom()),
        "ImageProviders" => list(String.t() | atom()),
        "MarketplaceProductCodes" => list(String.t() | atom())
      }
      
  """
  @type image_criterion() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_capacity_reservation_fleet_request() :: %{
        optional("DryRun") => boolean(),
        optional("EndDate") => non_neg_integer(),
        optional("RemoveEndDate") => boolean(),
        optional("TotalTargetCapacity") => integer(),
        required("CapacityReservationFleetId") => String.t() | atom()
      }
      
  """
  @type modify_capacity_reservation_fleet_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_fast_snapshot_restore_error_item() :: %{
        "FastSnapshotRestoreStateErrors" => list(disable_fast_snapshot_restore_state_error_item()),
        "SnapshotId" => String.t() | atom()
      }
      
  """
  @type disable_fast_snapshot_restore_error_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_subnet_cidr_reservation_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("Cidr") => String.t() | atom(),
        required("ReservationType") => list(any()),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type create_subnet_cidr_reservation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_spot_instance_requests_request() :: %{
        optional("DryRun") => boolean(),
        required("SpotInstanceRequestIds") => list(String.t() | atom())
      }
      
  """
  @type cancel_spot_instance_requests_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      access_scope_path_request() :: %{
        "Destination" => path_statement_request(),
        "Source" => path_statement_request(),
        "ThroughResources" => list(through_resources_statement_request())
      }
      
  """
  @type access_scope_path_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_reserved_instances_modifications_result() :: %{
        "NextToken" => String.t() | atom(),
        "ReservedInstancesModifications" => list(reserved_instances_modification())
      }
      
  """
  @type describe_reserved_instances_modifications_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_route_table() :: %{
        "CreationTime" => non_neg_integer(),
        "DefaultAssociationRouteTable" => boolean(),
        "DefaultPropagationRouteTable" => boolean(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TransitGatewayId" => String.t() | atom(),
        "TransitGatewayRouteTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_route_table() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_coip_pool_usage_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("PoolId") => String.t() | atom()
      }
      
  """
  @type get_coip_pool_usage_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      analysis_route_table_route() :: %{
        "CarrierGatewayId" => String.t() | atom(),
        "CoreNetworkArn" => String.t() | atom(),
        "DestinationCidr" => String.t() | atom(),
        "DestinationPrefixListId" => String.t() | atom(),
        "EgressOnlyInternetGatewayId" => String.t() | atom(),
        "GatewayId" => String.t() | atom(),
        "InstanceId" => String.t() | atom(),
        "LocalGatewayId" => String.t() | atom(),
        "NatGatewayId" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "Origin" => String.t() | atom(),
        "State" => String.t() | atom(),
        "TransitGatewayId" => String.t() | atom(),
        "VpcPeeringConnectionId" => String.t() | atom()
      }
      
  """
  @type analysis_route_table_route() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_pool() :: %{
        "AddressFamily" => list(any()),
        "AllocationDefaultNetmaskLength" => integer(),
        "AllocationMaxNetmaskLength" => integer(),
        "AllocationMinNetmaskLength" => integer(),
        "AllocationResourceTags" => list(ipam_resource_tag()),
        "AutoImport" => boolean(),
        "AwsService" => list(any()),
        "Description" => String.t() | atom(),
        "IpamArn" => String.t() | atom(),
        "IpamPoolArn" => String.t() | atom(),
        "IpamPoolId" => String.t() | atom(),
        "IpamRegion" => String.t() | atom(),
        "IpamScopeArn" => String.t() | atom(),
        "IpamScopeType" => list(any()),
        "Locale" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "PoolDepth" => integer(),
        "PublicIpSource" => list(any()),
        "PubliclyAdvertisable" => boolean(),
        "SourceIpamPoolId" => String.t() | atom(),
        "SourceResource" => ipam_pool_source_resource(),
        "State" => list(any()),
        "StateMessage" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type ipam_pool() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      block_public_access_states() :: %{
        "InternetGatewayBlockMode" => list(any())
      }
      
  """
  @type block_public_access_states() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpn_connection_options_result() :: %{
        "VpnConnection" => vpn_connection()
      }
      
  """
  @type modify_vpn_connection_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_address_request() :: %{
        optional("AssociationId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("PublicIp") => String.t() | atom()
      }
      
  """
  @type disassociate_address_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_iam_instance_profile_request() :: %{
        required("IamInstanceProfile") => iam_instance_profile_specification(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type associate_iam_instance_profile_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      inference_device_memory_info() :: %{
        "SizeInMiB" => integer()
      }
      
  """
  @type inference_device_memory_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_permission() :: %{
        "Group" => list(any()),
        "OrganizationArn" => String.t() | atom(),
        "OrganizationalUnitArn" => String.t() | atom(),
        "UserId" => String.t() | atom()
      }
      
  """
  @type launch_permission() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_stale_security_groups_result() :: %{
        "NextToken" => String.t() | atom(),
        "StaleSecurityGroupSet" => list(stale_security_group())
      }
      
  """
  @type describe_stale_security_groups_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_request() :: %{
        optional("DryRun") => boolean(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type delete_vpc_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      volume_detail() :: %{
        "Size" => float()
      }
      
  """
  @type volume_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_route_table_virtual_interface_group_association_request() :: %{
        optional("DryRun") => boolean(),
        required("LocalGatewayRouteTableVirtualInterfaceGroupAssociationId") => String.t() | atom()
      }
      
  """
  @type delete_local_gateway_route_table_virtual_interface_group_association_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_managed_prefix_lists_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("PrefixListIds") => list(String.t() | atom())
      }
      
  """
  @type describe_managed_prefix_lists_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_verified_access_group_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("VerifiedAccessGroupId") => String.t() | atom()
      }
      
  """
  @type delete_verified_access_group_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_route_server_propagation_request() :: %{
        optional("DryRun") => boolean(),
        required("RouteServerId") => String.t() | atom(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type enable_route_server_propagation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      classic_link_instance() :: %{
        "Groups" => list(group_identifier()),
        "InstanceId" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type classic_link_instance() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      i_k_e_versions_request_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type i_k_e_versions_request_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_spot_fleet_requests_response() :: %{
        "SuccessfulFleetRequests" => list(cancel_spot_fleet_requests_success_item()),
        "UnsuccessfulFleetRequests" => list(cancel_spot_fleet_requests_error_item())
      }
      
  """
  @type cancel_spot_fleet_requests_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fast_launch_launch_template_specification_request() :: %{
        "LaunchTemplateId" => String.t() | atom(),
        "LaunchTemplateName" => String.t() | atom(),
        "Version" => String.t() | atom()
      }
      
  """
  @type fast_launch_launch_template_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_block_public_access_exclusions_request() :: %{
        optional("DryRun") => boolean(),
        optional("ExclusionIds") => list(String.t() | atom()),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_vpc_block_public_access_exclusions_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_network_interface_attribute_request() :: %{
        optional("AssociatePublicIpAddress") => boolean(),
        optional("AssociatedSubnetIds") => list(String.t() | atom()),
        optional("Attachment") => network_interface_attachment_changes(),
        optional("ConnectionTrackingSpecification") => connection_tracking_specification_request(),
        optional("Description") => attribute_value(),
        optional("DryRun") => boolean(),
        optional("EnaSrdSpecification") => ena_srd_specification(),
        optional("EnablePrimaryIpv6") => boolean(),
        optional("Groups") => list(String.t() | atom()),
        optional("SourceDestCheck") => attribute_boolean_value(),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type modify_network_interface_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_nat_gateways_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filter") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NatGatewayIds") => list(String.t() | atom()),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_nat_gateways_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      move_byoip_cidr_to_ipam_result() :: %{
        "ByoipCidr" => byoip_cidr()
      }
      
  """
  @type move_byoip_cidr_to_ipam_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      traffic_mirror_filter() :: %{
        "Description" => String.t() | atom(),
        "EgressFilterRules" => list(traffic_mirror_filter_rule()),
        "IngressFilterRules" => list(traffic_mirror_filter_rule()),
        "NetworkServices" => list(list(any())()),
        "Tags" => list(tag()),
        "TrafficMirrorFilterId" => String.t() | atom()
      }
      
  """
  @type traffic_mirror_filter() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_block() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "CapacityBlockId" => String.t() | atom(),
        "CapacityReservationIds" => list(String.t() | atom()),
        "CreateDate" => non_neg_integer(),
        "EndDate" => non_neg_integer(),
        "StartDate" => non_neg_integer(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "UltraserverType" => String.t() | atom()
      }
      
  """
  @type capacity_block() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_security_group_rules_request() :: %{
        optional("DryRun") => boolean(),
        required("GroupId") => String.t() | atom(),
        required("SecurityGroupRules") => list(security_group_rule_update())
      }
      
  """
  @type modify_security_group_rules_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_bundle_tasks_request() :: %{
        optional("BundleIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter())
      }
      
  """
  @type describe_bundle_tasks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ebs_default_kms_key_id_result() :: %{
        "KmsKeyId" => String.t() | atom()
      }
      
  """
  @type modify_ebs_default_kms_key_id_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_traffic_mirror_filter_network_services_request() :: %{
        optional("AddNetworkServices") => list(list(any())()),
        optional("DryRun") => boolean(),
        optional("RemoveNetworkServices") => list(list(any())()),
        required("TrafficMirrorFilterId") => String.t() | atom()
      }
      
  """
  @type modify_traffic_mirror_filter_network_services_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_instance_credit_specifications_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("InstanceIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_instance_credit_specifications_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_request() :: %{
        optional("AmazonProvidedIpv6CidrBlock") => boolean(),
        optional("CidrBlock") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("InstanceTenancy") => list(any()),
        optional("Ipv4IpamPoolId") => String.t() | atom(),
        optional("Ipv4NetmaskLength") => integer(),
        optional("Ipv6CidrBlock") => String.t() | atom(),
        optional("Ipv6CidrBlockNetworkBorderGroup") => String.t() | atom(),
        optional("Ipv6IpamPoolId") => String.t() | atom(),
        optional("Ipv6NetmaskLength") => integer(),
        optional("Ipv6Pool") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_vpc_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_replace_root_volume_tasks_result() :: %{
        "NextToken" => String.t() | atom(),
        "ReplaceRootVolumeTasks" => list(replace_root_volume_task())
      }
      
  """
  @type describe_replace_root_volume_tasks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_specification_response() :: %{
        "CapacityReservationPreference" => list(any()),
        "CapacityReservationTarget" => capacity_reservation_target_response()
      }
      
  """
  @type capacity_reservation_specification_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_discovered_accounts_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("DiscoveryRegion") => String.t() | atom(),
        required("IpamResourceDiscoveryId") => String.t() | atom()
      }
      
  """
  @type get_ipam_discovered_accounts_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_associated_enclave_certificate_iam_roles_request() :: %{
        optional("DryRun") => boolean(),
        required("CertificateArn") => String.t() | atom()
      }
      
  """
  @type get_associated_enclave_certificate_iam_roles_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      run_instances_request() :: %{
        optional("SecurityGroupIds") => list(String.t() | atom()),
        optional("CreditSpecification") => credit_specification_request(),
        optional("MetadataOptions") => instance_metadata_options_request(),
        optional("EnablePrimaryIpv6") => boolean(),
        optional("BlockDeviceMappings") => list(block_device_mapping()),
        optional("ClientToken") => String.t() | atom(),
        optional("InstanceInitiatedShutdownBehavior") => list(any()),
        optional("LicenseSpecifications") => list(license_configuration_request()),
        optional("Ipv6AddressCount") => integer(),
        optional("PrivateIpAddress") => String.t() | atom(),
        optional("Ipv6Addresses") => list(instance_ipv6_address()),
        optional("Monitoring") => run_instances_monitoring_enabled(),
        optional("KernelId") => String.t() | atom(),
        optional("RamdiskId") => String.t() | atom(),
        optional("ElasticGpuSpecification") => list(elastic_gpu_specification()),
        required("MinCount") => integer(),
        optional("HibernationOptions") => hibernation_options_request(),
        optional("MaintenanceOptions") => instance_maintenance_options_request(),
        optional("KeyName") => String.t() | atom(),
        optional("Operator") => operator_request(),
        optional("InstanceType") => list(any()),
        optional("EbsOptimized") => boolean(),
        optional("CapacityReservationSpecification") => capacity_reservation_specification(),
        optional("AdditionalInfo") => String.t() | atom(),
        optional("DisableApiStop") => boolean(),
        optional("UserData") => String.t() | atom(),
        optional("DisableApiTermination") => boolean(),
        optional("CpuOptions") => cpu_options_request(),
        optional("NetworkPerformanceOptions") => instance_network_performance_options_request(),
        optional("DryRun") => boolean(),
        optional("SecurityGroups") => list(String.t() | atom()),
        optional("Placement") => placement(),
        optional("PrivateDnsNameOptions") => private_dns_name_options_request(),
        optional("SubnetId") => String.t() | atom(),
        optional("IamInstanceProfile") => iam_instance_profile_specification(),
        optional("EnclaveOptions") => enclave_options_request(),
        optional("ImageId") => String.t() | atom(),
        optional("LaunchTemplate") => launch_template_specification(),
        optional("InstanceMarketOptions") => instance_market_options_request(),
        required("MaxCount") => integer(),
        optional("NetworkInterfaces") => list(instance_network_interface_specification()),
        optional("TagSpecifications") => list(tag_specification()),
        optional("ElasticInferenceAccelerators") => list(elastic_inference_accelerator())
      }
      
  """
  @type run_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      elastic_gpus() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "ElasticGpuHealth" => elastic_gpu_health(),
        "ElasticGpuId" => String.t() | atom(),
        "ElasticGpuState" => list(any()),
        "ElasticGpuType" => String.t() | atom(),
        "InstanceId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type elastic_gpus() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_service_configuration_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_vpc_endpoint_service_configuration_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_route_result() :: %{
        "Route" => local_gateway_route()
      }
      
  """
  @type create_local_gateway_route_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_attachment_ena_srd_specification() :: %{
        "EnaSrdEnabled" => boolean(),
        "EnaSrdUdpSpecification" => instance_attachment_ena_srd_udp_specification()
      }
      
  """
  @type instance_attachment_ena_srd_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_transit_gateway_route_table_propagation_request() :: %{
        optional("DryRun") => boolean(),
        optional("TransitGatewayAttachmentId") => String.t() | atom(),
        optional("TransitGatewayRouteTableAnnouncementId") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type disable_transit_gateway_route_table_propagation_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      snapshot_task_detail() :: %{
        "Description" => String.t() | atom(),
        "DiskImageSize" => float(),
        "Encrypted" => boolean(),
        "Format" => String.t() | atom(),
        "KmsKeyId" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "Status" => String.t() | atom(),
        "StatusMessage" => String.t() | atom(),
        "Url" => String.t() | atom(),
        "UserBucket" => user_bucket_details()
      }
      
  """
  @type snapshot_task_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instances_private_ip_address_config() :: %{
        "Primary" => boolean(),
        "PrivateIpAddress" => String.t() | atom()
      }
      
  """
  @type scheduled_instances_private_ip_address_config() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      traffic_mirror_filter_rule() :: %{
        "Description" => String.t() | atom(),
        "DestinationCidrBlock" => String.t() | atom(),
        "DestinationPortRange" => traffic_mirror_port_range(),
        "Protocol" => integer(),
        "RuleAction" => list(any()),
        "RuleNumber" => integer(),
        "SourceCidrBlock" => String.t() | atom(),
        "SourcePortRange" => traffic_mirror_port_range(),
        "Tags" => list(tag()),
        "TrafficDirection" => list(any()),
        "TrafficMirrorFilterId" => String.t() | atom(),
        "TrafficMirrorFilterRuleId" => String.t() | atom()
      }
      
  """
  @type traffic_mirror_filter_rule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_spot_fleet_requests_error() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type cancel_spot_fleet_requests_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_reservations_result() :: %{
        "CapacityReservations" => list(capacity_reservation()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_capacity_reservations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fleet_instances_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("FleetId") => String.t() | atom()
      }
      
  """
  @type describe_fleet_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_image_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("Attribute") => list(any()),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type describe_image_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_verified_access_trust_provider_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("VerifiedAccessTrustProviderId") => String.t() | atom()
      }
      
  """
  @type delete_verified_access_trust_provider_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_classic_link_dns_support_request() :: %{
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VpcIds") => list(String.t() | atom())
      }
      
  """
  @type describe_vpc_classic_link_dns_support_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_discovered_resource_cidrs_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("IpamResourceDiscoveryId") => String.t() | atom(),
        required("ResourceRegion") => String.t() | atom()
      }
      
  """
  @type get_ipam_discovered_resource_cidrs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fast_launch_snapshot_configuration_request() :: %{
        "TargetResourceCount" => integer()
      }
      
  """
  @type fast_launch_snapshot_configuration_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_route_table_virtual_interface_group_association_result() :: %{
        "LocalGatewayRouteTableVirtualInterfaceGroupAssociation" => local_gateway_route_table_virtual_interface_group_association()
      }
      
  """
  @type delete_local_gateway_route_table_virtual_interface_group_association_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_verified_access_native_application_oidc_options() :: %{
        "AuthorizationEndpoint" => String.t() | atom(),
        "ClientId" => String.t() | atom(),
        "ClientSecret" => String.t() | atom(),
        "Issuer" => String.t() | atom(),
        "PublicSigningKeyEndpoint" => String.t() | atom(),
        "Scope" => String.t() | atom(),
        "TokenEndpoint" => String.t() | atom(),
        "UserInfoEndpoint" => String.t() | atom()
      }
      
  """
  @type create_verified_access_native_application_oidc_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_capacity_reservation_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_capacity_reservation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      search_local_gateway_routes_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("LocalGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type search_local_gateway_routes_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_placement_group_result() :: %{
        "PlacementGroup" => placement_group()
      }
      
  """
  @type create_placement_group_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      confirm_product_instance_result() :: %{
        "OwnerId" => String.t() | atom(),
        "Return" => boolean()
      }
      
  """
  @type confirm_product_instance_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      history_record_entry() :: %{
        "EventInformation" => event_information(),
        "EventType" => list(any()),
        "Timestamp" => non_neg_integer()
      }
      
  """
  @type history_record_entry() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_topology() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "CapacityBlockId" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "InstanceId" => String.t() | atom(),
        "InstanceType" => String.t() | atom(),
        "NetworkNodes" => list(String.t() | atom()),
        "ZoneId" => String.t() | atom()
      }
      
  """
  @type instance_topology() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      filter_port_range() :: %{
        "FromPort" => integer(),
        "ToPort" => integer()
      }
      
  """
  @type filter_port_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      snapshot_info() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "Encrypted" => boolean(),
        "OutpostArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "SseType" => list(any()),
        "StartTime" => non_neg_integer(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "VolumeId" => String.t() | atom(),
        "VolumeSize" => integer()
      }
      
  """
  @type snapshot_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      user_bucket_details() :: %{
        "S3Bucket" => String.t() | atom(),
        "S3Key" => String.t() | atom()
      }
      
  """
  @type user_bucket_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_image_request() :: %{
        optional("DryRun") => boolean(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type enable_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_endpoint() :: %{
        "ApplicationDomain" => String.t() | atom(),
        "AttachmentType" => list(any()),
        "CidrOptions" => verified_access_endpoint_cidr_options(),
        "CreationTime" => String.t() | atom(),
        "DeletionTime" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "DeviceValidationDomain" => String.t() | atom(),
        "DomainCertificateArn" => String.t() | atom(),
        "EndpointDomain" => String.t() | atom(),
        "EndpointType" => list(any()),
        "LastUpdatedTime" => String.t() | atom(),
        "LoadBalancerOptions" => verified_access_endpoint_load_balancer_options(),
        "NetworkInterfaceOptions" => verified_access_endpoint_eni_options(),
        "RdsOptions" => verified_access_endpoint_rds_options(),
        "SecurityGroupIds" => list(String.t() | atom()),
        "SseSpecification" => verified_access_sse_specification_response(),
        "Status" => verified_access_endpoint_status(),
        "Tags" => list(tag()),
        "VerifiedAccessEndpointId" => String.t() | atom(),
        "VerifiedAccessGroupId" => String.t() | atom(),
        "VerifiedAccessInstanceId" => String.t() | atom()
      }
      
  """
  @type verified_access_endpoint() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_address_history_request() :: %{
        optional("DryRun") => boolean(),
        optional("EndTime") => non_neg_integer(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("StartTime") => non_neg_integer(),
        optional("VpcId") => String.t() | atom(),
        required("Cidr") => String.t() | atom(),
        required("IpamScopeId") => String.t() | atom()
      }
      
  """
  @type get_ipam_address_history_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_image_deprecation_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type enable_image_deprecation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_instance_logging_configurations_result() :: %{
        "LoggingConfigurations" => list(verified_access_instance_logging_configuration()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_verified_access_instance_logging_configurations_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_scheduled_instance_availability_result() :: %{
        "NextToken" => String.t() | atom(),
        "ScheduledInstanceAvailabilitySet" => list(scheduled_instance_availability())
      }
      
  """
  @type describe_scheduled_instance_availability_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_snapshot_from_recycle_bin_result() :: %{
        "Description" => String.t() | atom(),
        "Encrypted" => boolean(),
        "OutpostArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "SseType" => list(any()),
        "StartTime" => non_neg_integer(),
        "State" => list(any()),
        "VolumeId" => String.t() | atom(),
        "VolumeSize" => integer()
      }
      
  """
  @type restore_snapshot_from_recycle_bin_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_route_request() :: %{
        optional("CarrierGatewayId") => String.t() | atom(),
        optional("CoreNetworkArn") => String.t() | atom(),
        optional("DestinationCidrBlock") => String.t() | atom(),
        optional("DestinationIpv6CidrBlock") => String.t() | atom(),
        optional("DestinationPrefixListId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EgressOnlyInternetGatewayId") => String.t() | atom(),
        optional("GatewayId") => String.t() | atom(),
        optional("InstanceId") => String.t() | atom(),
        optional("LocalGatewayId") => String.t() | atom(),
        optional("LocalTarget") => boolean(),
        optional("NatGatewayId") => String.t() | atom(),
        optional("NetworkInterfaceId") => String.t() | atom(),
        optional("OdbNetworkArn") => String.t() | atom(),
        optional("TransitGatewayId") => String.t() | atom(),
        optional("VpcEndpointId") => String.t() | atom(),
        optional("VpcPeeringConnectionId") => String.t() | atom(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type replace_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      connection_tracking_specification_response() :: %{
        "TcpEstablishedTimeout" => integer(),
        "UdpStreamTimeout" => integer(),
        "UdpTimeout" => integer()
      }
      
  """
  @type connection_tracking_specification_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      move_byoip_cidr_to_ipam_request() :: %{
        optional("DryRun") => boolean(),
        required("Cidr") => String.t() | atom(),
        required("IpamPoolId") => String.t() | atom(),
        required("IpamPoolOwner") => String.t() | atom()
      }
      
  """
  @type move_byoip_cidr_to_ipam_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_connect_peer() :: %{
        "ConnectPeerConfiguration" => transit_gateway_connect_peer_configuration(),
        "CreationTime" => non_neg_integer(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TransitGatewayAttachmentId" => String.t() | atom(),
        "TransitGatewayConnectPeerId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_connect_peer() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_serial_console_access_status_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type get_serial_console_access_status_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_status_result() :: %{
        "InstanceStatuses" => list(instance_status()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_instance_status_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_endpoint_eni_options() :: %{
        "NetworkInterfaceId" => String.t() | atom(),
        "Port" => integer(),
        "PortRanges" => list(create_verified_access_endpoint_port_range()),
        "Protocol" => list(any())
      }
      
  """
  @type create_verified_access_endpoint_eni_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam() :: %{
        "DefaultResourceDiscoveryAssociationId" => String.t() | atom(),
        "DefaultResourceDiscoveryId" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "EnablePrivateGua" => boolean(),
        "IpamArn" => String.t() | atom(),
        "IpamId" => String.t() | atom(),
        "IpamRegion" => String.t() | atom(),
        "MeteredAccount" => list(any()),
        "OperatingRegions" => list(ipam_operating_region()),
        "OwnerId" => String.t() | atom(),
        "PrivateDefaultScopeId" => String.t() | atom(),
        "PublicDefaultScopeId" => String.t() | atom(),
        "ResourceDiscoveryAssociationCount" => integer(),
        "ScopeCount" => integer(),
        "State" => list(any()),
        "StateMessage" => String.t() | atom(),
        "Tags" => list(tag()),
        "Tier" => list(any())
      }
      
  """
  @type ipam() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_egress_only_internet_gateways_result() :: %{
        "EgressOnlyInternetGateways" => list(egress_only_internet_gateway()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_egress_only_internet_gateways_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_peering_connection_vpc_info() :: %{
        "CidrBlock" => String.t() | atom(),
        "CidrBlockSet" => list(cidr_block()),
        "Ipv6CidrBlockSet" => list(ipv6_cidr_block()),
        "OwnerId" => String.t() | atom(),
        "PeeringOptions" => vpc_peering_connection_options_description(),
        "Region" => String.t() | atom(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type vpc_peering_connection_vpc_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_image_result() :: %{
        "Architecture" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "Encrypted" => boolean(),
        "Hypervisor" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "ImportTaskId" => String.t() | atom(),
        "KmsKeyId" => String.t() | atom(),
        "LicenseSpecifications" => list(import_image_license_configuration_response()),
        "LicenseType" => String.t() | atom(),
        "Platform" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "SnapshotDetails" => list(snapshot_detail()),
        "Status" => String.t() | atom(),
        "StatusMessage" => String.t() | atom(),
        "Tags" => list(tag()),
        "UsageOperation" => String.t() | atom()
      }
      
  """
  @type import_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_tenancy_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceTenancy") => list(any()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type modify_vpc_tenancy_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_replace_root_volume_task_result() :: %{
        "ReplaceRootVolumeTask" => replace_root_volume_task()
      }
      
  """
  @type create_replace_root_volume_task_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_import_task_result() :: %{
        "ImportTaskId" => String.t() | atom(),
        "PreviousState" => String.t() | atom(),
        "State" => String.t() | atom()
      }
      
  """
  @type cancel_import_task_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_ipv6_address_request() :: %{
        "Ipv6Address" => String.t() | atom()
      }
      
  """
  @type instance_ipv6_address_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      group_identifier() :: %{
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom()
      }
      
  """
  @type group_identifier() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_transit_gateway_multicast_domain_associations_result() :: %{
        "Associations" => transit_gateway_multicast_domain_associations()
      }
      
  """
  @type accept_transit_gateway_multicast_domain_associations_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_hosts_request() :: %{
        optional("Filter") => list(filter()),
        optional("HostIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_hosts_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_traffic_mirror_target_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("GatewayLoadBalancerEndpointId") => String.t() | atom(),
        optional("NetworkInterfaceId") => String.t() | atom(),
        optional("NetworkLoadBalancerArn") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_traffic_mirror_target_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_capacity_block_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("CapacityBlockOfferingId") => String.t() | atom(),
        required("InstancePlatform") => list(any())
      }
      
  """
  @type purchase_capacity_block_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_event_window_request() :: %{
        optional("CronExpression") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Name") => String.t() | atom(),
        optional("TimeRanges") => list(instance_event_window_time_range_request()),
        required("InstanceEventWindowId") => String.t() | atom()
      }
      
  """
  @type modify_instance_event_window_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      certificate_authentication_request() :: %{
        "ClientRootCertificateChainArn" => String.t() | atom()
      }
      
  """
  @type certificate_authentication_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_image_deregistration_protection_result() :: %{
        "Return" => String.t() | atom()
      }
      
  """
  @type disable_image_deregistration_protection_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      performance_factor_reference() :: %{
        "InstanceFamily" => String.t() | atom()
      }
      
  """
  @type performance_factor_reference() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      neuron_info() :: %{
        "NeuronDevices" => list(neuron_device_info()),
        "TotalNeuronDeviceMemoryInMiB" => integer()
      }
      
  """
  @type neuron_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_operating_region() :: %{
        "RegionName" => String.t() | atom()
      }
      
  """
  @type ipam_operating_region() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_snapshot_tier_result() :: %{
        "SnapshotId" => String.t() | atom(),
        "TieringStartTime" => non_neg_integer()
      }
      
  """
  @type modify_snapshot_tier_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_fleet_tag_specification() :: %{
        "ResourceType" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type spot_fleet_tag_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_hosts_result() :: %{
        "Successful" => list(String.t() | atom()),
        "Unsuccessful" => list(unsuccessful_item())
      }
      
  """
  @type modify_hosts_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_transit_gateway_route_table_propagation_result() :: %{
        "Propagation" => transit_gateway_propagation()
      }
      
  """
  @type enable_transit_gateway_route_table_propagation_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      get_vpn_connection_device_types_result() :: %{
        "NextToken" => String.t() | atom(),
        "VpnConnectionDeviceTypes" => list(vpn_connection_device_type())
      }
      
  """
  @type get_vpn_connection_device_types_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_capacity_reservation_fleets_result() :: %{
        "FailedFleetCancellations" => list(failed_capacity_reservation_fleet_cancellation_result()),
        "SuccessfulFleetCancellations" => list(capacity_reservation_fleet_cancellation_state())
      }
      
  """
  @type cancel_capacity_reservation_fleets_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      analysis_packet_header() :: %{
        "DestinationAddresses" => list(String.t() | atom()),
        "DestinationPortRanges" => list(port_range()),
        "Protocol" => String.t() | atom(),
        "SourceAddresses" => list(String.t() | atom()),
        "SourcePortRanges" => list(port_range())
      }
      
  """
  @type analysis_packet_header() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      directory_service_authentication_request() :: %{
        "DirectoryId" => String.t() | atom()
      }
      
  """
  @type directory_service_authentication_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_key_pair_request() :: %{
        optional("DryRun") => boolean(),
        optional("KeyName") => String.t() | atom(),
        optional("KeyPairId") => String.t() | atom()
      }
      
  """
  @type delete_key_pair_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_snapshots_request() :: %{
        optional("CopyTagsFromSource") => list(any()),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Location") => list(any()),
        optional("OutpostArn") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("InstanceSpecification") => instance_specification()
      }
      
  """
  @type create_snapshots_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      assign_private_ip_addresses_request() :: %{
        optional("AllowReassignment") => boolean(),
        optional("Ipv4PrefixCount") => integer(),
        optional("Ipv4Prefixes") => list(String.t() | atom()),
        optional("PrivateIpAddresses") => list(String.t() | atom()),
        optional("SecondaryPrivateIpAddressCount") => integer(),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type assign_private_ip_addresses_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_route_server_request() :: %{
        optional("DryRun") => boolean(),
        optional("PersistRoutes") => list(any()),
        optional("PersistRoutesDuration") => float(),
        optional("SnsNotificationsEnabled") => boolean(),
        required("RouteServerId") => String.t() | atom()
      }
      
  """
  @type modify_route_server_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_classic_link_instances_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("InstanceIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_classic_link_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_vpn_connection_device_types_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type get_vpn_connection_device_types_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_discovered_public_addresses_result() :: %{
        "IpamDiscoveredPublicAddresses" => list(ipam_discovered_public_address()),
        "NextToken" => String.t() | atom(),
        "OldestSampleTime" => non_neg_integer()
      }
      
  """
  @type get_ipam_discovered_public_addresses_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_to_s3_task_specification() :: %{
        "ContainerFormat" => list(any()),
        "DiskImageFormat" => list(any()),
        "S3Bucket" => String.t() | atom(),
        "S3Prefix" => String.t() | atom()
      }
      
  """
  @type export_to_s3_task_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      assign_private_nat_gateway_address_result() :: %{
        "NatGatewayAddresses" => list(nat_gateway_address()),
        "NatGatewayId" => String.t() | atom()
      }
      
  """
  @type assign_private_nat_gateway_address_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_id_format_request() :: %{
        optional("Resource") => String.t() | atom()
      }
      
  """
  @type describe_id_format_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_route_table_announcements_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayRouteTableAnnouncementIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateway_route_table_announcements_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      export_image_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("RoleName") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("DiskImageFormat") => list(any()),
        required("ImageId") => String.t() | atom(),
        required("S3ExportLocation") => export_task_s3_location_request()
      }
      
  """
  @type export_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_identity_id_format_result() :: %{
        "Statuses" => list(id_format())
      }
      
  """
  @type describe_identity_id_format_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_attachment_ena_srd_udp_specification() :: %{
        "EnaSrdUdpEnabled" => boolean()
      }
      
  """
  @type instance_attachment_ena_srd_udp_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_endpoint_load_balancer_options() :: %{
        "Port" => integer(),
        "PortRanges" => list(modify_verified_access_endpoint_port_range()),
        "Protocol" => list(any()),
        "SubnetIds" => list(String.t() | atom())
      }
      
  """
  @type modify_verified_access_endpoint_load_balancer_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_managed_prefix_list_request() :: %{
        optional("AddEntries") => list(add_prefix_list_entry()),
        optional("CurrentVersion") => float(),
        optional("DryRun") => boolean(),
        optional("MaxEntries") => integer(),
        optional("PrefixListName") => String.t() | atom(),
        optional("RemoveEntries") => list(remove_prefix_list_entry()),
        required("PrefixListId") => String.t() | atom()
      }
      
  """
  @type modify_managed_prefix_list_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      move_capacity_reservation_instances_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("DestinationCapacityReservationId") => String.t() | atom(),
        required("InstanceCount") => integer(),
        required("SourceCapacityReservationId") => String.t() | atom()
      }
      
  """
  @type move_capacity_reservation_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_cpu_options() :: %{
        "AmdSevSnp" => list(any()),
        "CoreCount" => integer(),
        "ThreadsPerCore" => integer()
      }
      
  """
  @type launch_template_cpu_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attachment_ena_srd_specification() :: %{
        "EnaSrdEnabled" => boolean(),
        "EnaSrdUdpSpecification" => attachment_ena_srd_udp_specification()
      }
      
  """
  @type attachment_ena_srd_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_byoip_cidrs_request() :: %{
        optional("DryRun") => boolean(),
        optional("NextToken") => String.t() | atom(),
        required("MaxResults") => integer()
      }
      
  """
  @type describe_byoip_cidrs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_insights_access_scope_content() :: %{
        "ExcludePaths" => list(access_scope_path()),
        "MatchPaths" => list(access_scope_path()),
        "NetworkInsightsAccessScopeId" => String.t() | atom()
      }
      
  """
  @type network_insights_access_scope_content() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_insights_path_result() :: %{
        "NetworkInsightsPath" => network_insights_path()
      }
      
  """
  @type create_network_insights_path_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_transit_gateway_vpc_attachment_result() :: %{
        "TransitGatewayVpcAttachment" => transit_gateway_vpc_attachment()
      }
      
  """
  @type reject_transit_gateway_vpc_attachment_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_attribute_request() :: %{
        optional("Attribute") => list(any()),
        optional("BlockDeviceMappings") => list(instance_block_device_mapping_specification()),
        optional("DisableApiStop") => attribute_boolean_value(),
        optional("DisableApiTermination") => attribute_boolean_value(),
        optional("DryRun") => boolean(),
        optional("EbsOptimized") => attribute_boolean_value(),
        optional("EnaSupport") => attribute_boolean_value(),
        optional("Groups") => list(String.t() | atom()),
        optional("InstanceInitiatedShutdownBehavior") => attribute_value(),
        optional("InstanceType") => attribute_value(),
        optional("Kernel") => attribute_value(),
        optional("Ramdisk") => attribute_value(),
        optional("SourceDestCheck") => attribute_boolean_value(),
        optional("SriovNetSupport") => attribute_value(),
        optional("UserData") => blob_attribute_value(),
        optional("Value") => String.t() | atom(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type modify_instance_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_import_snapshot_tasks_result() :: %{
        "ImportSnapshotTasks" => list(import_snapshot_task()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_import_snapshot_tasks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_ipam_resource_discovery_result() :: %{
        "IpamResourceDiscoveryAssociation" => ipam_resource_discovery_association()
      }
      
  """
  @type associate_ipam_resource_discovery_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_group_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("VerifiedAccessInstanceId") => String.t() | atom(),
        required("VerifiedAccessGroupId") => String.t() | atom()
      }
      
  """
  @type modify_verified_access_group_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_instance_logging_configurations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VerifiedAccessInstanceIds") => list(String.t() | atom())
      }
      
  """
  @type describe_verified_access_instance_logging_configurations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      associate_capacity_reservation_billing_owner_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type associate_capacity_reservation_billing_owner_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_security_group_result() :: %{
        "GroupId" => String.t() | atom(),
        "Return" => boolean()
      }
      
  """
  @type delete_security_group_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_network_performance_result() :: %{
        "BandwidthWeighting" => list(any()),
        "InstanceId" => String.t() | atom()
      }
      
  """
  @type modify_instance_network_performance_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipv6_prefix_specification_request() :: %{
        "Ipv6Prefix" => String.t() | atom()
      }
      
  """
  @type ipv6_prefix_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_acl_entry_request() :: %{
        optional("DryRun") => boolean(),
        required("Egress") => boolean(),
        required("NetworkAclId") => String.t() | atom(),
        required("RuleNumber") => integer()
      }
      
  """
  @type delete_network_acl_entry_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_route_table_propagation() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "State" => list(any()),
        "TransitGatewayAttachmentId" => String.t() | atom(),
        "TransitGatewayRouteTableAnnouncementId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_route_table_propagation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_route_server_endpoints_result() :: %{
        "NextToken" => String.t() | atom(),
        "RouteServerEndpoints" => list(route_server_endpoint())
      }
      
  """
  @type describe_route_server_endpoints_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_launch_template_specification_request() :: %{
        "LaunchTemplateId" => String.t() | atom(),
        "LaunchTemplateName" => String.t() | atom(),
        "Version" => String.t() | atom()
      }
      
  """
  @type fleet_launch_template_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_flow_logs_result() :: %{
        "Unsuccessful" => list(unsuccessful_item())
      }
      
  """
  @type delete_flow_logs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_address_history_record() :: %{
        "ResourceCidr" => String.t() | atom(),
        "ResourceComplianceStatus" => list(any()),
        "ResourceId" => String.t() | atom(),
        "ResourceName" => String.t() | atom(),
        "ResourceOverlapStatus" => list(any()),
        "ResourceOwnerId" => String.t() | atom(),
        "ResourceRegion" => String.t() | atom(),
        "ResourceType" => list(any()),
        "SampledEndTime" => non_neg_integer(),
        "SampledStartTime" => non_neg_integer(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type ipam_address_history_record() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_security_group_rules_result() :: %{
        "NextToken" => String.t() | atom(),
        "SecurityGroupRules" => list(security_group_rule())
      }
      
  """
  @type describe_security_group_rules_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_moving_addresses_result() :: %{
        "MovingAddressStatuses" => list(moving_address_status()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_moving_addresses_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_instance_request() :: %{
        optional("CidrEndpointsCustomSubDomain") => String.t() | atom(),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("VerifiedAccessInstanceId") => String.t() | atom()
      }
      
  """
  @type modify_verified_access_instance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enclave_options_request() :: %{
        "Enabled" => boolean()
      }
      
  """
  @type enclave_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_group() :: %{
        "GroupArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom()
      }
      
  """
  @type capacity_reservation_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_subnet_cidr_reservations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type get_subnet_cidr_reservations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_coip_pools_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("PoolIds") => list(String.t() | atom())
      }
      
  """
  @type describe_coip_pools_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_route_tables_result() :: %{
        "NextToken" => String.t() | atom(),
        "RouteTables" => list(route_table())
      }
      
  """
  @type describe_route_tables_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_volume_result() :: %{
        "ConversionTask" => conversion_task()
      }
      
  """
  @type import_volume_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_coip_cidr_request() :: %{
        optional("DryRun") => boolean(),
        required("Cidr") => String.t() | atom(),
        required("CoipPoolId") => String.t() | atom()
      }
      
  """
  @type create_coip_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_security_groups_for_vpc_result() :: %{
        "NextToken" => String.t() | atom(),
        "SecurityGroupForVpcs" => list(security_group_for_vpc())
      }
      
  """
  @type get_security_groups_for_vpc_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_traffic_mirror_filter_rule_result() :: %{
        "ClientToken" => String.t() | atom(),
        "TrafficMirrorFilterRule" => traffic_mirror_filter_rule()
      }
      
  """
  @type create_traffic_mirror_filter_rule_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_elastic_inference_accelerator() :: %{
        "Count" => integer(),
        "Type" => String.t() | atom()
      }
      
  """
  @type launch_template_elastic_inference_accelerator() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_instance_network_interface_specification() :: %{
        "AssociateCarrierIpAddress" => boolean(),
        "AssociatePublicIpAddress" => boolean(),
        "ConnectionTrackingSpecification" => connection_tracking_specification(),
        "DeleteOnTermination" => boolean(),
        "Description" => String.t() | atom(),
        "DeviceIndex" => integer(),
        "EnaQueueCount" => integer(),
        "EnaSrdSpecification" => launch_template_ena_srd_specification(),
        "Groups" => list(String.t() | atom()),
        "InterfaceType" => String.t() | atom(),
        "Ipv4PrefixCount" => integer(),
        "Ipv4Prefixes" => list(ipv4_prefix_specification_response()),
        "Ipv6AddressCount" => integer(),
        "Ipv6Addresses" => list(instance_ipv6_address()),
        "Ipv6PrefixCount" => integer(),
        "Ipv6Prefixes" => list(ipv6_prefix_specification_response()),
        "NetworkCardIndex" => integer(),
        "NetworkInterfaceId" => String.t() | atom(),
        "PrimaryIpv6" => boolean(),
        "PrivateIpAddress" => String.t() | atom(),
        "PrivateIpAddresses" => list(private_ip_address_specification()),
        "SecondaryPrivateIpAddressCount" => integer(),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type launch_template_instance_network_interface_specification() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      associated_role() :: %{
        "AssociatedRoleArn" => String.t() | atom(),
        "CertificateS3BucketName" => String.t() | atom(),
        "CertificateS3ObjectKey" => String.t() | atom(),
        "EncryptionKmsKeyId" => String.t() | atom()
      }
      
  """
  @type associated_role() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_iam_instance_profile_specification() :: %{
        "Arn" => String.t() | atom(),
        "Name" => String.t() | atom()
      }
      
  """
  @type launch_template_iam_instance_profile_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      elastic_gpu_health() :: %{
        "Status" => list(any())
      }
      
  """
  @type elastic_gpu_health() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_transit_gateway_policy_table_result() :: %{
        "Association" => transit_gateway_policy_table_association()
      }
      
  """
  @type disassociate_transit_gateway_policy_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_route_request() :: %{
        optional("DryRun") => boolean(),
        required("DestinationCidrBlock") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_reserved_instances_exchange_quote_request() :: %{
        optional("DryRun") => boolean(),
        optional("TargetConfigurations") => list(target_configuration_request()),
        required("ReservedInstanceIds") => list(String.t() | atom())
      }
      
  """
  @type get_reserved_instances_exchange_quote_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_resource_discovery() :: %{
        "Description" => String.t() | atom(),
        "IpamResourceDiscoveryArn" => String.t() | atom(),
        "IpamResourceDiscoveryId" => String.t() | atom(),
        "IpamResourceDiscoveryRegion" => String.t() | atom(),
        "IsDefault" => boolean(),
        "OperatingRegions" => list(ipam_operating_region()),
        "OrganizationalUnitExclusions" => list(ipam_organizational_unit_exclusion()),
        "OwnerId" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type ipam_resource_discovery() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_fast_snapshot_restores_request() :: %{
        optional("DryRun") => boolean(),
        required("AvailabilityZones") => list(String.t() | atom()),
        required("SourceSnapshotIds") => list(String.t() | atom())
      }
      
  """
  @type enable_fast_snapshot_restores_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_endpoints_request() :: %{
        optional("DryRun") => boolean(),
        required("VpcEndpointIds") => list(String.t() | atom())
      }
      
  """
  @type delete_vpc_endpoints_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateways_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGateways" => list(transit_gateway())
      }
      
  """
  @type describe_transit_gateways_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_vpc_cidr_block_result() :: %{
        "CidrBlockAssociation" => vpc_cidr_block_association(),
        "Ipv6CidrBlockAssociation" => vpc_ipv6_cidr_block_association(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type associate_vpc_cidr_block_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_managed_prefix_list_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("PrefixListId") => String.t() | atom()
      }
      
  """
  @type get_managed_prefix_list_associations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_principal_id_format_result() :: %{
        "NextToken" => String.t() | atom(),
        "Principals" => list(principal_id_format())
      }
      
  """
  @type describe_principal_id_format_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_maintenance_options_request() :: %{
        optional("AutoRecovery") => list(any()),
        optional("DryRun") => boolean(),
        optional("RebootMigration") => list(any()),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type modify_instance_maintenance_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      placement_group_info() :: %{
        "SupportedStrategies" => list(list(any())())
      }
      
  """
  @type placement_group_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_capacity_reservation_fleet_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_capacity_reservation_fleet_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_price_history_result() :: %{
        "NextToken" => String.t() | atom(),
        "SpotPriceHistory" => list(spot_price())
      }
      
  """
  @type describe_spot_price_history_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_volume_result() :: %{
        "VolumeModification" => volume_modification()
      }
      
  """
  @type modify_volume_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_virtual_interfaces_result() :: %{
        "LocalGatewayVirtualInterfaces" => list(local_gateway_virtual_interface()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_virtual_interfaces_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_addresses_request() :: %{
        optional("AllocationIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("PublicIps") => list(String.t() | atom())
      }
      
  """
  @type describe_addresses_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      outpost_lag() :: %{
        "LocalGatewayVirtualInterfaceIds" => list(String.t() | atom()),
        "OutpostArn" => String.t() | atom(),
        "OutpostLagId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "ServiceLinkVirtualInterfaceIds" => list(String.t() | atom()),
        "State" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type outpost_lag() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpn_connection() :: %{
        "Category" => String.t() | atom(),
        "CoreNetworkArn" => String.t() | atom(),
        "CoreNetworkAttachmentArn" => String.t() | atom(),
        "CustomerGatewayConfiguration" => String.t() | atom(),
        "CustomerGatewayId" => String.t() | atom(),
        "GatewayAssociationState" => list(any()),
        "Options" => vpn_connection_options(),
        "PreSharedKeyArn" => String.t() | atom(),
        "Routes" => list(vpn_static_route()),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TransitGatewayId" => String.t() | atom(),
        "Type" => list(any()),
        "VgwTelemetry" => list(vgw_telemetry()),
        "VpnConnectionId" => String.t() | atom(),
        "VpnGatewayId" => String.t() | atom()
      }
      
  """
  @type vpn_connection() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      user_data() :: %{
        "Data" => String.t() | atom()
      }
      
  """
  @type user_data() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_active_vpn_tunnel_status_result() :: %{
        "ActiveVpnTunnelStatus" => active_vpn_tunnel_status()
      }
      
  """
  @type get_active_vpn_tunnel_status_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      available_capacity() :: %{
        "AvailableInstanceCapacity" => list(instance_capacity()),
        "AvailableVCpus" => integer()
      }
      
  """
  @type available_capacity() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_pool_cidrs_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("IpamPoolId") => String.t() | atom()
      }
      
  """
  @type get_ipam_pool_cidrs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_instance_requests_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("SpotInstanceRequestIds") => list(String.t() | atom())
      }
      
  """
  @type describe_spot_instance_requests_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_default_vpc_result() :: %{
        "Vpc" => vpc()
      }
      
  """
  @type create_default_vpc_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_tag_specification_request() :: %{
        "ResourceType" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type launch_template_tag_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_route_table_virtual_interface_group_association_result() :: %{
        "LocalGatewayRouteTableVirtualInterfaceGroupAssociation" => local_gateway_route_table_virtual_interface_group_association()
      }
      
  """
  @type create_local_gateway_route_table_virtual_interface_group_association_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_vpc_result() :: %{
        "Vpc" => vpc()
      }
      
  """
  @type create_vpc_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deprovision_ipam_pool_cidr_result() :: %{
        "IpamPoolCidr" => ipam_pool_cidr()
      }
      
  """
  @type deprovision_ipam_pool_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_root_volume_task() :: %{
        "CompleteTime" => String.t() | atom(),
        "DeleteReplacedRootVolume" => boolean(),
        "ImageId" => String.t() | atom(),
        "InstanceId" => String.t() | atom(),
        "ReplaceRootVolumeTaskId" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "StartTime" => String.t() | atom(),
        "Tags" => list(tag()),
        "TaskState" => list(any())
      }
      
  """
  @type replace_root_volume_task() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      target_network() :: %{
        "AssociationId" => String.t() | atom(),
        "ClientVpnEndpointId" => String.t() | atom(),
        "SecurityGroups" => list(String.t() | atom()),
        "Status" => association_status(),
        "TargetNetworkId" => String.t() | atom(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type target_network() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_route_table_vpc_association_result() :: %{
        "LocalGatewayRouteTableVpcAssociation" => local_gateway_route_table_vpc_association()
      }
      
  """
  @type delete_local_gateway_route_table_vpc_association_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      byoasn() :: %{
        "Asn" => String.t() | atom(),
        "IpamId" => String.t() | atom(),
        "State" => list(any()),
        "StatusMessage" => String.t() | atom()
      }
      
  """
  @type byoasn() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_endpoint_eni_options() :: %{
        "Port" => integer(),
        "PortRanges" => list(modify_verified_access_endpoint_port_range()),
        "Protocol" => list(any())
      }
      
  """
  @type modify_verified_access_endpoint_eni_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attach_verified_access_trust_provider_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("VerifiedAccessInstanceId") => String.t() | atom(),
        required("VerifiedAccessTrustProviderId") => String.t() | atom()
      }
      
  """
  @type attach_verified_access_trust_provider_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_security_group_vpc_request() :: %{
        optional("DryRun") => boolean(),
        required("GroupId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type disassociate_security_group_vpc_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_connect_peer_result() :: %{
        "TransitGatewayConnectPeer" => transit_gateway_connect_peer()
      }
      
  """
  @type delete_transit_gateway_connect_peer_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      search_transit_gateway_multicast_groups_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type search_transit_gateway_multicast_groups_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      start_declarative_policies_report_request() :: %{
        optional("DryRun") => boolean(),
        optional("S3Prefix") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("S3Bucket") => String.t() | atom(),
        required("TargetId") => String.t() | atom()
      }
      
  """
  @type start_declarative_policies_report_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cidr_block() :: %{
        "CidrBlock" => String.t() | atom()
      }
      
  """
  @type cidr_block() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_multicast_domain_association() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceOwnerId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "Subnet" => subnet_association(),
        "TransitGatewayAttachmentId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_multicast_domain_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_trunk_interface_associations_result() :: %{
        "InterfaceAssociations" => list(trunk_interface_association()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_trunk_interface_associations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_internet_gateway_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_internet_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      initialization_status_details() :: %{
        "EstimatedTimeToCompleteInSeconds" => float(),
        "InitializationType" => list(any()),
        "Progress" => float()
      }
      
  """
  @type initialization_status_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_reserved_instances_result() :: %{
        "ReservedInstances" => list(reserved_instances())
      }
      
  """
  @type describe_reserved_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      credit_specification_request() :: %{
        "CpuCredits" => String.t() | atom()
      }
      
  """
  @type credit_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_fleet_launch_specification() :: %{
        "AddressingType" => String.t() | atom(),
        "BlockDeviceMappings" => list(block_device_mapping()),
        "EbsOptimized" => boolean(),
        "IamInstanceProfile" => iam_instance_profile_specification(),
        "ImageId" => String.t() | atom(),
        "InstanceRequirements" => instance_requirements(),
        "InstanceType" => list(any()),
        "KernelId" => String.t() | atom(),
        "KeyName" => String.t() | atom(),
        "Monitoring" => spot_fleet_monitoring(),
        "NetworkInterfaces" => list(instance_network_interface_specification()),
        "Placement" => spot_placement(),
        "RamdiskId" => String.t() | atom(),
        "SecurityGroups" => list(group_identifier()),
        "SpotPrice" => String.t() | atom(),
        "SubnetId" => String.t() | atom(),
        "TagSpecifications" => list(spot_fleet_tag_specification()),
        "UserData" => String.t() | atom(),
        "WeightedCapacity" => float()
      }
      
  """
  @type spot_fleet_launch_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_connect_options() :: %{
        "Protocol" => list(any())
      }
      
  """
  @type transit_gateway_connect_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_client_vpn_authorization_rules_result() :: %{
        "AuthorizationRules" => list(authorization_rule()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_client_vpn_authorization_rules_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_reserved_instances_exchange_quote_result() :: %{
        "ExchangeId" => String.t() | atom()
      }
      
  """
  @type accept_reserved_instances_exchange_quote_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_block_public_access_exclusion_result() :: %{
        "VpcBlockPublicAccessExclusion" => vpc_block_public_access_exclusion()
      }
      
  """
  @type delete_vpc_block_public_access_exclusion_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_placement_score() :: %{
        "AvailabilityZoneId" => String.t() | atom(),
        "Region" => String.t() | atom(),
        "Score" => integer()
      }
      
  """
  @type spot_placement_score() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fleet_instances_result() :: %{
        "ActiveInstances" => list(active_instance()),
        "FleetId" => String.t() | atom(),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_fleet_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_endpoint_request() :: %{
        optional("CidrOptions") => modify_verified_access_endpoint_cidr_options(),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("LoadBalancerOptions") => modify_verified_access_endpoint_load_balancer_options(),
        optional("NetworkInterfaceOptions") => modify_verified_access_endpoint_eni_options(),
        optional("RdsOptions") => modify_verified_access_endpoint_rds_options(),
        optional("VerifiedAccessGroupId") => String.t() | atom(),
        required("VerifiedAccessEndpointId") => String.t() | atom()
      }
      
  """
  @type modify_verified_access_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ena_srd_udp_specification_request() :: %{
        "EnaSrdUdpEnabled" => boolean()
      }
      
  """
  @type ena_srd_udp_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_connect_endpoints_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("InstanceConnectEndpointIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_instance_connect_endpoints_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_tags_request() :: %{
        optional("DryRun") => boolean(),
        required("Resources") => list(String.t() | atom()),
        required("Tags") => list(tag())
      }
      
  """
  @type create_tags_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_insights_access_scope_result() :: %{
        "NetworkInsightsAccessScope" => network_insights_access_scope(),
        "NetworkInsightsAccessScopeContent" => network_insights_access_scope_content()
      }
      
  """
  @type create_network_insights_access_scope_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_peering_attachment() :: %{
        "AccepterTgwInfo" => peering_tgw_info(),
        "AccepterTransitGatewayAttachmentId" => String.t() | atom(),
        "CreationTime" => non_neg_integer(),
        "Options" => transit_gateway_peering_attachment_options(),
        "RequesterTgwInfo" => peering_tgw_info(),
        "State" => list(any()),
        "Status" => peering_attachment_status(),
        "Tags" => list(tag()),
        "TransitGatewayAttachmentId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_peering_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      update_security_group_rule_descriptions_ingress_request() :: %{
        optional("DryRun") => boolean(),
        optional("GroupId") => String.t() | atom(),
        optional("GroupName") => String.t() | atom(),
        optional("IpPermissions") => list(ip_permission()),
        optional("SecurityGroupRuleDescriptions") => list(security_group_rule_description())
      }
      
  """
  @type update_security_group_rule_descriptions_ingress_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      verified_access_endpoint_eni_options() :: %{
        "NetworkInterfaceId" => String.t() | atom(),
        "Port" => integer(),
        "PortRanges" => list(verified_access_endpoint_port_range()),
        "Protocol" => list(any())
      }
      
  """
  @type verified_access_endpoint_eni_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_network_acl_association_request() :: %{
        optional("DryRun") => boolean(),
        required("AssociationId") => String.t() | atom(),
        required("NetworkAclId") => String.t() | atom()
      }
      
  """
  @type replace_network_acl_association_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpn_connection_device_type() :: %{
        "Platform" => String.t() | atom(),
        "Software" => String.t() | atom(),
        "Vendor" => String.t() | atom(),
        "VpnConnectionDeviceTypeId" => String.t() | atom()
      }
      
  """
  @type vpn_connection_device_type() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_ipam_request() :: %{
        optional("Cascade") => boolean(),
        optional("DryRun") => boolean(),
        required("IpamId") => String.t() | atom()
      }
      
  """
  @type delete_ipam_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_capacity_reservation_billing_owner_request() :: %{
        optional("DryRun") => boolean(),
        required("CapacityReservationId") => String.t() | atom(),
        required("UnusedReservationBillingOwnerId") => String.t() | atom()
      }
      
  """
  @type disassociate_capacity_reservation_billing_owner_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      mac_system_integrity_protection_configuration() :: %{
        "AppleInternal" => list(any()),
        "BaseSystem" => list(any()),
        "DTraceRestrictions" => list(any()),
        "DebuggingRestrictions" => list(any()),
        "FilesystemProtections" => list(any()),
        "KextSigning" => list(any()),
        "NvramProtections" => list(any()),
        "Status" => list(any())
      }
      
  """
  @type mac_system_integrity_protection_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_ipam_resource_discovery_result() :: %{
        "IpamResourceDiscovery" => ipam_resource_discovery()
      }
      
  """
  @type create_ipam_resource_discovery_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_regions_request() :: %{
        optional("AllRegions") => boolean(),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("RegionNames") => list(String.t() | atom())
      }
      
  """
  @type describe_regions_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deregister_instance_event_notification_attributes_result() :: %{
        "InstanceTagAttribute" => instance_tag_notification_attribute()
      }
      
  """
  @type deregister_instance_event_notification_attributes_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      run_scheduled_instances_result() :: %{
        "InstanceIdSet" => list(String.t() | atom())
      }
      
  """
  @type run_scheduled_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      request_spot_launch_specification() :: %{
        "AddressingType" => String.t() | atom(),
        "BlockDeviceMappings" => list(block_device_mapping()),
        "EbsOptimized" => boolean(),
        "IamInstanceProfile" => iam_instance_profile_specification(),
        "ImageId" => String.t() | atom(),
        "InstanceType" => list(any()),
        "KernelId" => String.t() | atom(),
        "KeyName" => String.t() | atom(),
        "Monitoring" => run_instances_monitoring_enabled(),
        "NetworkInterfaces" => list(instance_network_interface_specification()),
        "Placement" => spot_placement(),
        "RamdiskId" => String.t() | atom(),
        "SecurityGroupIds" => list(String.t() | atom()),
        "SecurityGroups" => list(String.t() | atom()),
        "SubnetId" => String.t() | atom(),
        "UserData" => String.t() | atom()
      }
      
  """
  @type request_spot_launch_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_endpoints_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VerifiedAccessEndpointIds") => list(String.t() | atom()),
        optional("VerifiedAccessGroupId") => String.t() | atom(),
        optional("VerifiedAccessInstanceId") => String.t() | atom()
      }
      
  """
  @type describe_verified_access_endpoints_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      region() :: %{
        "Endpoint" => String.t() | atom(),
        "OptInStatus" => String.t() | atom(),
        "RegionName" => String.t() | atom()
      }
      
  """
  @type region() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_policy_tables_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayPolicyTableIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateway_policy_tables_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_virtual_interface_request() :: %{
        optional("DryRun") => boolean(),
        required("LocalGatewayVirtualInterfaceId") => String.t() | atom()
      }
      
  """
  @type delete_local_gateway_virtual_interface_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      classic_load_balancer() :: %{
        "Name" => String.t() | atom()
      }
      
  """
  @type classic_load_balancer() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_attribute() :: %{
        "BlockDeviceMappings" => list(instance_block_device_mapping()),
        "DisableApiStop" => attribute_boolean_value(),
        "DisableApiTermination" => attribute_boolean_value(),
        "EbsOptimized" => attribute_boolean_value(),
        "EnaSupport" => attribute_boolean_value(),
        "EnclaveOptions" => enclave_options(),
        "Groups" => list(group_identifier()),
        "InstanceId" => String.t() | atom(),
        "InstanceInitiatedShutdownBehavior" => attribute_value(),
        "InstanceType" => attribute_value(),
        "KernelId" => attribute_value(),
        "ProductCodes" => list(product_code()),
        "RamdiskId" => attribute_value(),
        "RootDeviceName" => attribute_value(),
        "SourceDestCheck" => attribute_boolean_value(),
        "SriovNetSupport" => attribute_value(),
        "UserData" => attribute_value()
      }
      
  """
  @type instance_attribute() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_credit_specifications_result() :: %{
        "InstanceCreditSpecifications" => list(instance_credit_specification()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_instance_credit_specifications_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_capacity_reservation_result() :: %{
        "CapacityReservation" => capacity_reservation()
      }
      
  """
  @type create_capacity_reservation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_association() :: %{
        "RouteServerId" => String.t() | atom(),
        "State" => list(any()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type route_server_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deregister_image_request() :: %{
        optional("DeleteAssociatedSnapshots") => boolean(),
        optional("DryRun") => boolean(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type deregister_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attach_classic_link_vpc_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type attach_classic_link_vpc_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase2_d_h_group_numbers_list_value() :: %{
        "Value" => integer()
      }
      
  """
  @type phase2_d_h_group_numbers_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_acl_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type create_network_acl_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_connection_notifications_result() :: %{
        "ConnectionNotificationSet" => list(connection_notification()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_vpc_endpoint_connection_notifications_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_ipam_pools_result() :: %{
        "IpamPools" => list(ipam_pool()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_ipam_pools_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_authentication_request() :: %{
        "ActiveDirectory" => directory_service_authentication_request(),
        "FederatedAuthentication" => federated_authentication_request(),
        "MutualAuthentication" => certificate_authentication_request(),
        "Type" => list(any())
      }
      
  """
  @type client_vpn_authentication_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_public_ip_dns_name_options_result() :: %{
        "Successful" => boolean()
      }
      
  """
  @type modify_public_ip_dns_name_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attach_internet_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("InternetGatewayId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type attach_internet_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      provision_ipam_pool_cidr_result() :: %{
        "IpamPoolCidr" => ipam_pool_cidr()
      }
      
  """
  @type provision_ipam_pool_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_cidr_authorization_context() :: %{
        "Message" => String.t() | atom(),
        "Signature" => String.t() | atom()
      }
      
  """
  @type ipam_cidr_authorization_context() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_traffic_mirror_filter_rule_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DestinationPortRange") => traffic_mirror_port_range_request(),
        optional("DryRun") => boolean(),
        optional("Protocol") => integer(),
        optional("SourcePortRange") => traffic_mirror_port_range_request(),
        optional("TagSpecifications") => list(tag_specification()),
        required("DestinationCidrBlock") => String.t() | atom(),
        required("RuleAction") => list(any()),
        required("RuleNumber") => integer(),
        required("SourceCidrBlock") => String.t() | atom(),
        required("TrafficDirection") => list(any()),
        required("TrafficMirrorFilterId") => String.t() | atom()
      }
      
  """
  @type create_traffic_mirror_filter_rule_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_interfaces_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NetworkInterfaceIds") => list(String.t() | atom()),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_network_interfaces_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_route_server_propagation_result() :: %{
        "RouteServerPropagation" => route_server_propagation()
      }
      
  """
  @type disable_route_server_propagation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_trust_provider_device_options() :: %{
        "PublicSigningKeyUrl" => String.t() | atom(),
        "TenantId" => String.t() | atom()
      }
      
  """
  @type create_verified_access_trust_provider_device_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_launch_template_versions_response_success_item() :: %{
        "LaunchTemplateId" => String.t() | atom(),
        "LaunchTemplateName" => String.t() | atom(),
        "VersionNumber" => float()
      }
      
  """
  @type delete_launch_template_versions_response_success_item() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_vpc_block_public_access_options_request() :: %{
        optional("DryRun") => boolean(),
        required("InternetGatewayBlockMode") => list(any())
      }
      
  """
  @type modify_vpc_block_public_access_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_interface_attribute_result() :: %{
        "AssociatePublicIpAddress" => boolean(),
        "Attachment" => network_interface_attachment(),
        "Description" => attribute_value(),
        "Groups" => list(group_identifier()),
        "NetworkInterfaceId" => String.t() | atom(),
        "SourceDestCheck" => attribute_boolean_value()
      }
      
  """
  @type describe_network_interface_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_attachment_bgp_configuration() :: %{
        "BgpStatus" => list(any()),
        "PeerAddress" => String.t() | atom(),
        "PeerAsn" => float(),
        "TransitGatewayAddress" => String.t() | atom(),
        "TransitGatewayAsn" => float()
      }
      
  """
  @type transit_gateway_attachment_bgp_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_reserved_instances_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("OfferingClass") => list(any()),
        optional("OfferingType") => list(any()),
        optional("ReservedInstancesIds") => list(String.t() | atom())
      }
      
  """
  @type describe_reserved_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_bundle_tasks_result() :: %{
        "BundleTasks" => list(bundle_task())
      }
      
  """
  @type describe_bundle_tasks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_vpn_connection_device_sample_configuration_request() :: %{
        optional("DryRun") => boolean(),
        optional("InternetKeyExchangeVersion") => String.t() | atom(),
        optional("SampleType") => String.t() | atom(),
        required("VpnConnectionDeviceTypeId") => String.t() | atom(),
        required("VpnConnectionId") => String.t() | atom()
      }
      
  """
  @type get_vpn_connection_device_sample_configuration_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      disassociate_route_server_result() :: %{
        "RouteServerAssociation" => route_server_association()
      }
      
  """
  @type disassociate_route_server_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_interface_association() :: %{
        "AllocationId" => String.t() | atom(),
        "AssociationId" => String.t() | atom(),
        "CarrierIp" => String.t() | atom(),
        "CustomerOwnedIp" => String.t() | atom(),
        "IpOwnerId" => String.t() | atom(),
        "PublicDnsName" => String.t() | atom(),
        "PublicIp" => String.t() | atom()
      }
      
  """
  @type network_interface_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reserved_instances_id() :: %{
        "ReservedInstancesId" => String.t() | atom()
      }
      
  """
  @type reserved_instances_id() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_instance_result() :: %{
        "ConversionTask" => conversion_task()
      }
      
  """
  @type import_instance_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_route_request() :: %{
        optional("Blackhole") => boolean(),
        optional("DryRun") => boolean(),
        optional("TransitGatewayAttachmentId") => String.t() | atom(),
        required("DestinationCidrBlock") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpn_connections_result() :: %{
        "VpnConnections" => list(vpn_connection())
      }
      
  """
  @type describe_vpn_connections_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      terminate_client_vpn_connections_result() :: %{
        "ClientVpnEndpointId" => String.t() | atom(),
        "ConnectionStatuses" => list(terminate_connection_status()),
        "Username" => String.t() | atom()
      }
      
  """
  @type terminate_client_vpn_connections_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_instance_tpm_ek_pub_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceId") => String.t() | atom(),
        required("KeyFormat") => list(any()),
        required("KeyType") => list(any())
      }
      
  """
  @type get_instance_tpm_ek_pub_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_replace_root_volume_tasks_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ReplaceRootVolumeTaskIds") => list(String.t() | atom())
      }
      
  """
  @type describe_replace_root_volume_tasks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_aws_network_performance_metric_subscription_result() :: %{
        "Output" => boolean()
      }
      
  """
  @type enable_aws_network_performance_metric_subscription_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_security_group_request() :: %{
        optional("DryRun") => boolean(),
        optional("GroupId") => String.t() | atom(),
        optional("GroupName") => String.t() | atom()
      }
      
  """
  @type delete_security_group_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_classic_link() :: %{
        "ClassicLinkEnabled" => boolean(),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type vpc_classic_link() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_egress_only_internet_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("EgressOnlyInternetGatewayId") => String.t() | atom()
      }
      
  """
  @type delete_egress_only_internet_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_public_ipv4_pools_result() :: %{
        "NextToken" => String.t() | atom(),
        "PublicIpv4Pools" => list(public_ipv4_pool())
      }
      
  """
  @type describe_public_ipv4_pools_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_ipv6_cidr_block_association() :: %{
        "AssociationId" => String.t() | atom(),
        "IpSource" => list(any()),
        "Ipv6AddressAttribute" => list(any()),
        "Ipv6CidrBlock" => String.t() | atom(),
        "Ipv6CidrBlockState" => vpc_cidr_block_state(),
        "Ipv6Pool" => String.t() | atom(),
        "NetworkBorderGroup" => String.t() | atom()
      }
      
  """
  @type vpc_ipv6_cidr_block_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_bgp_options_request() :: %{
        "PeerAsn" => float(),
        "PeerLivenessDetection" => list(any())
      }
      
  """
  @type route_server_bgp_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_queued_reserved_instances_request() :: %{
        optional("DryRun") => boolean(),
        required("ReservedInstancesIds") => list(String.t() | atom())
      }
      
  """
  @type delete_queued_reserved_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_image_block_public_access_result() :: %{
        "ImageBlockPublicAccessState" => list(any())
      }
      
  """
  @type disable_image_block_public_access_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      private_dns_name_configuration() :: %{
        "Name" => String.t() | atom(),
        "State" => list(any()),
        "Type" => String.t() | atom(),
        "Value" => String.t() | atom()
      }
      
  """
  @type private_dns_name_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_peering_connection_result() :: %{
        "VpcPeeringConnection" => vpc_peering_connection()
      }
      
  """
  @type create_vpc_peering_connection_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_launch_template_version_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("LaunchTemplateId") => String.t() | atom(),
        optional("LaunchTemplateName") => String.t() | atom(),
        optional("ResolveAlias") => boolean(),
        optional("SourceVersion") => String.t() | atom(),
        optional("VersionDescription") => String.t() | atom(),
        required("LaunchTemplateData") => request_launch_template_data()
      }
      
  """
  @type create_launch_template_version_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_client_vpn_endpoint_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_client_vpn_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_ipam_external_resource_verification_token_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("IpamId") => String.t() | atom()
      }
      
  """
  @type create_ipam_external_resource_verification_token_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      disassociate_transit_gateway_multicast_domain_result() :: %{
        "Associations" => transit_gateway_multicast_domain_associations()
      }
      
  """
  @type disassociate_transit_gateway_multicast_domain_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_spot_fleet_request_request() :: %{
        optional("Context") => String.t() | atom(),
        optional("ExcessCapacityTerminationPolicy") => list(any()),
        optional("LaunchTemplateConfigs") => list(launch_template_config()),
        optional("OnDemandTargetCapacity") => integer(),
        optional("TargetCapacity") => integer(),
        required("SpotFleetRequestId") => String.t() | atom()
      }
      
  """
  @type modify_spot_fleet_request_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_subnet_request() :: %{
        optional("DryRun") => boolean(),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type delete_subnet_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      start_declarative_policies_report_result() :: %{
        "ReportId" => String.t() | atom()
      }
      
  """
  @type start_declarative_policies_report_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_capacity_reservation_request() :: %{
        optional("AvailabilityZone") => String.t() | atom(),
        optional("AvailabilityZoneId") => String.t() | atom(),
        optional("ClientToken") => String.t() | atom(),
        optional("CommitmentDuration") => float(),
        optional("DeliveryPreference") => list(any()),
        optional("DryRun") => boolean(),
        optional("EbsOptimized") => boolean(),
        optional("EndDate") => non_neg_integer(),
        optional("EndDateType") => list(any()),
        optional("EphemeralStorage") => boolean(),
        optional("InstanceMatchCriteria") => list(any()),
        optional("OutpostArn") => String.t() | atom(),
        optional("PlacementGroupArn") => String.t() | atom(),
        optional("StartDate") => non_neg_integer(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("Tenancy") => list(any()),
        required("InstanceCount") => integer(),
        required("InstancePlatform") => list(any()),
        required("InstanceType") => String.t() | atom()
      }
      
  """
  @type create_capacity_reservation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_insights_analyses_result() :: %{
        "NetworkInsightsAnalyses" => list(network_insights_analysis()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_network_insights_analyses_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_fast_launch_result() :: %{
        "ImageId" => String.t() | atom(),
        "LaunchTemplate" => fast_launch_launch_template_specification_response(),
        "MaxParallelLaunches" => integer(),
        "OwnerId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "SnapshotConfiguration" => fast_launch_snapshot_configuration_response(),
        "State" => list(any()),
        "StateTransitionReason" => String.t() | atom(),
        "StateTransitionTime" => non_neg_integer()
      }
      
  """
  @type disable_fast_launch_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_traffic_mirror_sessions_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TrafficMirrorSessionIds") => list(String.t() | atom())
      }
      
  """
  @type describe_traffic_mirror_sessions_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_carrier_gateway_result() :: %{
        "CarrierGateway" => carrier_gateway()
      }
      
  """
  @type delete_carrier_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("Attribute") => list(any()),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type describe_instance_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_client_vpn_route_result() :: %{
        "Status" => client_vpn_route_status()
      }
      
  """
  @type create_client_vpn_route_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_options_request() :: %{
        "AllocationStrategy" => list(any()),
        "InstanceInterruptionBehavior" => list(any()),
        "InstancePoolsToUseCount" => integer(),
        "MaintenanceStrategies" => fleet_spot_maintenance_strategies_request(),
        "MaxTotalPrice" => String.t() | atom(),
        "MinTargetCapacity" => integer(),
        "SingleAvailabilityZone" => boolean(),
        "SingleInstanceType" => boolean()
      }
      
  """
  @type spot_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fleets_instances() :: %{
        "InstanceIds" => list(String.t() | atom()),
        "InstanceType" => list(any()),
        "LaunchTemplateAndOverrides" => launch_template_and_overrides_response(),
        "Lifecycle" => list(any()),
        "Platform" => list(any())
      }
      
  """
  @type describe_fleets_instances() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_address_transfer_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("Address") => String.t() | atom()
      }
      
  """
  @type accept_address_transfer_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      start_network_insights_access_scope_analysis_result() :: %{
        "NetworkInsightsAccessScopeAnalysis" => network_insights_access_scope_analysis()
      }
      
  """
  @type start_network_insights_access_scope_analysis_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_instance_maintenance_options_request() :: %{
        "AutoRecovery" => list(any())
      }
      
  """
  @type launch_template_instance_maintenance_options_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_image_usage_report_entries_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("ImageIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ReportIds") => list(String.t() | atom())
      }
      
  """
  @type describe_image_usage_report_entries_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_security_groups_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("GroupIds") => list(String.t() | atom()),
        optional("GroupNames") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_security_groups_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_import_task_request() :: %{
        optional("CancelReason") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("ImportTaskId") => String.t() | atom()
      }
      
  """
  @type cancel_import_task_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_client_vpn_route_request() :: %{
        optional("DryRun") => boolean(),
        optional("TargetVpcSubnetId") => String.t() | atom(),
        required("ClientVpnEndpointId") => String.t() | atom(),
        required("DestinationCidrBlock") => String.t() | atom()
      }
      
  """
  @type delete_client_vpn_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpn_tunnel_options_result() :: %{
        "VpnConnection" => vpn_connection()
      }
      
  """
  @type modify_vpn_tunnel_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_card_info() :: %{
        "BaselineBandwidthInGbps" => float(),
        "DefaultEnaQueueCountPerInterface" => integer(),
        "MaximumEnaQueueCount" => integer(),
        "MaximumEnaQueueCountPerInterface" => integer(),
        "MaximumNetworkInterfaces" => integer(),
        "NetworkCardIndex" => integer(),
        "NetworkPerformance" => String.t() | atom(),
        "PeakBandwidthInGbps" => float()
      }
      
  """
  @type network_card_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      id_format() :: %{
        "Deadline" => non_neg_integer(),
        "Resource" => String.t() | atom(),
        "UseLongIds" => boolean()
      }
      
  """
  @type id_format() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_virtual_interface_group_result() :: %{
        "LocalGatewayVirtualInterfaceGroup" => local_gateway_virtual_interface_group()
      }
      
  """
  @type delete_local_gateway_virtual_interface_group_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_allowed_images_settings_result() :: %{
        "AllowedImagesSettingsState" => list(any())
      }
      
  """
  @type enable_allowed_images_settings_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_reservations_request() :: %{
        optional("CapacityReservationIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_capacity_reservations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      host_properties() :: %{
        "Cores" => integer(),
        "InstanceFamily" => String.t() | atom(),
        "InstanceType" => String.t() | atom(),
        "Sockets" => integer(),
        "TotalVCpus" => integer()
      }
      
  """
  @type host_properties() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_launch_template_overrides() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "BlockDeviceMappings" => list(block_device_mapping_response()),
        "ImageId" => String.t() | atom(),
        "InstanceRequirements" => instance_requirements(),
        "InstanceType" => list(any()),
        "MaxPrice" => String.t() | atom(),
        "Placement" => placement_response(),
        "Priority" => float(),
        "SubnetId" => String.t() | atom(),
        "WeightedCapacity" => float()
      }
      
  """
  @type fleet_launch_template_overrides() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_fleet_request_history_response() :: %{
        "HistoryRecords" => list(history_record()),
        "LastEvaluatedTime" => non_neg_integer(),
        "NextToken" => String.t() | atom(),
        "SpotFleetRequestId" => String.t() | atom(),
        "StartTime" => non_neg_integer()
      }
      
  """
  @type describe_spot_fleet_request_history_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_route_table_announcements_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayRouteTableAnnouncements" => list(transit_gateway_route_table_announcement())
      }
      
  """
  @type describe_transit_gateway_route_table_announcements_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      detach_classic_link_vpc_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type detach_classic_link_vpc_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_export_tasks_result() :: %{
        "ExportTasks" => list(export_task())
      }
      
  """
  @type describe_export_tasks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_transit_gateway_route_table_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type disassociate_transit_gateway_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_network_performance_options() :: %{
        "BandwidthWeighting" => list(any())
      }
      
  """
  @type launch_template_network_performance_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_classic_link_dns_support_result() :: %{
        "NextToken" => String.t() | atom(),
        "Vpcs" => list(classic_link_dns_support())
      }
      
  """
  @type describe_vpc_classic_link_dns_support_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_delegate_mac_volume_ownership_task_result() :: %{
        "MacModificationTask" => mac_modification_task()
      }
      
  """
  @type create_delegate_mac_volume_ownership_task_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_carrier_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("CarrierGatewayId") => String.t() | atom()
      }
      
  """
  @type delete_carrier_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_dhcp_options_result() :: %{
        "DhcpOptions" => list(dhcp_options()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_dhcp_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_placement_group_request() :: %{
        optional("DryRun") => boolean(),
        optional("GroupName") => String.t() | atom(),
        optional("PartitionCount") => integer(),
        optional("SpreadLevel") => list(any()),
        optional("Strategy") => list(any()),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_placement_group_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_transit_gateway_options() :: %{
        "AddTransitGatewayCidrBlocks" => list(String.t() | atom()),
        "AmazonSideAsn" => float(),
        "AssociationDefaultRouteTableId" => String.t() | atom(),
        "AutoAcceptSharedAttachments" => list(any()),
        "DefaultRouteTableAssociation" => list(any()),
        "DefaultRouteTablePropagation" => list(any()),
        "DnsSupport" => list(any()),
        "PropagationDefaultRouteTableId" => String.t() | atom(),
        "RemoveTransitGatewayCidrBlocks" => list(String.t() | atom()),
        "SecurityGroupReferencingSupport" => list(any()),
        "VpnEcmpSupport" => list(any())
      }
      
  """
  @type modify_transit_gateway_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_fast_snapshot_restore_state_error() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type enable_fast_snapshot_restore_state_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      nitro_tpm_info() :: %{
        "SupportedVersions" => list(String.t() | atom())
      }
      
  """
  @type nitro_tpm_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      propagating_vgw() :: %{
        "GatewayId" => String.t() | atom()
      }
      
  """
  @type propagating_vgw() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_nat_gateway_request() :: %{
        optional("AllocationId") => String.t() | atom(),
        optional("ClientToken") => String.t() | atom(),
        optional("ConnectivityType") => list(any()),
        optional("DryRun") => boolean(),
        optional("PrivateIpAddress") => String.t() | atom(),
        optional("SecondaryAllocationIds") => list(String.t() | atom()),
        optional("SecondaryPrivateIpAddressCount") => integer(),
        optional("SecondaryPrivateIpAddresses") => list(String.t() | atom()),
        optional("TagSpecifications") => list(tag_specification()),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type create_nat_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      tag() :: %{
        "Key" => String.t() | atom(),
        "Value" => String.t() | atom()
      }
      
  """
  @type tag() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      advertise_byoip_cidr_request() :: %{
        optional("Asn") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("NetworkBorderGroup") => String.t() | atom(),
        required("Cidr") => String.t() | atom()
      }
      
  """
  @type advertise_byoip_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_export_tasks_request() :: %{
        optional("ExportTaskIds") => list(String.t() | atom()),
        optional("Filters") => list(filter())
      }
      
  """
  @type describe_export_tasks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_vpc_attachment_result() :: %{
        "TransitGatewayVpcAttachment" => transit_gateway_vpc_attachment()
      }
      
  """
  @type delete_transit_gateway_vpc_attachment_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_subnet_cidr_reservation_request() :: %{
        optional("DryRun") => boolean(),
        required("SubnetCidrReservationId") => String.t() | atom()
      }
      
  """
  @type delete_subnet_cidr_reservation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      access_scope_path() :: %{
        "Destination" => path_statement(),
        "Source" => path_statement(),
        "ThroughResources" => list(through_resources_statement())
      }
      
  """
  @type access_scope_path() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_result() :: %{
        "TransitGateway" => transit_gateway()
      }
      
  """
  @type create_transit_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      request_filter_port_range() :: %{
        "FromPort" => integer(),
        "ToPort" => integer()
      }
      
  """
  @type request_filter_port_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      elastic_inference_accelerator() :: %{
        "Count" => integer(),
        "Type" => String.t() | atom()
      }
      
  """
  @type elastic_inference_accelerator() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      allocate_ipam_pool_cidr_request() :: %{
        optional("AllowedCidrs") => list(String.t() | atom()),
        optional("Cidr") => String.t() | atom(),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DisallowedCidrs") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("NetmaskLength") => integer(),
        optional("PreviewNextCidr") => boolean(),
        required("IpamPoolId") => String.t() | atom()
      }
      
  """
  @type allocate_ipam_pool_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_locked_snapshots_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("SnapshotIds") => list(String.t() | atom())
      }
      
  """
  @type describe_locked_snapshots_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_mac_hosts_result() :: %{
        "MacHosts" => list(mac_host()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_mac_hosts_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_reserved_instances_listing_result() :: %{
        "ReservedInstancesListings" => list(reserved_instances_listing())
      }
      
  """
  @type create_reserved_instances_listing_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_launch_templates_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("LaunchTemplateIds") => list(String.t() | atom()),
        optional("LaunchTemplateNames") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_launch_templates_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_transit_gateway_peering_attachment_result() :: %{
        "TransitGatewayPeeringAttachment" => transit_gateway_peering_attachment()
      }
      
  """
  @type accept_transit_gateway_peering_attachment_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      successful_instance_credit_specification_item() :: %{
        "InstanceId" => String.t() | atom()
      }
      
  """
  @type successful_instance_credit_specification_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      icmp_type_code() :: %{
        "Code" => integer(),
        "Type" => integer()
      }
      
  """
  @type icmp_type_code() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_route_server_propagations_result() :: %{
        "RouteServerPropagations" => list(route_server_propagation())
      }
      
  """
  @type get_route_server_propagations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_transit_gateway_multicast_domain_request() :: %{
        optional("DryRun") => boolean(),
        required("SubnetIds") => list(String.t() | atom()),
        required("TransitGatewayAttachmentId") => String.t() | atom(),
        required("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type associate_transit_gateway_multicast_domain_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_cidr_block_association() :: %{
        "AssociationId" => String.t() | atom(),
        "CidrBlock" => String.t() | atom(),
        "CidrBlockState" => vpc_cidr_block_state()
      }
      
  """
  @type vpc_cidr_block_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      path_request_filter() :: %{
        "DestinationAddress" => String.t() | atom(),
        "DestinationPortRange" => request_filter_port_range(),
        "SourceAddress" => String.t() | atom(),
        "SourcePortRange" => request_filter_port_range()
      }
      
  """
  @type path_request_filter() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_hibernation_options() :: %{
        "Configured" => boolean()
      }
      
  """
  @type launch_template_hibernation_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_traffic_mirror_target_result() :: %{
        "ClientToken" => String.t() | atom(),
        "TrafficMirrorTarget" => traffic_mirror_target()
      }
      
  """
  @type create_traffic_mirror_target_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unassign_ipv6_addresses_request() :: %{
        optional("Ipv6Addresses") => list(String.t() | atom()),
        optional("Ipv6Prefixes") => list(String.t() | atom()),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type unassign_ipv6_addresses_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_connect_peers_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayConnectPeerIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateway_connect_peers_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_host_reservation_offerings_request() :: %{
        optional("Filter") => list(filter()),
        optional("MaxDuration") => integer(),
        optional("MaxResults") => integer(),
        optional("MinDuration") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("OfferingId") => String.t() | atom()
      }
      
  """
  @type describe_host_reservation_offerings_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      creation_date_condition() :: %{
        "MaximumDaysSinceCreated" => integer()
      }
      
  """
  @type creation_date_condition() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_discovered_public_addresses_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("AddressRegion") => String.t() | atom(),
        required("IpamResourceDiscoveryId") => String.t() | atom()
      }
      
  """
  @type get_ipam_discovered_public_addresses_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unassign_private_nat_gateway_address_result() :: %{
        "NatGatewayAddresses" => list(nat_gateway_address()),
        "NatGatewayId" => String.t() | atom()
      }
      
  """
  @type unassign_private_nat_gateway_address_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipv4_prefix_specification_request() :: %{
        "Ipv4Prefix" => String.t() | atom()
      }
      
  """
  @type ipv4_prefix_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_carrier_gateway_result() :: %{
        "CarrierGateway" => carrier_gateway()
      }
      
  """
  @type create_carrier_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_credit_specification() :: %{
        "CpuCredits" => String.t() | atom(),
        "InstanceId" => String.t() | atom()
      }
      
  """
  @type instance_credit_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      allocate_address_request() :: %{
        optional("Address") => String.t() | atom(),
        optional("CustomerOwnedIpv4Pool") => String.t() | atom(),
        optional("Domain") => list(any()),
        optional("DryRun") => boolean(),
        optional("IpamPoolId") => String.t() | atom(),
        optional("NetworkBorderGroup") => String.t() | atom(),
        optional("PublicIpv4Pool") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type allocate_address_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("Attribute") => list(any()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type describe_vpc_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_image_request() :: %{
        optional("BlockDeviceMappings") => list(block_device_mapping()),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("NoReboot") => boolean(),
        optional("SnapshotLocation") => list(any()),
        optional("TagSpecifications") => list(tag_specification()),
        required("InstanceId") => String.t() | atom(),
        required("Name") => String.t() | atom()
      }
      
  """
  @type create_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_instance_event_window_request() :: %{
        optional("DryRun") => boolean(),
        required("AssociationTarget") => instance_event_window_association_request(),
        required("InstanceEventWindowId") => String.t() | atom()
      }
      
  """
  @type associate_instance_event_window_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      private_ip_address_specification() :: %{
        "Primary" => boolean(),
        "PrivateIpAddress" => String.t() | atom()
      }
      
  """
  @type private_ip_address_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_volumes_modifications_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VolumeIds") => list(String.t() | atom())
      }
      
  """
  @type describe_volumes_modifications_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_enclave_options_request() :: %{
        "Enabled" => boolean()
      }
      
  """
  @type launch_template_enclave_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_bfd_status() :: %{
        "Status" => list(any())
      }
      
  """
  @type route_server_bfd_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_block_extension_offerings_result() :: %{
        "CapacityBlockExtensionOfferings" => list(capacity_block_extension_offering()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_capacity_block_extension_offerings_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_security_group_rules_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("SecurityGroupRuleIds") => list(String.t() | atom())
      }
      
  """
  @type describe_security_group_rules_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_endpoint_cidr_options() :: %{
        "Cidr" => String.t() | atom(),
        "PortRanges" => list(verified_access_endpoint_port_range()),
        "Protocol" => list(any()),
        "SubnetIds" => list(String.t() | atom())
      }
      
  """
  @type verified_access_endpoint_cidr_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      hibernation_options_request() :: %{
        "Configured" => boolean()
      }
      
  """
  @type hibernation_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_public_address_tags() :: %{
        "EipTags" => list(ipam_public_address_tag())
      }
      
  """
  @type ipam_public_address_tags() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_launch_template_config() :: %{
        "LaunchTemplateSpecification" => fleet_launch_template_specification(),
        "Overrides" => list(fleet_launch_template_overrides())
      }
      
  """
  @type fleet_launch_template_config() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_event_window_result() :: %{
        "InstanceEventWindow" => instance_event_window()
      }
      
  """
  @type modify_instance_event_window_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_availability_zone_group_request() :: %{
        optional("DryRun") => boolean(),
        required("GroupName") => String.t() | atom(),
        required("OptInStatus") => list(any())
      }
      
  """
  @type modify_availability_zone_group_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      price_schedule() :: %{
        "Active" => boolean(),
        "CurrencyCode" => list(any()),
        "Price" => float(),
        "Term" => float()
      }
      
  """
  @type price_schedule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      allocate_hosts_request() :: %{
        optional("AssetIds") => list(String.t() | atom()),
        optional("AutoPlacement") => list(any()),
        optional("AvailabilityZone") => String.t() | atom(),
        optional("AvailabilityZoneId") => String.t() | atom(),
        optional("ClientToken") => String.t() | atom(),
        optional("HostMaintenance") => list(any()),
        optional("HostRecovery") => list(any()),
        optional("InstanceFamily") => String.t() | atom(),
        optional("InstanceType") => String.t() | atom(),
        optional("OutpostArn") => String.t() | atom(),
        optional("Quantity") => integer(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type allocate_hosts_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_default_credit_specification_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceFamily") => list(any())
      }
      
  """
  @type get_default_credit_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_image_usage_reports_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("ImageIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ReportIds") => list(String.t() | atom())
      }
      
  """
  @type describe_image_usage_reports_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_trust_provider() :: %{
        "CreationTime" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "DeviceOptions" => device_options(),
        "DeviceTrustProviderType" => list(any()),
        "LastUpdatedTime" => String.t() | atom(),
        "NativeApplicationOidcOptions" => native_application_oidc_options(),
        "OidcOptions" => oidc_options(),
        "PolicyReferenceName" => String.t() | atom(),
        "SseSpecification" => verified_access_sse_specification_response(),
        "Tags" => list(tag()),
        "TrustProviderType" => list(any()),
        "UserTrustProviderType" => list(any()),
        "VerifiedAccessTrustProviderId" => String.t() | atom()
      }
      
  """
  @type verified_access_trust_provider() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      response_error() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type response_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateways_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("LocalGatewayIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_local_gateways_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_pools_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IpamPoolIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_ipam_pools_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_spot_maintenance_strategies() :: %{
        "CapacityRebalance" => fleet_spot_capacity_rebalance()
      }
      
  """
  @type fleet_spot_maintenance_strategies() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_datafeed_subscription() :: %{
        "Bucket" => String.t() | atom(),
        "Fault" => spot_instance_state_fault(),
        "OwnerId" => String.t() | atom(),
        "Prefix" => String.t() | atom(),
        "State" => list(any())
      }
      
  """
  @type spot_datafeed_subscription() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_to_s3_task() :: %{
        "ContainerFormat" => list(any()),
        "DiskImageFormat" => list(any()),
        "S3Bucket" => String.t() | atom(),
        "S3Key" => String.t() | atom()
      }
      
  """
  @type export_to_s3_task() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      snapshot_tier_status() :: %{
        "ArchivalCompleteTime" => non_neg_integer(),
        "LastTieringOperationStatus" => list(any()),
        "LastTieringOperationStatusDetail" => String.t() | atom(),
        "LastTieringProgress" => integer(),
        "LastTieringStartTime" => non_neg_integer(),
        "OwnerId" => String.t() | atom(),
        "RestoreExpiryTime" => non_neg_integer(),
        "SnapshotId" => String.t() | atom(),
        "Status" => list(any()),
        "StorageTier" => list(any()),
        "Tags" => list(tag()),
        "VolumeId" => String.t() | atom()
      }
      
  """
  @type snapshot_tier_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      dhcp_options() :: %{
        "DhcpConfigurations" => list(dhcp_configuration()),
        "DhcpOptionsId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type dhcp_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_policy_tables_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayPolicyTables" => list(transit_gateway_policy_table())
      }
      
  """
  @type describe_transit_gateway_policy_tables_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_route_table_association() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "State" => list(any()),
        "TransitGatewayAttachmentId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_route_table_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_datafeed_subscription_result() :: %{
        "SpotDatafeedSubscription" => spot_datafeed_subscription()
      }
      
  """
  @type describe_spot_datafeed_subscription_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accelerator_count_request() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type accelerator_count_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_fast_snapshot_restore_success_item() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "DisabledTime" => non_neg_integer(),
        "DisablingTime" => non_neg_integer(),
        "EnabledTime" => non_neg_integer(),
        "EnablingTime" => non_neg_integer(),
        "OptimizingTime" => non_neg_integer(),
        "OwnerAlias" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "State" => list(any()),
        "StateTransitionReason" => String.t() | atom()
      }
      
  """
  @type enable_fast_snapshot_restore_success_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      hibernation_options() :: %{
        "Configured" => boolean()
      }
      
  """
  @type hibernation_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_traffic_mirror_targets_result() :: %{
        "NextToken" => String.t() | atom(),
        "TrafficMirrorTargets" => list(traffic_mirror_target())
      }
      
  """
  @type describe_traffic_mirror_targets_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fast_launch_snapshot_configuration_response() :: %{
        "TargetResourceCount" => integer()
      }
      
  """
  @type fast_launch_snapshot_configuration_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      bundle_instance_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceId") => String.t() | atom(),
        required("Storage") => storage()
      }
      
  """
  @type bundle_instance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_transit_gateway_route_result() :: %{
        "Route" => transit_gateway_route()
      }
      
  """
  @type replace_transit_gateway_route_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      iam_instance_profile_association() :: %{
        "AssociationId" => String.t() | atom(),
        "IamInstanceProfile" => iam_instance_profile(),
        "InstanceId" => String.t() | atom(),
        "State" => list(any()),
        "Timestamp" => non_neg_integer()
      }
      
  """
  @type iam_instance_profile_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_snapshot_result() :: %{
        "Description" => String.t() | atom(),
        "ImportTaskId" => String.t() | atom(),
        "SnapshotTaskDetail" => snapshot_task_detail(),
        "Tags" => list(tag())
      }
      
  """
  @type import_snapshot_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_instance_metadata_defaults_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type get_instance_metadata_defaults_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      lock_snapshot_request() :: %{
        optional("CoolOffPeriod") => integer(),
        optional("DryRun") => boolean(),
        optional("ExpirationDate") => non_neg_integer(),
        optional("LockDuration") => integer(),
        required("LockMode") => list(any()),
        required("SnapshotId") => String.t() | atom()
      }
      
  """
  @type lock_snapshot_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_default_vpc_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type create_default_vpc_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_endpoint_connection_notifications_request() :: %{
        optional("DryRun") => boolean(),
        required("ConnectionNotificationIds") => list(String.t() | atom())
      }
      
  """
  @type delete_vpc_endpoint_connection_notifications_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      private_dns_name_options_request() :: %{
        "EnableResourceNameDnsAAAARecord" => boolean(),
        "EnableResourceNameDnsARecord" => boolean(),
        "HostnameType" => list(any())
      }
      
  """
  @type private_dns_name_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_requirements_with_metadata_request() :: %{
        "ArchitectureTypes" => list(list(any())()),
        "InstanceRequirements" => instance_requirements_request(),
        "VirtualizationTypes" => list(list(any())())
      }
      
  """
  @type instance_requirements_with_metadata_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_spot_capacity_rebalance_request() :: %{
        "ReplacementStrategy" => list(any()),
        "TerminationDelay" => integer()
      }
      
  """
  @type fleet_spot_capacity_rebalance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_credit_specification_request() :: %{
        "CpuCredits" => String.t() | atom(),
        "InstanceId" => String.t() | atom()
      }
      
  """
  @type instance_credit_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_route_server_request() :: %{
        optional("DryRun") => boolean(),
        required("RouteServerId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type associate_route_server_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      state_reason() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type state_reason() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_trust_provider_device_options() :: %{
        "PublicSigningKeyUrl" => String.t() | atom()
      }
      
  """
  @type modify_verified_access_trust_provider_device_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_verified_access_endpoint_result() :: %{
        "VerifiedAccessEndpoint" => verified_access_endpoint()
      }
      
  """
  @type create_verified_access_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_target_response() :: %{
        "CapacityReservationId" => String.t() | atom(),
        "CapacityReservationResourceGroupArn" => String.t() | atom()
      }
      
  """
  @type capacity_reservation_target_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_public_ip_dns_name_options_request() :: %{
        optional("DryRun") => boolean(),
        required("HostnameType") => list(any()),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type modify_public_ip_dns_name_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      tag_description() :: %{
        "Key" => String.t() | atom(),
        "ResourceId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "Value" => String.t() | atom()
      }
      
  """
  @type tag_description() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_service_payer_responsibility_result() :: %{
        "ReturnValue" => boolean()
      }
      
  """
  @type modify_vpc_endpoint_service_payer_responsibility_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      enable_ebs_encryption_by_default_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type enable_ebs_encryption_by_default_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_endpoint_association() :: %{
        "AssociatedResourceAccessibility" => String.t() | atom(),
        "AssociatedResourceArn" => String.t() | atom(),
        "DnsEntry" => dns_entry(),
        "FailureCode" => String.t() | atom(),
        "FailureReason" => String.t() | atom(),
        "Id" => String.t() | atom(),
        "PrivateDnsEntry" => dns_entry(),
        "ResourceConfigurationGroupArn" => String.t() | atom(),
        "ServiceNetworkArn" => String.t() | atom(),
        "ServiceNetworkName" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcEndpointId" => String.t() | atom()
      }
      
  """
  @type vpc_endpoint_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_default_credit_specification_result() :: %{
        "InstanceFamilyCreditSpecification" => instance_family_credit_specification()
      }
      
  """
  @type modify_default_credit_specification_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_policy_table_result() :: %{
        "TransitGatewayPolicyTable" => transit_gateway_policy_table()
      }
      
  """
  @type delete_transit_gateway_policy_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instances_block_device_mapping() :: %{
        "DeviceName" => String.t() | atom(),
        "Ebs" => scheduled_instances_ebs(),
        "NoDevice" => String.t() | atom(),
        "VirtualName" => String.t() | atom()
      }
      
  """
  @type scheduled_instances_block_device_mapping() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_capacity_reservation_billing_ownership_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type reject_capacity_reservation_billing_ownership_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      verified_access_instance_user_trust_provider_client_configuration() :: %{
        "AuthorizationEndpoint" => String.t() | atom(),
        "ClientId" => String.t() | atom(),
        "ClientSecret" => String.t() | atom(),
        "Issuer" => String.t() | atom(),
        "PkceEnabled" => boolean(),
        "PublicSigningKeyEndpoint" => String.t() | atom(),
        "Scopes" => String.t() | atom(),
        "TokenEndpoint" => String.t() | atom(),
        "Type" => list(any()),
        "UserInfoEndpoint" => String.t() | atom()
      }
      
  """
  @type verified_access_instance_user_trust_provider_client_configuration() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      confirm_product_instance_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceId") => String.t() | atom(),
        required("ProductCode") => String.t() | atom()
      }
      
  """
  @type confirm_product_instance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      resource_statement_request() :: %{
        "ResourceTypes" => list(String.t() | atom()),
        "Resources" => list(String.t() | atom())
      }
      
  """
  @type resource_statement_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ip_range() :: %{
        "CidrIp" => String.t() | atom(),
        "Description" => String.t() | atom()
      }
      
  """
  @type ip_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instances_monitoring() :: %{
        "Enabled" => boolean()
      }
      
  """
  @type scheduled_instances_monitoring() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_managed_prefix_list_version_result() :: %{
        "PrefixList" => managed_prefix_list()
      }
      
  """
  @type restore_managed_prefix_list_version_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_transit_gateway_vpc_attachment_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type reject_transit_gateway_vpc_attachment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_traffic_mirror_target_result() :: %{
        "TrafficMirrorTargetId" => String.t() | atom()
      }
      
  """
  @type delete_traffic_mirror_target_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_ebs_encryption_by_default_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type disable_ebs_encryption_by_default_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_subnet_cidr_block_result() :: %{
        "Ipv6CidrBlockAssociation" => subnet_ipv6_cidr_block_association(),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type associate_subnet_cidr_block_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_image_block_public_access_state_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type get_image_block_public_access_state_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      on_demand_options() :: %{
        "AllocationStrategy" => list(any()),
        "CapacityReservationOptions" => capacity_reservation_options(),
        "MaxTotalPrice" => String.t() | atom(),
        "MinTargetCapacity" => integer(),
        "SingleAvailabilityZone" => boolean(),
        "SingleInstanceType" => boolean()
      }
      
  """
  @type on_demand_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_resource_discovery_associations_result() :: %{
        "IpamResourceDiscoveryAssociations" => list(ipam_resource_discovery_association()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_ipam_resource_discovery_associations_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      network_interface_attachment() :: %{
        "AttachTime" => non_neg_integer(),
        "AttachmentId" => String.t() | atom(),
        "DeleteOnTermination" => boolean(),
        "DeviceIndex" => integer(),
        "EnaQueueCount" => integer(),
        "EnaSrdSpecification" => attachment_ena_srd_specification(),
        "InstanceId" => String.t() | atom(),
        "InstanceOwnerId" => String.t() | atom(),
        "NetworkCardIndex" => integer(),
        "Status" => list(any())
      }
      
  """
  @type network_interface_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reserved_instances_modification_result() :: %{
        "ReservedInstancesId" => String.t() | atom(),
        "TargetConfiguration" => reserved_instances_configuration()
      }
      
  """
  @type reserved_instances_modification_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_connect_request_bgp_options() :: %{
        "PeerAsn" => float()
      }
      
  """
  @type transit_gateway_connect_request_bgp_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpn_connection_result() :: %{
        "VpnConnection" => vpn_connection()
      }
      
  """
  @type modify_vpn_connection_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase1_integrity_algorithms_request_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type phase1_integrity_algorithms_request_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_disk_container() :: %{
        "Description" => String.t() | atom(),
        "DeviceName" => String.t() | atom(),
        "Format" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "Url" => String.t() | atom(),
        "UserBucket" => user_bucket()
      }
      
  """
  @type image_disk_container() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_client_vpn_endpoint_result() :: %{
        "ClientVpnEndpointId" => String.t() | atom(),
        "DnsName" => String.t() | atom(),
        "Status" => client_vpn_endpoint_status()
      }
      
  """
  @type create_client_vpn_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      coip_pool() :: %{
        "LocalGatewayRouteTableId" => String.t() | atom(),
        "PoolArn" => String.t() | atom(),
        "PoolCidrs" => list(String.t() | atom()),
        "PoolId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type coip_pool() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_state_change() :: %{
        "CurrentState" => instance_state(),
        "InstanceId" => String.t() | atom(),
        "PreviousState" => instance_state()
      }
      
  """
  @type instance_state_change() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      remove_prefix_list_entry() :: %{
        "Cidr" => String.t() | atom()
      }
      
  """
  @type remove_prefix_list_entry() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_fleets_result() :: %{
        "SuccessfulFleetDeletions" => list(delete_fleet_success_item()),
        "UnsuccessfulFleetDeletions" => list(delete_fleet_error_item())
      }
      
  """
  @type delete_fleets_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_fpga_image_attribute_result() :: %{
        "FpgaImageAttribute" => fpga_image_attribute()
      }
      
  """
  @type modify_fpga_image_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_event_window_time_range_request() :: %{
        "EndHour" => integer(),
        "EndWeekDay" => list(any()),
        "StartHour" => integer(),
        "StartWeekDay" => list(any())
      }
      
  """
  @type instance_event_window_time_range_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_capacity_rebalance() :: %{
        "ReplacementStrategy" => list(any()),
        "TerminationDelay" => integer()
      }
      
  """
  @type spot_capacity_rebalance() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpn_connection_route_request() :: %{
        required("DestinationCidrBlock") => String.t() | atom(),
        required("VpnConnectionId") => String.t() | atom()
      }
      
  """
  @type delete_vpn_connection_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_maintenance_options_result() :: %{
        "AutoRecovery" => list(any()),
        "InstanceId" => String.t() | atom(),
        "RebootMigration" => list(any())
      }
      
  """
  @type modify_instance_maintenance_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_iam_instance_profile_association_request() :: %{
        required("AssociationId") => String.t() | atom(),
        required("IamInstanceProfile") => iam_instance_profile_specification()
      }
      
  """
  @type replace_iam_instance_profile_association_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_classic_link_result() :: %{
        "Vpcs" => list(vpc_classic_link())
      }
      
  """
  @type describe_vpc_classic_link_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      target_capacity_specification() :: %{
        "DefaultTargetCapacityType" => list(any()),
        "OnDemandTargetCapacity" => integer(),
        "SpotTargetCapacity" => integer(),
        "TargetCapacityUnitType" => list(any()),
        "TotalTargetCapacity" => integer()
      }
      
  """
  @type target_capacity_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_family_credit_specification() :: %{
        "CpuCredits" => String.t() | atom(),
        "InstanceFamily" => list(any())
      }
      
  """
  @type instance_family_credit_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_table_association() :: %{
        "AssociationState" => route_table_association_state(),
        "GatewayId" => String.t() | atom(),
        "Main" => boolean(),
        "PublicIpv4Pool" => String.t() | atom(),
        "RouteTableAssociationId" => String.t() | atom(),
        "RouteTableId" => String.t() | atom(),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type route_table_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_fpga_image_result() :: %{
        "FpgaImageGlobalId" => String.t() | atom(),
        "FpgaImageId" => String.t() | atom()
      }
      
  """
  @type create_fpga_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_address_result() :: %{
        "AssociationId" => String.t() | atom()
      }
      
  """
  @type associate_address_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      copy_fpga_image_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Name") => String.t() | atom(),
        required("SourceFpgaImageId") => String.t() | atom(),
        required("SourceRegion") => String.t() | atom()
      }
      
  """
  @type copy_fpga_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_instance_event_window_request() :: %{
        optional("CronExpression") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Name") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("TimeRanges") => list(instance_event_window_time_range_request())
      }
      
  """
  @type create_instance_event_window_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cpu_options() :: %{
        "AmdSevSnp" => list(any()),
        "CoreCount" => integer(),
        "ThreadsPerCore" => integer()
      }
      
  """
  @type cpu_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_dhcp_options_request() :: %{
        optional("DryRun") => boolean(),
        required("DhcpOptionsId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type associate_dhcp_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateways_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateways_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_fast_launch_request() :: %{
        optional("DryRun") => boolean(),
        optional("Force") => boolean(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type disable_fast_launch_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_metadata_options_request() :: %{
        optional("DryRun") => boolean(),
        optional("HttpEndpoint") => list(any()),
        optional("HttpProtocolIpv6") => list(any()),
        optional("HttpPutResponseHopLimit") => integer(),
        optional("HttpTokens") => list(any()),
        optional("InstanceMetadataTags") => list(any()),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type modify_instance_metadata_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      analysis_acl_rule() :: %{
        "Cidr" => String.t() | atom(),
        "Egress" => boolean(),
        "PortRange" => port_range(),
        "Protocol" => String.t() | atom(),
        "RuleAction" => String.t() | atom(),
        "RuleNumber" => integer()
      }
      
  """
  @type analysis_acl_rule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_service_configuration_request() :: %{
        optional("AcceptanceRequired") => boolean(),
        optional("AddGatewayLoadBalancerArns") => list(String.t() | atom()),
        optional("AddNetworkLoadBalancerArns") => list(String.t() | atom()),
        optional("AddSupportedIpAddressTypes") => list(String.t() | atom()),
        optional("AddSupportedRegions") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("PrivateDnsName") => String.t() | atom(),
        optional("RemoveGatewayLoadBalancerArns") => list(String.t() | atom()),
        optional("RemoveNetworkLoadBalancerArns") => list(String.t() | atom()),
        optional("RemovePrivateDnsName") => boolean(),
        optional("RemoveSupportedIpAddressTypes") => list(String.t() | atom()),
        optional("RemoveSupportedRegions") => list(String.t() | atom()),
        required("ServiceId") => String.t() | atom()
      }
      
  """
  @type modify_vpc_endpoint_service_configuration_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      creation_date_condition_request() :: %{
        "MaximumDaysSinceCreated" => integer()
      }
      
  """
  @type creation_date_condition_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_pool_source_resource() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceOwner" => String.t() | atom(),
        "ResourceRegion" => String.t() | atom(),
        "ResourceType" => list(any())
      }
      
  """
  @type ipam_pool_source_resource() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_block_offering() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "CapacityBlockDurationHours" => integer(),
        "CapacityBlockDurationMinutes" => integer(),
        "CapacityBlockOfferingId" => String.t() | atom(),
        "CurrencyCode" => String.t() | atom(),
        "EndDate" => non_neg_integer(),
        "InstanceCount" => integer(),
        "InstanceType" => String.t() | atom(),
        "StartDate" => non_neg_integer(),
        "Tenancy" => list(any()),
        "UltraserverCount" => integer(),
        "UltraserverType" => String.t() | atom(),
        "UpfrontFee" => String.t() | atom()
      }
      
  """
  @type capacity_block_offering() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reserved_instances() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "CurrencyCode" => list(any()),
        "Duration" => float(),
        "End" => non_neg_integer(),
        "FixedPrice" => float(),
        "InstanceCount" => integer(),
        "InstanceTenancy" => list(any()),
        "InstanceType" => list(any()),
        "OfferingClass" => list(any()),
        "OfferingType" => list(any()),
        "ProductDescription" => list(any()),
        "RecurringCharges" => list(recurring_charge()),
        "ReservedInstancesId" => String.t() | atom(),
        "Scope" => list(any()),
        "Start" => non_neg_integer(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "UsagePrice" => float()
      }
      
  """
  @type reserved_instances() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_ipam_resource_discovery_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("IpamId") => String.t() | atom(),
        required("IpamResourceDiscoveryId") => String.t() | atom()
      }
      
  """
  @type associate_ipam_resource_discovery_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_endpoint_status() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type client_vpn_endpoint_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_ebs_block_device() :: %{
        "DeleteOnTermination" => boolean(),
        "Encrypted" => boolean(),
        "Iops" => integer(),
        "KmsKeyId" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "Throughput" => integer(),
        "VolumeInitializationRate" => integer(),
        "VolumeSize" => integer(),
        "VolumeType" => list(any())
      }
      
  """
  @type launch_template_ebs_block_device() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route() :: %{
        "CarrierGatewayId" => String.t() | atom(),
        "CoreNetworkArn" => String.t() | atom(),
        "DestinationCidrBlock" => String.t() | atom(),
        "DestinationIpv6CidrBlock" => String.t() | atom(),
        "DestinationPrefixListId" => String.t() | atom(),
        "EgressOnlyInternetGatewayId" => String.t() | atom(),
        "GatewayId" => String.t() | atom(),
        "InstanceId" => String.t() | atom(),
        "InstanceOwnerId" => String.t() | atom(),
        "IpAddress" => String.t() | atom(),
        "LocalGatewayId" => String.t() | atom(),
        "NatGatewayId" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "OdbNetworkArn" => String.t() | atom(),
        "Origin" => list(any()),
        "State" => list(any()),
        "TransitGatewayId" => String.t() | atom(),
        "VpcPeeringConnectionId" => String.t() | atom()
      }
      
  """
  @type route() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      mac_host() :: %{
        "HostId" => String.t() | atom(),
        "MacOSLatestSupportedVersions" => list(String.t() | atom())
      }
      
  """
  @type mac_host() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_volumes_modifications_result() :: %{
        "NextToken" => String.t() | atom(),
        "VolumesModifications" => list(volume_modification())
      }
      
  """
  @type describe_volumes_modifications_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      block_device_mapping_response() :: %{
        "DeviceName" => String.t() | atom(),
        "Ebs" => ebs_block_device_response(),
        "NoDevice" => String.t() | atom(),
        "VirtualName" => String.t() | atom()
      }
      
  """
  @type block_device_mapping_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_restore_image_task_request() :: %{
        optional("DryRun") => boolean(),
        optional("Name") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("Bucket") => String.t() | atom(),
        required("ObjectKey") => String.t() | atom()
      }
      
  """
  @type create_restore_image_task_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_instance_event_window_request() :: %{
        optional("DryRun") => boolean(),
        required("AssociationTarget") => instance_event_window_disassociation_request(),
        required("InstanceEventWindowId") => String.t() | atom()
      }
      
  """
  @type disassociate_instance_event_window_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_private_dns_name_options() :: %{
        "EnableResourceNameDnsAAAARecord" => boolean(),
        "EnableResourceNameDnsARecord" => boolean(),
        "HostnameType" => list(any())
      }
      
  """
  @type launch_template_private_dns_name_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ip_permission() :: %{
        "FromPort" => integer(),
        "IpProtocol" => String.t() | atom(),
        "IpRanges" => list(ip_range()),
        "Ipv6Ranges" => list(ipv6_range()),
        "PrefixListIds" => list(prefix_list_id()),
        "ToPort" => integer(),
        "UserIdGroupPairs" => list(user_id_group_pair())
      }
      
  """
  @type ip_permission() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_classic_link_instances_result() :: %{
        "Instances" => list(classic_link_instance()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_classic_link_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_placement_request() :: %{
        "Affinity" => String.t() | atom(),
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "HostId" => String.t() | atom(),
        "HostResourceGroupArn" => String.t() | atom(),
        "PartitionNumber" => integer(),
        "SpreadDomain" => String.t() | atom(),
        "Tenancy" => list(any())
      }
      
  """
  @type launch_template_placement_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      resource_type_option() :: %{
        "OptionName" => list(any()),
        "OptionValues" => list(String.t() | atom())
      }
      
  """
  @type resource_type_option() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_insights_access_scopes_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NetworkInsightsAccessScopeIds") => list(String.t() | atom()),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_network_insights_access_scopes_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_connect_response_options() :: %{
        "Enabled" => boolean(),
        "LambdaFunctionArn" => String.t() | atom(),
        "Status" => client_vpn_endpoint_attribute_status()
      }
      
  """
  @type client_connect_response_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_resource_discoveries_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IpamResourceDiscoveryIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_ipam_resource_discoveries_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_group_result() :: %{
        "VerifiedAccessGroup" => verified_access_group()
      }
      
  """
  @type create_verified_access_group_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fast_snapshot_restore_success_item() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "DisabledTime" => non_neg_integer(),
        "DisablingTime" => non_neg_integer(),
        "EnabledTime" => non_neg_integer(),
        "EnablingTime" => non_neg_integer(),
        "OptimizingTime" => non_neg_integer(),
        "OwnerAlias" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "State" => list(any()),
        "StateTransitionReason" => String.t() | atom()
      }
      
  """
  @type describe_fast_snapshot_restore_success_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_spot_fleet_request_response() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_spot_fleet_request_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      maintenance_details() :: %{
        "LastMaintenanceApplied" => non_neg_integer(),
        "MaintenanceAutoAppliedAfter" => non_neg_integer(),
        "PendingMaintenance" => String.t() | atom()
      }
      
  """
  @type maintenance_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attach_volume_request() :: %{
        optional("DryRun") => boolean(),
        required("Device") => String.t() | atom(),
        required("InstanceId") => String.t() | atom(),
        required("VolumeId") => String.t() | atom()
      }
      
  """
  @type attach_volume_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_egress_only_internet_gateway_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type create_egress_only_internet_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_transit_gateway_multicast_domain_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("SubnetIds") => list(String.t() | atom()),
        optional("TransitGatewayAttachmentId") => String.t() | atom(),
        optional("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type accept_transit_gateway_multicast_domain_associations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_spot_fleet_requests_response() :: %{
        "NextToken" => String.t() | atom(),
        "SpotFleetRequestConfigs" => list(spot_fleet_request_config())
      }
      
  """
  @type describe_spot_fleet_requests_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_acl_association() :: %{
        "NetworkAclAssociationId" => String.t() | atom(),
        "NetworkAclId" => String.t() | atom(),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type network_acl_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      register_image_result() :: %{
        "ImageId" => String.t() | atom()
      }
      
  """
  @type register_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_traffic_mirror_sessions_result() :: %{
        "NextToken" => String.t() | atom(),
        "TrafficMirrorSessions" => list(traffic_mirror_session())
      }
      
  """
  @type describe_traffic_mirror_sessions_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      media_accelerator_info() :: %{
        "Accelerators" => list(media_device_info()),
        "TotalMediaMemoryInMiB" => integer()
      }
      
  """
  @type media_accelerator_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_instance_metadata_options() :: %{
        "HttpEndpoint" => list(any()),
        "HttpProtocolIpv6" => list(any()),
        "HttpPutResponseHopLimit" => integer(),
        "HttpTokens" => list(any()),
        "InstanceMetadataTags" => list(any()),
        "State" => list(any())
      }
      
  """
  @type launch_template_instance_metadata_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_route_table_result() :: %{
        "TransitGatewayRouteTable" => transit_gateway_route_table()
      }
      
  """
  @type create_transit_gateway_route_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      baseline_performance_factors() :: %{
        "Cpu" => cpu_performance_factor()
      }
      
  """
  @type baseline_performance_factors() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_metadata_defaults_request() :: %{
        optional("DryRun") => boolean(),
        optional("HttpEndpoint") => list(any()),
        optional("HttpPutResponseHopLimit") => integer(),
        optional("HttpTokens") => list(any()),
        optional("InstanceMetadataTags") => list(any())
      }
      
  """
  @type modify_instance_metadata_defaults_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_network_acl_entry_request() :: %{
        optional("CidrBlock") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("IcmpTypeCode") => icmp_type_code(),
        optional("Ipv6CidrBlock") => String.t() | atom(),
        optional("PortRange") => port_range(),
        required("Egress") => boolean(),
        required("NetworkAclId") => String.t() | atom(),
        required("Protocol") => String.t() | atom(),
        required("RuleAction") => list(any()),
        required("RuleNumber") => integer()
      }
      
  """
  @type replace_network_acl_entry_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_private_ip_address() :: %{
        "Association" => instance_network_interface_association(),
        "Primary" => boolean(),
        "PrivateDnsName" => String.t() | atom(),
        "PrivateIpAddress" => String.t() | atom()
      }
      
  """
  @type instance_private_ip_address() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      egress_only_internet_gateway() :: %{
        "Attachments" => list(internet_gateway_attachment()),
        "EgressOnlyInternetGatewayId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type egress_only_internet_gateway() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_host_reservations_result() :: %{
        "HostReservationSet" => list(host_reservation()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_host_reservations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_cpu_options_result() :: %{
        "CoreCount" => integer(),
        "InstanceId" => String.t() | atom(),
        "ThreadsPerCore" => integer()
      }
      
  """
  @type modify_instance_cpu_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      rule_group_rule_options_pair() :: %{
        "RuleGroupArn" => String.t() | atom(),
        "RuleOptions" => list(rule_option())
      }
      
  """
  @type rule_group_rule_options_pair() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_virtual_interface_groups_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("LocalGatewayVirtualInterfaceGroupIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_virtual_interface_groups_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      accept_transit_gateway_vpc_attachment_result() :: %{
        "TransitGatewayVpcAttachment" => transit_gateway_vpc_attachment()
      }
      
  """
  @type accept_transit_gateway_vpc_attachment_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpn_connection_result() :: %{
        "VpnConnection" => vpn_connection()
      }
      
  """
  @type create_vpn_connection_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_addresses_attribute_result() :: %{
        "Addresses" => list(address_attribute()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_addresses_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_instance_logging_configuration_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("AccessLogs") => verified_access_log_options(),
        required("VerifiedAccessInstanceId") => String.t() | atom()
      }
      
  """
  @type modify_verified_access_instance_logging_configuration_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      last_error() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type last_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_transit_gateway_route_table_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type associate_transit_gateway_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_ipam_scope_result() :: %{
        "IpamScope" => ipam_scope()
      }
      
  """
  @type delete_ipam_scope_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_transit_gateway_routes_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        required("S3Bucket") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type export_transit_gateway_routes_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      resource_statement() :: %{
        "ResourceTypes" => list(String.t() | atom()),
        "Resources" => list(String.t() | atom())
      }
      
  """
  @type resource_statement() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instances_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("InstanceIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      performance_factor_reference_request() :: %{
        "InstanceFamily" => String.t() | atom()
      }
      
  """
  @type performance_factor_reference_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_public_ipv4_pool_request() :: %{
        optional("DryRun") => boolean(),
        optional("NetworkBorderGroup") => String.t() | atom(),
        required("PoolId") => String.t() | atom()
      }
      
  """
  @type delete_public_ipv4_pool_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_peering_connection_request() :: %{
        optional("DryRun") => boolean(),
        required("VpcPeeringConnectionId") => String.t() | atom()
      }
      
  """
  @type delete_vpc_peering_connection_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      packet_header_statement() :: %{
        "DestinationAddresses" => list(String.t() | atom()),
        "DestinationPorts" => list(String.t() | atom()),
        "DestinationPrefixLists" => list(String.t() | atom()),
        "Protocols" => list(list(any())()),
        "SourceAddresses" => list(String.t() | atom()),
        "SourcePorts" => list(String.t() | atom()),
        "SourcePrefixLists" => list(String.t() | atom())
      }
      
  """
  @type packet_header_statement() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_availability_zone_group_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_availability_zone_group_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_policy_table_entry() :: %{
        "PolicyRule" => transit_gateway_policy_rule(),
        "PolicyRuleNumber" => String.t() | atom(),
        "TargetRouteTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_policy_table_entry() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      local_gateway() :: %{
        "LocalGatewayId" => String.t() | atom(),
        "OutpostArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "State" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type local_gateway() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpn_gateways_result() :: %{
        "VpnGateways" => list(vpn_gateway())
      }
      
  """
  @type describe_vpn_gateways_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      traffic_mirror_port_range_request() :: %{
        "FromPort" => integer(),
        "ToPort" => integer()
      }
      
  """
  @type traffic_mirror_port_range_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_insights_access_scope() :: %{
        "CreatedDate" => non_neg_integer(),
        "NetworkInsightsAccessScopeArn" => String.t() | atom(),
        "NetworkInsightsAccessScopeId" => String.t() | atom(),
        "Tags" => list(tag()),
        "UpdatedDate" => non_neg_integer()
      }
      
  """
  @type network_insights_access_scope() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_nat_gateway_result() :: %{
        "NatGatewayId" => String.t() | atom()
      }
      
  """
  @type delete_nat_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      validation_error() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type validation_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_client_vpn_routes_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type describe_client_vpn_routes_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      operator_request() :: %{
        "Principal" => String.t() | atom()
      }
      
  """
  @type operator_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_traffic_mirror_filter_rule_result() :: %{
        "TrafficMirrorFilterRuleId" => String.t() | atom()
      }
      
  """
  @type delete_traffic_mirror_filter_rule_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_capacity_reservation_request() :: %{
        optional("Accept") => boolean(),
        optional("AdditionalInfo") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EndDate") => non_neg_integer(),
        optional("EndDateType") => list(any()),
        optional("InstanceCount") => integer(),
        optional("InstanceMatchCriteria") => list(any()),
        required("CapacityReservationId") => String.t() | atom()
      }
      
  """
  @type modify_capacity_reservation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_version() :: %{
        "CreateTime" => non_neg_integer(),
        "CreatedBy" => String.t() | atom(),
        "DefaultVersion" => boolean(),
        "LaunchTemplateData" => response_launch_template_data(),
        "LaunchTemplateId" => String.t() | atom(),
        "LaunchTemplateName" => String.t() | atom(),
        "Operator" => operator_response(),
        "VersionDescription" => String.t() | atom(),
        "VersionNumber" => float()
      }
      
  """
  @type launch_template_version() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_image_block_public_access_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type disable_image_block_public_access_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_route_table_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("TransitGatewayId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      media_device_info() :: %{
        "Count" => integer(),
        "Manufacturer" => String.t() | atom(),
        "MemoryInfo" => media_device_memory_info(),
        "Name" => String.t() | atom()
      }
      
  """
  @type media_device_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_attribute_request() :: %{
        optional("EnableDnsHostnames") => attribute_boolean_value(),
        optional("EnableDnsSupport") => attribute_boolean_value(),
        optional("EnableNetworkAddressUsageMetrics") => attribute_boolean_value(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type modify_vpc_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_connect_endpoint_dns_names() :: %{
        "DnsName" => String.t() | atom(),
        "FipsDnsName" => String.t() | atom()
      }
      
  """
  @type instance_connect_endpoint_dns_names() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_insights_path() :: %{
        "CreatedDate" => non_neg_integer(),
        "Destination" => String.t() | atom(),
        "DestinationArn" => String.t() | atom(),
        "DestinationIp" => String.t() | atom(),
        "DestinationPort" => integer(),
        "FilterAtDestination" => path_filter(),
        "FilterAtSource" => path_filter(),
        "NetworkInsightsPathArn" => String.t() | atom(),
        "NetworkInsightsPathId" => String.t() | atom(),
        "Protocol" => list(any()),
        "Source" => String.t() | atom(),
        "SourceArn" => String.t() | atom(),
        "SourceIp" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type network_insights_path() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_iam_instance_profile_association_result() :: %{
        "IamInstanceProfileAssociation" => iam_instance_profile_association()
      }
      
  """
  @type replace_iam_instance_profile_association_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_route() :: %{
        "DestinationCidrBlock" => String.t() | atom(),
        "PrefixListId" => String.t() | atom(),
        "State" => list(any()),
        "TransitGatewayAttachments" => list(transit_gateway_route_attachment()),
        "TransitGatewayRouteTableAnnouncementId" => String.t() | atom(),
        "Type" => list(any())
      }
      
  """
  @type transit_gateway_route() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_route_table_request() :: %{
        optional("DryRun") => boolean(),
        required("LocalGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type delete_local_gateway_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_endpoints_result() :: %{
        "NextToken" => String.t() | atom(),
        "VerifiedAccessEndpoints" => list(verified_access_endpoint())
      }
      
  """
  @type describe_verified_access_endpoints_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_addresses_result() :: %{
        "Addresses" => list(address())
      }
      
  """
  @type describe_addresses_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      locked_snapshots_info() :: %{
        "CoolOffPeriod" => integer(),
        "CoolOffPeriodExpiresOn" => non_neg_integer(),
        "LockCreatedOn" => non_neg_integer(),
        "LockDuration" => integer(),
        "LockDurationStartTime" => non_neg_integer(),
        "LockExpiresOn" => non_neg_integer(),
        "LockState" => list(any()),
        "OwnerId" => String.t() | atom(),
        "SnapshotId" => String.t() | atom()
      }
      
  """
  @type locked_snapshots_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_result() :: %{
        "Ipam" => ipam()
      }
      
  """
  @type modify_ipam_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_console_output_result() :: %{
        "InstanceId" => String.t() | atom(),
        "Output" => String.t() | atom(),
        "Timestamp" => non_neg_integer()
      }
      
  """
  @type get_console_output_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_multicast_domains_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayMulticastDomainIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateway_multicast_domains_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_client_vpn_client_configuration_result() :: %{
        "ClientConfiguration" => String.t() | atom()
      }
      
  """
  @type export_client_vpn_client_configuration_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_route_table_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      connection_tracking_specification() :: %{
        "TcpEstablishedTimeout" => integer(),
        "UdpStreamTimeout" => integer(),
        "UdpTimeout" => integer()
      }
      
  """
  @type connection_tracking_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_enclave_options() :: %{
        "Enabled" => boolean()
      }
      
  """
  @type launch_template_enclave_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_capacity_reservation_fleet_error() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type cancel_capacity_reservation_fleet_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ebs_default_kms_key_id_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type get_ebs_default_kms_key_id_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_trunk_interface_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("AssociationId") => String.t() | atom()
      }
      
  """
  @type disassociate_trunk_interface_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_nat_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("NatGatewayId") => String.t() | atom()
      }
      
  """
  @type delete_nat_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_transit_gateway_route_table_result() :: %{
        "Association" => transit_gateway_association()
      }
      
  """
  @type associate_transit_gateway_route_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_export_details() :: %{
        "InstanceId" => String.t() | atom(),
        "TargetEnvironment" => list(any())
      }
      
  """
  @type instance_export_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reservation() :: %{
        "Groups" => list(group_identifier()),
        "Instances" => list(instance()),
        "OwnerId" => String.t() | atom(),
        "RequesterId" => String.t() | atom(),
        "ReservationId" => String.t() | atom()
      }
      
  """
  @type reservation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_endpoint() :: %{
        "CreationTimestamp" => non_neg_integer(),
        "DnsEntries" => list(dns_entry()),
        "DnsOptions" => dns_options(),
        "FailureReason" => String.t() | atom(),
        "Groups" => list(security_group_identifier()),
        "IpAddressType" => list(any()),
        "Ipv4Prefixes" => list(subnet_ip_prefixes()),
        "Ipv6Prefixes" => list(subnet_ip_prefixes()),
        "LastError" => last_error(),
        "NetworkInterfaceIds" => list(String.t() | atom()),
        "OwnerId" => String.t() | atom(),
        "PolicyDocument" => String.t() | atom(),
        "PrivateDnsEnabled" => boolean(),
        "RequesterManaged" => boolean(),
        "ResourceConfigurationArn" => String.t() | atom(),
        "RouteTableIds" => list(String.t() | atom()),
        "ServiceName" => String.t() | atom(),
        "ServiceNetworkArn" => String.t() | atom(),
        "ServiceRegion" => String.t() | atom(),
        "State" => list(any()),
        "SubnetIds" => list(String.t() | atom()),
        "Tags" => list(tag()),
        "VpcEndpointId" => String.t() | atom(),
        "VpcEndpointType" => list(any()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type vpc_endpoint() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deprovision_ipam_byoasn_result() :: %{
        "Byoasn" => byoasn()
      }
      
  """
  @type deprovision_ipam_byoasn_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_options() :: %{
        "AllocationStrategy" => list(any()),
        "InstanceInterruptionBehavior" => list(any()),
        "InstancePoolsToUseCount" => integer(),
        "MaintenanceStrategies" => fleet_spot_maintenance_strategies(),
        "MaxTotalPrice" => String.t() | atom(),
        "MinTargetCapacity" => integer(),
        "SingleAvailabilityZone" => boolean(),
        "SingleInstanceType" => boolean()
      }
      
  """
  @type spot_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_event_window_time_range() :: %{
        "EndHour" => integer(),
        "EndWeekDay" => list(any()),
        "StartHour" => integer(),
        "StartWeekDay" => list(any())
      }
      
  """
  @type instance_event_window_time_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      response_launch_template_data() :: %{
        "LicenseSpecifications" => list(launch_template_license_configuration()),
        "ElasticGpuSpecifications" => list(elastic_gpu_specification_response()),
        "InstanceInitiatedShutdownBehavior" => list(any()),
        "DisableApiStop" => boolean(),
        "RamDiskId" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "BlockDeviceMappings" => list(launch_template_block_device_mapping()),
        "NetworkInterfaces" => list(launch_template_instance_network_interface_specification()),
        "Monitoring" => launch_templates_monitoring(),
        "NetworkPerformanceOptions" => launch_template_network_performance_options(),
        "PrivateDnsNameOptions" => launch_template_private_dns_name_options(),
        "InstanceRequirements" => instance_requirements(),
        "CreditSpecification" => credit_specification(),
        "CapacityReservationSpecification" => launch_template_capacity_reservation_specification_response(),
        "SecurityGroupIds" => list(String.t() | atom()),
        "InstanceType" => list(any()),
        "KernelId" => String.t() | atom(),
        "Placement" => launch_template_placement(),
        "ElasticInferenceAccelerators" => list(launch_template_elastic_inference_accelerator_response()),
        "DisableApiTermination" => boolean(),
        "EnclaveOptions" => launch_template_enclave_options(),
        "CpuOptions" => launch_template_cpu_options(),
        "IamInstanceProfile" => launch_template_iam_instance_profile_specification(),
        "HibernationOptions" => launch_template_hibernation_options(),
        "InstanceMarketOptions" => launch_template_instance_market_options(),
        "TagSpecifications" => list(launch_template_tag_specification()),
        "MetadataOptions" => launch_template_instance_metadata_options(),
        "UserData" => String.t() | atom(),
        "EbsOptimized" => boolean(),
        "KeyName" => String.t() | atom(),
        "Operator" => operator_response(),
        "SecurityGroups" => list(String.t() | atom()),
        "MaintenanceOptions" => launch_template_instance_maintenance_options()
      }
      
  """
  @type response_launch_template_data() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_service_configurations_result() :: %{
        "NextToken" => String.t() | atom(),
        "ServiceConfigurations" => list(service_configuration())
      }
      
  """
  @type describe_vpc_endpoint_service_configurations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_snapshot_block_public_access_state_result() :: %{
        "ManagedBy" => list(any()),
        "State" => list(any())
      }
      
  """
  @type get_snapshot_block_public_access_state_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_aws_network_performance_metric_subscription_request() :: %{
        optional("Destination") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Metric") => list(any()),
        optional("Source") => String.t() | atom(),
        optional("Statistic") => list(any())
      }
      
  """
  @type enable_aws_network_performance_metric_subscription_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      reject_vpc_endpoint_connections_request() :: %{
        optional("DryRun") => boolean(),
        required("ServiceId") => String.t() | atom(),
        required("VpcEndpointIds") => list(String.t() | atom())
      }
      
  """
  @type reject_vpc_endpoint_connections_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_volume_task_details() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "BytesConverted" => float(),
        "Description" => String.t() | atom(),
        "Image" => disk_image_description(),
        "Volume" => disk_image_volume_description()
      }
      
  """
  @type import_volume_task_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      flow_log() :: %{
        "CreationTime" => non_neg_integer(),
        "DeliverCrossAccountRole" => String.t() | atom(),
        "DeliverLogsErrorMessage" => String.t() | atom(),
        "DeliverLogsPermissionArn" => String.t() | atom(),
        "DeliverLogsStatus" => String.t() | atom(),
        "DestinationOptions" => destination_options_response(),
        "FlowLogId" => String.t() | atom(),
        "FlowLogStatus" => String.t() | atom(),
        "LogDestination" => String.t() | atom(),
        "LogDestinationType" => list(any()),
        "LogFormat" => String.t() | atom(),
        "LogGroupName" => String.t() | atom(),
        "MaxAggregationInterval" => integer(),
        "ResourceId" => String.t() | atom(),
        "Tags" => list(tag()),
        "TrafficType" => list(any())
      }
      
  """
  @type flow_log() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_vpc_attachments_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayAttachmentIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateway_vpc_attachments_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_instances_result() :: %{
        "NextToken" => String.t() | atom(),
        "VerifiedAccessInstances" => list(verified_access_instance())
      }
      
  """
  @type describe_verified_access_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_interface_private_ip_address() :: %{
        "Association" => network_interface_association(),
        "Primary" => boolean(),
        "PrivateDnsName" => String.t() | atom(),
        "PrivateIpAddress" => String.t() | atom()
      }
      
  """
  @type network_interface_private_ip_address() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_snapshots_result() :: %{
        "NextToken" => String.t() | atom(),
        "Snapshots" => list(snapshot())
      }
      
  """
  @type describe_snapshots_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_event_window_association_target() :: %{
        "DedicatedHostIds" => list(String.t() | atom()),
        "InstanceIds" => list(String.t() | atom()),
        "Tags" => list(tag())
      }
      
  """
  @type instance_event_window_association_target() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_instance_launch_specification() :: %{
        "AdditionalInfo" => String.t() | atom(),
        "Architecture" => list(any()),
        "GroupIds" => list(String.t() | atom()),
        "GroupNames" => list(String.t() | atom()),
        "InstanceInitiatedShutdownBehavior" => list(any()),
        "InstanceType" => list(any()),
        "Monitoring" => boolean(),
        "Placement" => placement(),
        "PrivateIpAddress" => String.t() | atom(),
        "SubnetId" => String.t() | atom(),
        "UserData" => user_data()
      }
      
  """
  @type import_instance_launch_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_ipam_organization_admin_account_result() :: %{
        "Success" => boolean()
      }
      
  """
  @type disable_ipam_organization_admin_account_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_block_public_access_exclusion() :: %{
        "CreationTimestamp" => non_neg_integer(),
        "DeletionTimestamp" => non_neg_integer(),
        "ExclusionId" => String.t() | atom(),
        "InternetGatewayExclusionMode" => list(any()),
        "LastUpdateTimestamp" => non_neg_integer(),
        "Reason" => String.t() | atom(),
        "ResourceArn" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type vpc_block_public_access_exclusion() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_config() :: %{
        "LaunchTemplateSpecification" => fleet_launch_template_specification(),
        "Overrides" => list(launch_template_overrides())
      }
      
  """
  @type launch_template_config() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_block_extension_offering() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "CapacityBlockExtensionDurationHours" => integer(),
        "CapacityBlockExtensionEndDate" => non_neg_integer(),
        "CapacityBlockExtensionOfferingId" => String.t() | atom(),
        "CapacityBlockExtensionStartDate" => non_neg_integer(),
        "CurrencyCode" => String.t() | atom(),
        "InstanceCount" => integer(),
        "InstanceType" => String.t() | atom(),
        "StartDate" => non_neg_integer(),
        "Tenancy" => list(any()),
        "UpfrontFee" => String.t() | atom()
      }
      
  """
  @type capacity_block_extension_offering() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reserved_instances_offering() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "CurrencyCode" => list(any()),
        "Duration" => float(),
        "FixedPrice" => float(),
        "InstanceTenancy" => list(any()),
        "InstanceType" => list(any()),
        "Marketplace" => boolean(),
        "OfferingClass" => list(any()),
        "OfferingType" => list(any()),
        "PricingDetails" => list(pricing_detail()),
        "ProductDescription" => list(any()),
        "RecurringCharges" => list(recurring_charge()),
        "ReservedInstancesOfferingId" => String.t() | atom(),
        "Scope" => list(any()),
        "UsagePrice" => float()
      }
      
  """
  @type reserved_instances_offering() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      provision_ipam_byoasn_result() :: %{
        "Byoasn" => byoasn()
      }
      
  """
  @type provision_ipam_byoasn_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_route_table_request() :: %{
        optional("DryRun") => boolean(),
        optional("Mode") => list(any()),
        optional("TagSpecifications") => list(tag_specification()),
        required("LocalGatewayId") => String.t() | atom()
      }
      
  """
  @type create_local_gateway_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      traffic_mirror_port_range() :: %{
        "FromPort" => integer(),
        "ToPort" => integer()
      }
      
  """
  @type traffic_mirror_port_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      security_group() :: %{
        "Description" => String.t() | atom(),
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "IpPermissions" => list(ip_permission()),
        "IpPermissionsEgress" => list(ip_permission()),
        "OwnerId" => String.t() | atom(),
        "SecurityGroupArn" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type security_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attribute_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type attribute_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instances_launch_specification() :: %{
        "BlockDeviceMappings" => list(scheduled_instances_block_device_mapping()),
        "EbsOptimized" => boolean(),
        "IamInstanceProfile" => scheduled_instances_iam_instance_profile(),
        "ImageId" => String.t() | atom(),
        "InstanceType" => String.t() | atom(),
        "KernelId" => String.t() | atom(),
        "KeyName" => String.t() | atom(),
        "Monitoring" => scheduled_instances_monitoring(),
        "NetworkInterfaces" => list(scheduled_instances_network_interface()),
        "Placement" => scheduled_instances_placement(),
        "RamdiskId" => String.t() | atom(),
        "SecurityGroupIds" => list(String.t() | atom()),
        "SubnetId" => String.t() | atom(),
        "UserData" => String.t() | atom()
      }
      
  """
  @type scheduled_instances_launch_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_instance_logging_configuration() :: %{
        "AccessLogs" => verified_access_logs(),
        "VerifiedAccessInstanceId" => String.t() | atom()
      }
      
  """
  @type verified_access_instance_logging_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      gpu_device_info() :: %{
        "Count" => integer(),
        "Manufacturer" => String.t() | atom(),
        "MemoryInfo" => gpu_device_memory_info(),
        "Name" => String.t() | atom()
      }
      
  """
  @type gpu_device_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_internet_gateways_result() :: %{
        "InternetGateways" => list(internet_gateway()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_internet_gateways_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_security_group_rules_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_security_group_rules_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reset_network_interface_attribute_request() :: %{
        optional("DryRun") => boolean(),
        optional("SourceDestCheck") => String.t() | atom(),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type reset_network_interface_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_allowed_images_settings_request() :: %{
        optional("DryRun") => boolean(),
        required("AllowedImagesSettingsState") => list(any())
      }
      
  """
  @type enable_allowed_images_settings_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      analysis_component() :: %{
        "Arn" => String.t() | atom(),
        "Id" => String.t() | atom(),
        "Name" => String.t() | atom()
      }
      
  """
  @type analysis_component() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      analysis_load_balancer_target() :: %{
        "Address" => String.t() | atom(),
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "Instance" => analysis_component(),
        "Port" => integer()
      }
      
  """
  @type analysis_load_balancer_target() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_transit_gateway_vpc_attachment_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type accept_transit_gateway_vpc_attachment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipv6_cidr_block() :: %{
        "Ipv6CidrBlock" => String.t() | atom()
      }
      
  """
  @type ipv6_cidr_block() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      local_gateway_virtual_interface() :: %{
        "ConfigurationState" => list(any()),
        "LocalAddress" => String.t() | atom(),
        "LocalBgpAsn" => integer(),
        "LocalGatewayId" => String.t() | atom(),
        "LocalGatewayVirtualInterfaceArn" => String.t() | atom(),
        "LocalGatewayVirtualInterfaceGroupId" => String.t() | atom(),
        "LocalGatewayVirtualInterfaceId" => String.t() | atom(),
        "OutpostLagId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "PeerAddress" => String.t() | atom(),
        "PeerBgpAsn" => integer(),
        "PeerBgpAsnExtended" => float(),
        "Tags" => list(tag()),
        "Vlan" => integer()
      }
      
  """
  @type local_gateway_virtual_interface() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_byoip_cidrs_result() :: %{
        "ByoipCidrs" => list(byoip_cidr()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_byoip_cidrs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_traffic_mirror_session_result() :: %{
        "TrafficMirrorSession" => traffic_mirror_session()
      }
      
  """
  @type modify_traffic_mirror_session_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_status_summary() :: %{
        "Details" => list(instance_status_details()),
        "Status" => list(any())
      }
      
  """
  @type instance_status_summary() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      copy_fpga_image_result() :: %{
        "FpgaImageId" => String.t() | atom()
      }
      
  """
  @type copy_fpga_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase2_encryption_algorithms_request_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type phase2_encryption_algorithms_request_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fast_snapshot_restores_result() :: %{
        "FastSnapshotRestores" => list(describe_fast_snapshot_restore_success_item()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_fast_snapshot_restores_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_route_table_vpc_association_request() :: %{
        optional("DryRun") => boolean(),
        required("LocalGatewayRouteTableVpcAssociationId") => String.t() | atom()
      }
      
  """
  @type delete_local_gateway_route_table_vpc_association_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      ebs_block_device() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "DeleteOnTermination" => boolean(),
        "Encrypted" => boolean(),
        "Iops" => integer(),
        "KmsKeyId" => String.t() | atom(),
        "OutpostArn" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "Throughput" => integer(),
        "VolumeInitializationRate" => integer(),
        "VolumeSize" => integer(),
        "VolumeType" => list(any())
      }
      
  """
  @type ebs_block_device() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_specification() :: %{
        "CapacityReservationPreference" => list(any()),
        "CapacityReservationTarget" => capacity_reservation_target()
      }
      
  """
  @type capacity_reservation_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      path_statement_request() :: %{
        "PacketHeaderStatement" => packet_header_statement_request(),
        "ResourceStatement" => resource_statement_request()
      }
      
  """
  @type path_statement_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_capacity_reservation_specification_request() :: %{
        "CapacityReservationPreference" => list(any()),
        "CapacityReservationTarget" => capacity_reservation_target()
      }
      
  """
  @type launch_template_capacity_reservation_specification_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      list_snapshots_in_recycle_bin_result() :: %{
        "NextToken" => String.t() | atom(),
        "Snapshots" => list(snapshot_recycle_bin_info())
      }
      
  """
  @type list_snapshots_in_recycle_bin_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_volume_status_result() :: %{
        "NextToken" => String.t() | atom(),
        "VolumeStatuses" => list(volume_status_item())
      }
      
  """
  @type describe_volume_status_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instance() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "CreateDate" => non_neg_integer(),
        "HourlyPrice" => String.t() | atom(),
        "InstanceCount" => integer(),
        "InstanceType" => String.t() | atom(),
        "NetworkPlatform" => String.t() | atom(),
        "NextSlotStartTime" => non_neg_integer(),
        "Platform" => String.t() | atom(),
        "PreviousSlotEndTime" => non_neg_integer(),
        "Recurrence" => scheduled_instance_recurrence(),
        "ScheduledInstanceId" => String.t() | atom(),
        "SlotDurationInHours" => integer(),
        "TermEndDate" => non_neg_integer(),
        "TermStartDate" => non_neg_integer(),
        "TotalScheduledInstanceHours" => integer()
      }
      
  """
  @type scheduled_instance() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_route_server_request() :: %{
        optional("DryRun") => boolean(),
        required("RouteServerId") => String.t() | atom()
      }
      
  """
  @type delete_route_server_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_stale_security_groups_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type describe_stale_security_groups_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_trunk_interface_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("GreKey") => integer(),
        optional("VlanId") => integer(),
        required("BranchInterfaceId") => String.t() | atom(),
        required("TrunkInterfaceId") => String.t() | atom()
      }
      
  """
  @type associate_trunk_interface_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      nat_gateway() :: %{
        "ConnectivityType" => list(any()),
        "CreateTime" => non_neg_integer(),
        "DeleteTime" => non_neg_integer(),
        "FailureCode" => String.t() | atom(),
        "FailureMessage" => String.t() | atom(),
        "NatGatewayAddresses" => list(nat_gateway_address()),
        "NatGatewayId" => String.t() | atom(),
        "ProvisionedBandwidth" => provisioned_bandwidth(),
        "State" => list(any()),
        "SubnetId" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type nat_gateway() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_image_launch_permission_request() :: %{
        optional("DryRun") => boolean(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type cancel_image_launch_permission_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_verified_access_endpoint_targets_result() :: %{
        "NextToken" => String.t() | atom(),
        "VerifiedAccessEndpointTargets" => list(verified_access_endpoint_target())
      }
      
  """
  @type get_verified_access_endpoint_targets_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_private_dns_name_options_request() :: %{
        "EnableResourceNameDnsAAAARecord" => boolean(),
        "EnableResourceNameDnsARecord" => boolean(),
        "HostnameType" => list(any())
      }
      
  """
  @type launch_template_private_dns_name_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unsuccessful_item() :: %{
        "Error" => unsuccessful_item_error(),
        "ResourceId" => String.t() | atom()
      }
      
  """
  @type unsuccessful_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_endpoint_service_configuration_result() :: %{
        "ClientToken" => String.t() | atom(),
        "ServiceConfiguration" => service_configuration()
      }
      
  """
  @type create_vpc_endpoint_service_configuration_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_route_table_propagations_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayRouteTablePropagations" => list(transit_gateway_route_table_propagation())
      }
      
  """
  @type get_transit_gateway_route_table_propagations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      pool_cidr_block() :: %{
        "Cidr" => String.t() | atom()
      }
      
  """
  @type pool_cidr_block() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_image_deregistration_protection_request() :: %{
        optional("DryRun") => boolean(),
        optional("WithCooldown") => boolean(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type enable_image_deregistration_protection_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_scope_result() :: %{
        "IpamScope" => ipam_scope()
      }
      
  """
  @type modify_ipam_scope_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      snapshot_disk_container() :: %{
        "Description" => String.t() | atom(),
        "Format" => String.t() | atom(),
        "Url" => String.t() | atom(),
        "UserBucket" => user_bucket()
      }
      
  """
  @type snapshot_disk_container() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_type_offerings_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("LocationType") => list(any()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_instance_type_offerings_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      data_query() :: %{
        "Destination" => String.t() | atom(),
        "Id" => String.t() | atom(),
        "Metric" => list(any()),
        "Period" => list(any()),
        "Source" => String.t() | atom(),
        "Statistic" => list(any())
      }
      
  """
  @type data_query() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_route_server_peers_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("RouteServerPeerIds") => list(String.t() | atom())
      }
      
  """
  @type describe_route_server_peers_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_trust_providers_result() :: %{
        "NextToken" => String.t() | atom(),
        "VerifiedAccessTrustProviders" => list(verified_access_trust_provider())
      }
      
  """
  @type describe_verified_access_trust_providers_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_connection_status() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type client_vpn_connection_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_metadata() :: %{
        "CreationDate" => String.t() | atom(),
        "DeprecationTime" => String.t() | atom(),
        "ImageAllowed" => boolean(),
        "ImageId" => String.t() | atom(),
        "ImageOwnerAlias" => String.t() | atom(),
        "IsPublic" => boolean(),
        "Name" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "State" => list(any())
      }
      
  """
  @type image_metadata() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_prefix_list_references_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayPrefixListReferences" => list(transit_gateway_prefix_list_reference())
      }
      
  """
  @type get_transit_gateway_prefix_list_references_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disk_image_description() :: %{
        "Checksum" => String.t() | atom(),
        "Format" => list(any()),
        "ImportManifestUrl" => String.t() | atom(),
        "Size" => float()
      }
      
  """
  @type disk_image_description() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_traffic_mirror_session_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("PacketLength") => integer(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("VirtualNetworkId") => integer(),
        required("NetworkInterfaceId") => String.t() | atom(),
        required("SessionNumber") => integer(),
        required("TrafficMirrorFilterId") => String.t() | atom(),
        required("TrafficMirrorTargetId") => String.t() | atom()
      }
      
  """
  @type create_traffic_mirror_session_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpn_connection_route_request() :: %{
        required("DestinationCidrBlock") => String.t() | atom(),
        required("VpnConnectionId") => String.t() | atom()
      }
      
  """
  @type create_vpn_connection_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      carrier_gateway() :: %{
        "CarrierGatewayId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type carrier_gateway() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      authorize_client_vpn_ingress_result() :: %{
        "Status" => client_vpn_authorization_rule_status()
      }
      
  """
  @type authorize_client_vpn_ingress_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_vpc_endpoint_connections_result() :: %{
        "Unsuccessful" => list(unsuccessful_item())
      }
      
  """
  @type reject_vpc_endpoint_connections_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_scheduled_instances_result() :: %{
        "NextToken" => String.t() | atom(),
        "ScheduledInstanceSet" => list(scheduled_instance())
      }
      
  """
  @type describe_scheduled_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_overrides() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "InstanceRequirements" => instance_requirements(),
        "InstanceType" => list(any()),
        "Priority" => float(),
        "SpotPrice" => String.t() | atom(),
        "SubnetId" => String.t() | atom(),
        "WeightedCapacity" => float()
      }
      
  """
  @type launch_template_overrides() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_discovered_public_address() :: %{
        "Address" => String.t() | atom(),
        "AddressAllocationId" => String.t() | atom(),
        "AddressOwnerId" => String.t() | atom(),
        "AddressRegion" => String.t() | atom(),
        "AddressType" => list(any()),
        "AssociationStatus" => list(any()),
        "InstanceId" => String.t() | atom(),
        "IpamResourceDiscoveryId" => String.t() | atom(),
        "NetworkBorderGroup" => String.t() | atom(),
        "NetworkInterfaceDescription" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "PublicIpv4PoolId" => String.t() | atom(),
        "SampleTime" => non_neg_integer(),
        "SecurityGroups" => list(ipam_public_address_security_group()),
        "Service" => list(any()),
        "ServiceResource" => String.t() | atom(),
        "SubnetId" => String.t() | atom(),
        "Tags" => ipam_public_address_tags(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type ipam_discovered_public_address() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_bgp_options() :: %{
        "PeerAsn" => float(),
        "PeerLivenessDetection" => list(any())
      }
      
  """
  @type route_server_bgp_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      key_pair() :: %{
        "KeyFingerprint" => String.t() | atom(),
        "KeyMaterial" => String.t() | atom(),
        "KeyName" => String.t() | atom(),
        "KeyPairId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type key_pair() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_external_resource_verification_tokens_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IpamExternalResourceVerificationTokenIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_ipam_external_resource_verification_tokens_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      deprecation_time_condition_request() :: %{
        "MaximumDaysSinceDeprecated" => integer()
      }
      
  """
  @type deprecation_time_condition_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_peering_connections_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VpcPeeringConnectionIds") => list(String.t() | atom())
      }
      
  """
  @type describe_vpc_peering_connections_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_vpc_attachments_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayVpcAttachments" => list(transit_gateway_vpc_attachment())
      }
      
  """
  @type describe_transit_gateway_vpc_attachments_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_attachment_propagations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_attachment_propagations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      product_code() :: %{
        "ProductCodeId" => String.t() | atom(),
        "ProductCodeType" => list(any())
      }
      
  """
  @type product_code() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_options_request() :: %{
        "UsageStrategy" => list(any())
      }
      
  """
  @type capacity_reservation_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpc_endpoint_service_configurations_result() :: %{
        "Unsuccessful" => list(unsuccessful_item())
      }
      
  """
  @type delete_vpc_endpoint_service_configurations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_address_transfer_result() :: %{
        "AddressTransfer" => address_transfer()
      }
      
  """
  @type accept_address_transfer_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_peering_connection_options_request() :: %{
        optional("AccepterPeeringConnectionOptions") => peering_connection_options_request(),
        optional("DryRun") => boolean(),
        optional("RequesterPeeringConnectionOptions") => peering_connection_options_request(),
        required("VpcPeeringConnectionId") => String.t() | atom()
      }
      
  """
  @type modify_vpc_peering_connection_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      filter() :: %{
        "Name" => String.t() | atom(),
        "Values" => list(String.t() | atom())
      }
      
  """
  @type filter() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      local_gateway_route_table_virtual_interface_group_association() :: %{
        "LocalGatewayId" => String.t() | atom(),
        "LocalGatewayRouteTableArn" => String.t() | atom(),
        "LocalGatewayRouteTableId" => String.t() | atom(),
        "LocalGatewayRouteTableVirtualInterfaceGroupAssociationId" => String.t() | atom(),
        "LocalGatewayVirtualInterfaceGroupId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "State" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type local_gateway_route_table_virtual_interface_group_association() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      public_ip_dns_name_options() :: %{
        "DnsHostnameType" => String.t() | atom(),
        "PublicDualStackDnsName" => String.t() | atom(),
        "PublicIpv4DnsName" => String.t() | atom(),
        "PublicIpv6DnsName" => String.t() | atom()
      }
      
  """
  @type public_ip_dns_name_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      service_type_detail() :: %{
        "ServiceType" => list(any())
      }
      
  """
  @type service_type_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_prefix_list_reference_result() :: %{
        "TransitGatewayPrefixListReference" => transit_gateway_prefix_list_reference()
      }
      
  """
  @type create_transit_gateway_prefix_list_reference_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      placement() :: %{
        "Affinity" => String.t() | atom(),
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "HostId" => String.t() | atom(),
        "HostResourceGroupArn" => String.t() | atom(),
        "PartitionNumber" => integer(),
        "SpreadDomain" => String.t() | atom(),
        "Tenancy" => list(any())
      }
      
  """
  @type placement() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deprovision_ipam_pool_cidr_request() :: %{
        optional("Cidr") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("IpamPoolId") => String.t() | atom()
      }
      
  """
  @type deprovision_ipam_pool_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_connect_peers_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayConnectPeers" => list(transit_gateway_connect_peer())
      }
      
  """
  @type describe_transit_gateway_connect_peers_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_state() :: %{
        "Code" => integer(),
        "Name" => list(any())
      }
      
  """
  @type instance_state() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_connect_peer_request() :: %{
        optional("BgpOptions") => transit_gateway_connect_request_bgp_options(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("TransitGatewayAddress") => String.t() | atom(),
        required("InsideCidrBlocks") => list(String.t() | atom()),
        required("PeerAddress") => String.t() | atom(),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_connect_peer_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_event_notification_attributes_result() :: %{
        "InstanceTagAttribute" => instance_tag_notification_attribute()
      }
      
  """
  @type describe_instance_event_notification_attributes_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      transit_gateway_connect_peer_configuration() :: %{
        "BgpConfigurations" => list(transit_gateway_attachment_bgp_configuration()),
        "InsideCidrBlocks" => list(String.t() | atom()),
        "PeerAddress" => String.t() | atom(),
        "Protocol" => list(any()),
        "TransitGatewayAddress" => String.t() | atom()
      }
      
  """
  @type transit_gateway_connect_peer_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      remove_ipam_organizational_unit_exclusion() :: %{
        "OrganizationsEntityPath" => String.t() | atom()
      }
      
  """
  @type remove_ipam_organizational_unit_exclusion() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_capacity_block_extension_request() :: %{
        optional("DryRun") => boolean(),
        required("CapacityBlockExtensionOfferingId") => String.t() | atom(),
        required("CapacityReservationId") => String.t() | atom()
      }
      
  """
  @type purchase_capacity_block_extension_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_ena_srd_udp_specification() :: %{
        "EnaSrdUdpEnabled" => boolean()
      }
      
  """
  @type launch_template_ena_srd_udp_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      authorize_security_group_egress_request() :: %{
        optional("CidrIp") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("FromPort") => integer(),
        optional("IpPermissions") => list(ip_permission()),
        optional("IpProtocol") => String.t() | atom(),
        optional("SourceSecurityGroupName") => String.t() | atom(),
        optional("SourceSecurityGroupOwnerId") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("ToPort") => integer(),
        required("GroupId") => String.t() | atom()
      }
      
  """
  @type authorize_security_group_egress_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_outpost_lags_result() :: %{
        "NextToken" => String.t() | atom(),
        "OutpostLags" => list(outpost_lag())
      }
      
  """
  @type describe_outpost_lags_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_connections_result() :: %{
        "NextToken" => String.t() | atom(),
        "VpcEndpointConnections" => list(vpc_endpoint_connection())
      }
      
  """
  @type describe_vpc_endpoint_connections_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      revoke_security_group_ingress_request() :: %{
        optional("CidrIp") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("FromPort") => integer(),
        optional("GroupId") => String.t() | atom(),
        optional("GroupName") => String.t() | atom(),
        optional("IpPermissions") => list(ip_permission()),
        optional("IpProtocol") => String.t() | atom(),
        optional("SecurityGroupRuleIds") => list(String.t() | atom()),
        optional("SourceSecurityGroupName") => String.t() | atom(),
        optional("SourceSecurityGroupOwnerId") => String.t() | atom(),
        optional("ToPort") => integer()
      }
      
  """
  @type revoke_security_group_ingress_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_address_transfer_result() :: %{
        "AddressTransfer" => address_transfer()
      }
      
  """
  @type enable_address_transfer_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_image_usage_report_request() :: %{
        optional("DryRun") => boolean(),
        required("ReportId") => String.t() | atom()
      }
      
  """
  @type delete_image_usage_report_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_insights_access_scope_analyses_request() :: %{
        optional("AnalysisStartTimeBegin") => non_neg_integer(),
        optional("AnalysisStartTimeEnd") => non_neg_integer(),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NetworkInsightsAccessScopeAnalysisIds") => list(String.t() | atom()),
        optional("NetworkInsightsAccessScopeId") => String.t() | atom(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_network_insights_access_scope_analyses_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      service_detail() :: %{
        "AcceptanceRequired" => boolean(),
        "AvailabilityZoneIds" => list(String.t() | atom()),
        "AvailabilityZones" => list(String.t() | atom()),
        "BaseEndpointDnsNames" => list(String.t() | atom()),
        "ManagesVpcEndpoints" => boolean(),
        "Owner" => String.t() | atom(),
        "PayerResponsibility" => list(any()),
        "PrivateDnsName" => String.t() | atom(),
        "PrivateDnsNameVerificationState" => list(any()),
        "PrivateDnsNames" => list(private_dns_details()),
        "ServiceId" => String.t() | atom(),
        "ServiceName" => String.t() | atom(),
        "ServiceRegion" => String.t() | atom(),
        "ServiceType" => list(service_type_detail()),
        "SupportedIpAddressTypes" => list(list(any())()),
        "Tags" => list(tag()),
        "VpcEndpointPolicySupported" => boolean()
      }
      
  """
  @type service_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_launch_template_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DefaultVersion") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("LaunchTemplateId") => String.t() | atom(),
        optional("LaunchTemplateName") => String.t() | atom()
      }
      
  """
  @type modify_launch_template_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_connects_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayConnects" => list(transit_gateway_connect())
      }
      
  """
  @type describe_transit_gateway_connects_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      start_vpc_endpoint_service_private_dns_verification_result() :: %{
        "ReturnValue" => boolean()
      }
      
  """
  @type start_vpc_endpoint_service_private_dns_verification_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_snapshot_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("Attribute") => list(any()),
        required("SnapshotId") => String.t() | atom()
      }
      
  """
  @type describe_snapshot_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_allocation() :: %{
        "AllocationType" => list(any()),
        "Count" => integer()
      }
      
  """
  @type capacity_allocation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_subnets_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("SubnetIds") => list(String.t() | atom())
      }
      
  """
  @type describe_subnets_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_image_result() :: %{
        "ImageId" => String.t() | atom()
      }
      
  """
  @type create_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      peering_connection_options_request() :: %{
        "AllowDnsResolutionFromRemoteVpc" => boolean(),
        "AllowEgressFromLocalClassicLinkToRemoteVpc" => boolean(),
        "AllowEgressFromLocalVpcToRemoteClassicLink" => boolean()
      }
      
  """
  @type peering_connection_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_allowed_images_settings_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type disable_allowed_images_settings_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_bandwidth_gbps_request() :: %{
        "Max" => float(),
        "Min" => float()
      }
      
  """
  @type network_bandwidth_gbps_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_reservation_fleets_request() :: %{
        optional("CapacityReservationFleetIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_capacity_reservation_fleets_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      assign_ipv6_addresses_result() :: %{
        "AssignedIpv6Addresses" => list(String.t() | atom()),
        "AssignedIpv6Prefixes" => list(String.t() | atom()),
        "NetworkInterfaceId" => String.t() | atom()
      }
      
  """
  @type assign_ipv6_addresses_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_block_public_access_exclusion_request() :: %{
        optional("DryRun") => boolean(),
        required("ExclusionId") => String.t() | atom(),
        required("InternetGatewayExclusionMode") => list(any())
      }
      
  """
  @type modify_vpc_block_public_access_exclusion_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_coip_pool_usage_result() :: %{
        "CoipAddressUsages" => list(coip_address_usage()),
        "CoipPoolId" => String.t() | atom(),
        "LocalGatewayRouteTableId" => String.t() | atom(),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_coip_pool_usage_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_trust_provider_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DeviceOptions") => modify_verified_access_trust_provider_device_options(),
        optional("DryRun") => boolean(),
        optional("NativeApplicationOidcOptions") => modify_verified_access_native_application_oidc_options(),
        optional("OidcOptions") => modify_verified_access_trust_provider_oidc_options(),
        optional("SseSpecification") => verified_access_sse_specification_request(),
        required("VerifiedAccessTrustProviderId") => String.t() | atom()
      }
      
  """
  @type modify_verified_access_trust_provider_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_route_table_propagations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_route_table_propagations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_public_ipv4_pool_result() :: %{
        "ReturnValue" => boolean()
      }
      
  """
  @type delete_public_ipv4_pool_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_launch_template_data_result() :: %{
        "LaunchTemplateData" => response_launch_template_data()
      }
      
  """
  @type get_launch_template_data_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_block_public_access_options_result() :: %{
        "VpcBlockPublicAccessOptions" => vpc_block_public_access_options()
      }
      
  """
  @type describe_vpc_block_public_access_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_recycle_bin_info() :: %{
        "Description" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "Name" => String.t() | atom(),
        "RecycleBinEnterTime" => non_neg_integer(),
        "RecycleBinExitTime" => non_neg_integer()
      }
      
  """
  @type image_recycle_bin_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_route_table_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_route_table_associations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      export_client_vpn_client_certificate_revocation_list_result() :: %{
        "CertificateRevocationList" => String.t() | atom(),
        "Status" => client_certificate_revocation_list_status()
      }
      
  """
  @type export_client_vpn_client_certificate_revocation_list_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_local_gateway_route_table_virtual_interface_group_association_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("LocalGatewayRouteTableId") => String.t() | atom(),
        required("LocalGatewayVirtualInterfaceGroupId") => String.t() | atom()
      }
      
  """
  @type create_local_gateway_route_table_virtual_interface_group_association_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_capacity_block_extension_history_request() :: %{
        optional("CapacityReservationIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_capacity_block_extension_history_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_info() :: %{
        "BandwidthWeightings" => list(list(any())()),
        "DefaultNetworkCardIndex" => integer(),
        "EfaInfo" => efa_info(),
        "EfaSupported" => boolean(),
        "EnaSrdSupported" => boolean(),
        "EnaSupport" => list(any()),
        "EncryptionInTransitSupported" => boolean(),
        "FlexibleEnaQueuesSupport" => list(any()),
        "Ipv4AddressesPerInterface" => integer(),
        "Ipv6AddressesPerInterface" => integer(),
        "Ipv6Supported" => boolean(),
        "MaximumNetworkCards" => integer(),
        "MaximumNetworkInterfaces" => integer(),
        "NetworkCards" => list(network_card_info()),
        "NetworkPerformance" => String.t() | atom()
      }
      
  """
  @type network_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_connect_result() :: %{
        "TransitGatewayConnect" => transit_gateway_connect()
      }
      
  """
  @type create_transit_gateway_connect_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      host() :: %{
        "AllocationTime" => non_neg_integer(),
        "AllowsMultipleInstanceTypes" => list(any()),
        "AssetId" => String.t() | atom(),
        "AutoPlacement" => list(any()),
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "AvailableCapacity" => available_capacity(),
        "ClientToken" => String.t() | atom(),
        "HostId" => String.t() | atom(),
        "HostMaintenance" => list(any()),
        "HostProperties" => host_properties(),
        "HostRecovery" => list(any()),
        "HostReservationId" => String.t() | atom(),
        "Instances" => list(host_instance()),
        "MemberOfServiceLinkedResourceGroup" => boolean(),
        "OutpostArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "ReleaseTime" => non_neg_integer(),
        "State" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type host() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_reserved_instances_offerings_request() :: %{
        optional("AvailabilityZone") => String.t() | atom(),
        optional("AvailabilityZoneId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IncludeMarketplace") => boolean(),
        optional("InstanceTenancy") => list(any()),
        optional("InstanceType") => list(any()),
        optional("MaxDuration") => float(),
        optional("MaxInstanceCount") => integer(),
        optional("MaxResults") => integer(),
        optional("MinDuration") => float(),
        optional("NextToken") => String.t() | atom(),
        optional("OfferingClass") => list(any()),
        optional("OfferingType") => list(any()),
        optional("ProductDescription") => list(any()),
        optional("ReservedInstancesOfferingIds") => list(String.t() | atom())
      }
      
  """
  @type describe_reserved_instances_offerings_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_client_vpn_target_networks_result() :: %{
        "ClientVpnTargetNetworks" => list(target_network()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_client_vpn_target_networks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpn_tunnel_options_specification() :: %{
        "DPDTimeoutAction" => String.t() | atom(),
        "DPDTimeoutSeconds" => integer(),
        "EnableTunnelLifecycleControl" => boolean(),
        "IKEVersions" => list(i_k_e_versions_request_list_value()),
        "LogOptions" => vpn_tunnel_log_options_specification(),
        "Phase1DHGroupNumbers" => list(phase1_d_h_group_numbers_request_list_value()),
        "Phase1EncryptionAlgorithms" => list(phase1_encryption_algorithms_request_list_value()),
        "Phase1IntegrityAlgorithms" => list(phase1_integrity_algorithms_request_list_value()),
        "Phase1LifetimeSeconds" => integer(),
        "Phase2DHGroupNumbers" => list(phase2_d_h_group_numbers_request_list_value()),
        "Phase2EncryptionAlgorithms" => list(phase2_encryption_algorithms_request_list_value()),
        "Phase2IntegrityAlgorithms" => list(phase2_integrity_algorithms_request_list_value()),
        "Phase2LifetimeSeconds" => integer(),
        "PreSharedKey" => String.t() | atom(),
        "RekeyFuzzPercentage" => integer(),
        "RekeyMarginTimeSeconds" => integer(),
        "ReplayWindowSize" => integer(),
        "StartupAction" => String.t() | atom(),
        "TunnelInsideCidr" => String.t() | atom(),
        "TunnelInsideIpv6Cidr" => String.t() | atom()
      }
      
  """
  @type vpn_tunnel_options_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_transit_gateway_policy_table_result() :: %{
        "Association" => transit_gateway_policy_table_association()
      }
      
  """
  @type associate_transit_gateway_policy_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_block_public_access_exclusions_result() :: %{
        "NextToken" => String.t() | atom(),
        "VpcBlockPublicAccessExclusions" => list(vpc_block_public_access_exclusion())
      }
      
  """
  @type describe_vpc_block_public_access_exclusions_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      allocate_hosts_result() :: %{
        "HostIds" => list(String.t() | atom())
      }
      
  """
  @type allocate_hosts_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_mac_modification_tasks_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MacModificationTaskIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_mac_modification_tasks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_instances_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VerifiedAccessInstanceIds") => list(String.t() | atom())
      }
      
  """
  @type describe_verified_access_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_image_deprecation_request() :: %{
        optional("DryRun") => boolean(),
        required("DeprecateAt") => non_neg_integer(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type enable_image_deprecation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_queued_reserved_instances_error() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type delete_queued_reserved_instances_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_acls_result() :: %{
        "NetworkAcls" => list(network_acl()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_network_acls_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_logs() :: %{
        "CloudWatchLogs" => verified_access_log_cloud_watch_logs_destination(),
        "IncludeTrustContext" => boolean(),
        "KinesisDataFirehose" => verified_access_log_kinesis_data_firehose_destination(),
        "LogVersion" => String.t() | atom(),
        "S3" => verified_access_log_s3_destination()
      }
      
  """
  @type verified_access_logs() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_bundle_task_result() :: %{
        "BundleTask" => bundle_task()
      }
      
  """
  @type cancel_bundle_task_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_route_table_vpc_associations_result() :: %{
        "LocalGatewayRouteTableVpcAssociations" => list(local_gateway_route_table_vpc_association()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_route_table_vpc_associations_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_ipam_scope_request() :: %{
        optional("DryRun") => boolean(),
        required("IpamScopeId") => String.t() | atom()
      }
      
  """
  @type delete_ipam_scope_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_vpc_endpoint_connections_result() :: %{
        "Unsuccessful" => list(unsuccessful_item())
      }
      
  """
  @type accept_vpc_endpoint_connections_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_trust_provider_oidc_options() :: %{
        "AuthorizationEndpoint" => String.t() | atom(),
        "ClientId" => String.t() | atom(),
        "ClientSecret" => String.t() | atom(),
        "Issuer" => String.t() | atom(),
        "Scope" => String.t() | atom(),
        "TokenEndpoint" => String.t() | atom(),
        "UserInfoEndpoint" => String.t() | atom()
      }
      
  """
  @type modify_verified_access_trust_provider_oidc_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_policy_table_association() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "State" => list(any()),
        "TransitGatewayAttachmentId" => String.t() | atom(),
        "TransitGatewayPolicyTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_policy_table_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_client_vpn_client_certificate_revocation_list_request() :: %{
        optional("DryRun") => boolean(),
        required("CertificateRevocationList") => String.t() | atom(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type import_client_vpn_client_certificate_revocation_list_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      attach_vpn_gateway_result() :: %{
        "VpcAttachment" => vpc_attachment()
      }
      
  """
  @type attach_vpn_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ebs_block_device_response() :: %{
        "DeleteOnTermination" => boolean(),
        "Encrypted" => boolean(),
        "Iops" => integer(),
        "KmsKeyId" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "Throughput" => integer(),
        "VolumeSize" => integer(),
        "VolumeType" => list(any())
      }
      
  """
  @type ebs_block_device_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attachment_ena_srd_udp_specification() :: %{
        "EnaSrdUdpEnabled" => boolean()
      }
      
  """
  @type attachment_ena_srd_udp_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_fast_launch_result() :: %{
        "ImageId" => String.t() | atom(),
        "LaunchTemplate" => fast_launch_launch_template_specification_response(),
        "MaxParallelLaunches" => integer(),
        "OwnerId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "SnapshotConfiguration" => fast_launch_snapshot_configuration_response(),
        "State" => list(any()),
        "StateTransitionReason" => String.t() | atom(),
        "StateTransitionTime" => non_neg_integer()
      }
      
  """
  @type enable_fast_launch_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_capacity() :: %{
        "AvailableCapacity" => integer(),
        "InstanceType" => String.t() | atom(),
        "TotalCapacity" => integer()
      }
      
  """
  @type instance_capacity() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_route_request() :: %{
        optional("DestinationCidrBlock") => String.t() | atom(),
        optional("DestinationPrefixListId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("LocalGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type delete_local_gateway_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_connect_request_options() :: %{
        "Protocol" => list(any())
      }
      
  """
  @type create_transit_gateway_connect_request_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      copy_snapshot_result() :: %{
        "SnapshotId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type copy_snapshot_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_endpoint_port_range() :: %{
        "FromPort" => integer(),
        "ToPort" => integer()
      }
      
  """
  @type modify_verified_access_endpoint_port_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_local_gateway_route_result() :: %{
        "Route" => local_gateway_route()
      }
      
  """
  @type modify_local_gateway_route_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_services_result() :: %{
        "NextToken" => String.t() | atom(),
        "ServiceDetails" => list(service_detail()),
        "ServiceNames" => list(String.t() | atom())
      }
      
  """
  @type describe_vpc_endpoint_services_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_ipam_organization_admin_account_request() :: %{
        optional("DryRun") => boolean(),
        required("DelegatedAdminAccountId") => String.t() | atom()
      }
      
  """
  @type enable_ipam_organization_admin_account_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_vpc_classic_link_request() :: %{
        optional("DryRun") => boolean(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type enable_vpc_classic_link_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_customer_gateway_request() :: %{
        optional("BgpAsn") => integer(),
        optional("BgpAsnExtended") => float(),
        optional("CertificateArn") => String.t() | atom(),
        optional("DeviceName") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("IpAddress") => String.t() | atom(),
        optional("PublicIp") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("Type") => list(any())
      }
      
  """
  @type create_customer_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_image_usage_report_entries_result() :: %{
        "ImageUsageReportEntries" => list(image_usage_report_entry()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_image_usage_report_entries_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_mac_hosts_request() :: %{
        optional("Filters") => list(filter()),
        optional("HostIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_mac_hosts_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      user_id_group_pair() :: %{
        "Description" => String.t() | atom(),
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "PeeringStatus" => String.t() | atom(),
        "UserId" => String.t() | atom(),
        "VpcId" => String.t() | atom(),
        "VpcPeeringConnectionId" => String.t() | atom()
      }
      
  """
  @type user_id_group_pair() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_task() :: %{
        "Description" => String.t() | atom(),
        "ExportTaskId" => String.t() | atom(),
        "ExportToS3Task" => export_to_s3_task(),
        "InstanceExportDetails" => instance_export_details(),
        "State" => list(any()),
        "StatusMessage" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type export_task() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_ipam_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EnablePrivateGua") => boolean(),
        optional("MeteredAccount") => list(any()),
        optional("OperatingRegions") => list(add_ipam_operating_region()),
        optional("TagSpecifications") => list(tag_specification()),
        optional("Tier") => list(any())
      }
      
  """
  @type create_ipam_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_insights_path_request() :: %{
        optional("DryRun") => boolean(),
        required("NetworkInsightsPathId") => String.t() | atom()
      }
      
  """
  @type delete_network_insights_path_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_multicast_group() :: %{
        "GroupIpAddress" => String.t() | atom(),
        "GroupMember" => boolean(),
        "GroupSource" => boolean(),
        "MemberType" => list(any()),
        "NetworkInterfaceId" => String.t() | atom(),
        "ResourceId" => String.t() | atom(),
        "ResourceOwnerId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "SourceType" => list(any()),
        "SubnetId" => String.t() | atom(),
        "TransitGatewayAttachmentId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_multicast_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deregister_transit_gateway_multicast_group_sources_request() :: %{
        optional("DryRun") => boolean(),
        optional("GroupIpAddress") => String.t() | atom(),
        optional("NetworkInterfaceIds") => list(String.t() | atom()),
        optional("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type deregister_transit_gateway_multicast_group_sources_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      capacity_reservation_options() :: %{
        "UsageStrategy" => list(any())
      }
      
  """
  @type capacity_reservation_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_acls_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NetworkAclIds") => list(String.t() | atom()),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_network_acls_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_route_server_result() :: %{
        "RouteServer" => route_server()
      }
      
  """
  @type create_route_server_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_private_dns_name_options_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_private_dns_name_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_log_s3_destination() :: %{
        "BucketName" => String.t() | atom(),
        "BucketOwner" => String.t() | atom(),
        "DeliveryStatus" => verified_access_log_delivery_status(),
        "Enabled" => boolean(),
        "Prefix" => String.t() | atom()
      }
      
  """
  @type verified_access_log_s3_destination() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_security_group_result() :: %{
        "GroupId" => String.t() | atom(),
        "SecurityGroupArn" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type create_security_group_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_vpc_attachment_request() :: %{
        optional("DryRun") => boolean(),
        optional("Options") => create_transit_gateway_vpc_attachment_request_options(),
        optional("TagSpecifications") => list(tag_specification()),
        required("SubnetIds") => list(String.t() | atom()),
        required("TransitGatewayId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_vpc_attachment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_verified_access_group_policy_request() :: %{
        optional("DryRun") => boolean(),
        required("VerifiedAccessGroupId") => String.t() | atom()
      }
      
  """
  @type get_verified_access_group_policy_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_transit_gateway_result() :: %{
        "TransitGateway" => transit_gateway()
      }
      
  """
  @type modify_transit_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_image_metadata_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("InstanceIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_instance_image_metadata_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipams_result() :: %{
        "Ipams" => list(ipam()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_ipams_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      federated_authentication() :: %{
        "SamlProviderArn" => String.t() | atom(),
        "SelfServiceSamlProviderArn" => String.t() | atom()
      }
      
  """
  @type federated_authentication() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_placement() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "Tenancy" => list(any())
      }
      
  """
  @type spot_placement() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_bgp_status() :: %{
        "Status" => list(any())
      }
      
  """
  @type route_server_bgp_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_flow_logs_result() :: %{
        "FlowLogs" => list(flow_log()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_flow_logs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      tunnel_option() :: %{
        "DpdTimeoutAction" => String.t() | atom(),
        "DpdTimeoutSeconds" => integer(),
        "EnableTunnelLifecycleControl" => boolean(),
        "IkeVersions" => list(i_k_e_versions_list_value()),
        "LogOptions" => vpn_tunnel_log_options(),
        "OutsideIpAddress" => String.t() | atom(),
        "Phase1DHGroupNumbers" => list(phase1_d_h_group_numbers_list_value()),
        "Phase1EncryptionAlgorithms" => list(phase1_encryption_algorithms_list_value()),
        "Phase1IntegrityAlgorithms" => list(phase1_integrity_algorithms_list_value()),
        "Phase1LifetimeSeconds" => integer(),
        "Phase2DHGroupNumbers" => list(phase2_d_h_group_numbers_list_value()),
        "Phase2EncryptionAlgorithms" => list(phase2_encryption_algorithms_list_value()),
        "Phase2IntegrityAlgorithms" => list(phase2_integrity_algorithms_list_value()),
        "Phase2LifetimeSeconds" => integer(),
        "PreSharedKey" => String.t() | atom(),
        "RekeyFuzzPercentage" => integer(),
        "RekeyMarginTimeSeconds" => integer(),
        "ReplayWindowSize" => integer(),
        "StartupAction" => String.t() | atom(),
        "TunnelInsideCidr" => String.t() | atom(),
        "TunnelInsideIpv6Cidr" => String.t() | atom()
      }
      
  """
  @type tunnel_option() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      update_security_group_rule_descriptions_egress_request() :: %{
        optional("DryRun") => boolean(),
        optional("GroupId") => String.t() | atom(),
        optional("GroupName") => String.t() | atom(),
        optional("IpPermissions") => list(ip_permission()),
        optional("SecurityGroupRuleDescriptions") => list(security_group_rule_description())
      }
      
  """
  @type update_security_group_rule_descriptions_egress_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      apply_security_groups_to_client_vpn_target_network_request() :: %{
        optional("DryRun") => boolean(),
        required("ClientVpnEndpointId") => String.t() | atom(),
        required("SecurityGroupIds") => list(String.t() | atom()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type apply_security_groups_to_client_vpn_target_network_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      get_verified_access_group_policy_result() :: %{
        "PolicyDocument" => String.t() | atom(),
        "PolicyEnabled" => boolean()
      }
      
  """
  @type get_verified_access_group_policy_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_route() :: %{
        "AsPaths" => list(String.t() | atom()),
        "Med" => integer(),
        "NextHopIp" => String.t() | atom(),
        "Prefix" => String.t() | atom(),
        "RouteInstallationDetails" => list(route_server_route_installation_detail()),
        "RouteServerEndpointId" => String.t() | atom(),
        "RouteServerPeerId" => String.t() | atom(),
        "RouteStatus" => list(any())
      }
      
  """
  @type route_server_route() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_service_permissions_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("ServiceId") => String.t() | atom()
      }
      
  """
  @type describe_vpc_endpoint_service_permissions_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_default_credit_specification_result() :: %{
        "InstanceFamilyCreditSpecification" => instance_family_credit_specification()
      }
      
  """
  @type get_default_credit_specification_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase1_d_h_group_numbers_list_value() :: %{
        "Value" => integer()
      }
      
  """
  @type phase1_d_h_group_numbers_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_snapshot_tier_result() :: %{
        "IsPermanentRestore" => boolean(),
        "RestoreDuration" => integer(),
        "RestoreStartTime" => non_neg_integer(),
        "SnapshotId" => String.t() | atom()
      }
      
  """
  @type restore_snapshot_tier_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_address_request() :: %{
        optional("AllocationId") => String.t() | atom(),
        optional("AllowReassociation") => boolean(),
        optional("DryRun") => boolean(),
        optional("InstanceId") => String.t() | atom(),
        optional("NetworkInterfaceId") => String.t() | atom(),
        optional("PrivateIpAddress") => String.t() | atom(),
        optional("PublicIp") => String.t() | atom()
      }
      
  """
  @type associate_address_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_transit_gateway_policy_table_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom(),
        required("TransitGatewayPolicyTableId") => String.t() | atom()
      }
      
  """
  @type disassociate_transit_gateway_policy_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      slot_start_time_range_request() :: %{
        "EarliestTime" => non_neg_integer(),
        "LatestTime" => non_neg_integer()
      }
      
  """
  @type slot_start_time_range_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpn_gateway_request() :: %{
        optional("AmazonSideAsn") => float(),
        optional("AvailabilityZone") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("Type") => list(any())
      }
      
  """
  @type create_vpn_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      advertise_byoip_cidr_result() :: %{
        "ByoipCidr" => byoip_cidr()
      }
      
  """
  @type advertise_byoip_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_insights_access_scope_analysis() :: %{
        "AnalyzedEniCount" => integer(),
        "EndDate" => non_neg_integer(),
        "FindingsFound" => list(any()),
        "NetworkInsightsAccessScopeAnalysisArn" => String.t() | atom(),
        "NetworkInsightsAccessScopeAnalysisId" => String.t() | atom(),
        "NetworkInsightsAccessScopeId" => String.t() | atom(),
        "StartDate" => non_neg_integer(),
        "Status" => list(any()),
        "StatusMessage" => String.t() | atom(),
        "Tags" => list(tag()),
        "WarningMessage" => String.t() | atom()
      }
      
  """
  @type network_insights_access_scope_analysis() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_endpoint_connection_notification_result() :: %{
        "ClientToken" => String.t() | atom(),
        "ConnectionNotification" => connection_notification()
      }
      
  """
  @type create_vpc_endpoint_connection_notification_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_launch_template_versions_result() :: %{
        "SuccessfullyDeletedLaunchTemplateVersions" => list(delete_launch_template_versions_response_success_item()),
        "UnsuccessfullyDeletedLaunchTemplateVersions" => list(delete_launch_template_versions_response_error_item())
      }
      
  """
  @type delete_launch_template_versions_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_metadata_options_response() :: %{
        "HttpEndpoint" => list(any()),
        "HttpProtocolIpv6" => list(any()),
        "HttpPutResponseHopLimit" => integer(),
        "HttpTokens" => list(any()),
        "InstanceMetadataTags" => list(any()),
        "State" => list(any())
      }
      
  """
  @type instance_metadata_options_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_volume_attribute_result() :: %{
        "AutoEnableIO" => attribute_boolean_value(),
        "ProductCodes" => list(product_code()),
        "VolumeId" => String.t() | atom()
      }
      
  """
  @type describe_volume_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_topology_result() :: %{
        "Instances" => list(instance_topology()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_instance_topology_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_instance_custom_sub_domain() :: %{
        "Nameservers" => list(String.t() | atom()),
        "SubDomain" => String.t() | atom()
      }
      
  """
  @type verified_access_instance_custom_sub_domain() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      device_options() :: %{
        "PublicSigningKeyUrl" => String.t() | atom(),
        "TenantId" => String.t() | atom()
      }
      
  """
  @type device_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fast_launch_images_result() :: %{
        "FastLaunchImages" => list(describe_fast_launch_images_success_item()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_fast_launch_images_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fpga_info() :: %{
        "Fpgas" => list(fpga_device_info()),
        "TotalFpgaMemoryInMiB" => integer()
      }
      
  """
  @type fpga_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_volume_permission_modifications() :: %{
        "Add" => list(create_volume_permission()),
        "Remove" => list(create_volume_permission())
      }
      
  """
  @type create_volume_permission_modifications() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_login_banner_options() :: %{
        "BannerText" => String.t() | atom(),
        "Enabled" => boolean()
      }
      
  """
  @type client_login_banner_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      path_statement() :: %{
        "PacketHeaderStatement" => packet_header_statement(),
        "ResourceStatement" => resource_statement()
      }
      
  """
  @type path_statement() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_endpoint_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DnsOptions") => dns_options_specification(),
        optional("DryRun") => boolean(),
        optional("IpAddressType") => list(any()),
        optional("PolicyDocument") => String.t() | atom(),
        optional("PrivateDnsEnabled") => boolean(),
        optional("ResourceConfigurationArn") => String.t() | atom(),
        optional("RouteTableIds") => list(String.t() | atom()),
        optional("SecurityGroupIds") => list(String.t() | atom()),
        optional("ServiceName") => String.t() | atom(),
        optional("ServiceNetworkArn") => String.t() | atom(),
        optional("ServiceRegion") => String.t() | atom(),
        optional("SubnetConfigurations") => list(subnet_configuration()),
        optional("SubnetIds") => list(String.t() | atom()),
        optional("TagSpecifications") => list(tag_specification()),
        optional("VpcEndpointType") => list(any()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type create_vpc_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_transit_gateway_route_table_propagation_result() :: %{
        "Propagation" => transit_gateway_propagation()
      }
      
  """
  @type disable_transit_gateway_route_table_propagation_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      traffic_mirror_target() :: %{
        "Description" => String.t() | atom(),
        "GatewayLoadBalancerEndpointId" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "NetworkLoadBalancerArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "Tags" => list(tag()),
        "TrafficMirrorTargetId" => String.t() | atom(),
        "Type" => list(any())
      }
      
  """
  @type traffic_mirror_target() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_transit_gateway_peering_attachment_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type accept_transit_gateway_peering_attachment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_block_extension_history_result() :: %{
        "CapacityBlockExtensions" => list(capacity_block_extension()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_capacity_block_extension_history_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_capacity_reservation_request() :: %{
        optional("DryRun") => boolean(),
        required("CapacityReservationId") => String.t() | atom()
      }
      
  """
  @type cancel_capacity_reservation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_mac_modification_tasks_result() :: %{
        "MacModificationTasks" => list(mac_modification_task()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_mac_modification_tasks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_image_result() :: %{
        "Description" => String.t() | atom(),
        "DiskImageFormat" => list(any()),
        "ExportImageTaskId" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "RoleName" => String.t() | atom(),
        "S3ExportLocation" => export_task_s3_location(),
        "Status" => String.t() | atom(),
        "StatusMessage" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type export_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_associations_result() :: %{
        "NextToken" => String.t() | atom(),
        "VpcEndpointAssociations" => list(vpc_endpoint_association())
      }
      
  """
  @type describe_vpc_endpoint_associations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accelerator_total_memory_mi_b_request() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type accelerator_total_memory_mi_b_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      load_permission() :: %{
        "Group" => list(any()),
        "UserId" => String.t() | atom()
      }
      
  """
  @type load_permission() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_capacity_reservation_by_splitting_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("InstanceCount") => integer(),
        required("SourceCapacityReservationId") => String.t() | atom()
      }
      
  """
  @type create_capacity_reservation_by_splitting_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      port_range() :: %{
        "From" => integer(),
        "To" => integer()
      }
      
  """
  @type port_range() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_endpoint_connection() :: %{
        "CreationTimestamp" => non_neg_integer(),
        "DnsEntries" => list(dns_entry()),
        "GatewayLoadBalancerArns" => list(String.t() | atom()),
        "IpAddressType" => list(any()),
        "NetworkLoadBalancerArns" => list(String.t() | atom()),
        "ServiceId" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcEndpointConnectionId" => String.t() | atom(),
        "VpcEndpointId" => String.t() | atom(),
        "VpcEndpointOwner" => String.t() | atom(),
        "VpcEndpointRegion" => String.t() | atom(),
        "VpcEndpointState" => list(any())
      }
      
  """
  @type vpc_endpoint_connection() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attach_network_interface_request() :: %{
        optional("DryRun") => boolean(),
        optional("EnaQueueCount") => integer(),
        optional("EnaSrdSpecification") => ena_srd_specification(),
        optional("NetworkCardIndex") => integer(),
        required("DeviceIndex") => integer(),
        required("InstanceId") => String.t() | atom(),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type attach_network_interface_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpn_gateway_result() :: %{
        "VpnGateway" => vpn_gateway()
      }
      
  """
  @type create_vpn_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_traffic_mirror_session_result() :: %{
        "TrafficMirrorSessionId" => String.t() | atom()
      }
      
  """
  @type delete_traffic_mirror_session_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_verified_access_trust_provider_result() :: %{
        "VerifiedAccessTrustProvider" => verified_access_trust_provider()
      }
      
  """
  @type delete_verified_access_trust_provider_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_declarative_policies_report_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type cancel_declarative_policies_report_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_attachment_propagations_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayAttachmentPropagations" => list(transit_gateway_attachment_propagation())
      }
      
  """
  @type get_transit_gateway_attachment_propagations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_client_vpn_endpoints_result() :: %{
        "ClientVpnEndpoints" => list(client_vpn_endpoint()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_client_vpn_endpoints_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_client_vpn_endpoint_result() :: %{
        "Status" => client_vpn_endpoint_status()
      }
      
  """
  @type delete_client_vpn_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_reserved_instances_listing_request() :: %{
        required("ReservedInstancesListingId") => String.t() | atom()
      }
      
  """
  @type cancel_reserved_instances_listing_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_subnet_result() :: %{
        "Subnet" => subnet()
      }
      
  """
  @type create_subnet_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpn_tunnel_options_request() :: %{
        optional("DryRun") => boolean(),
        optional("PreSharedKeyStorage") => String.t() | atom(),
        optional("SkipTunnelReplacement") => boolean(),
        required("TunnelOptions") => modify_vpn_tunnel_options_specification(),
        required("VpnConnectionId") => String.t() | atom(),
        required("VpnTunnelOutsideIpAddress") => String.t() | atom()
      }
      
  """
  @type modify_vpn_tunnel_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_network_interface_attachment() :: %{
        "AttachTime" => non_neg_integer(),
        "AttachmentId" => String.t() | atom(),
        "DeleteOnTermination" => boolean(),
        "DeviceIndex" => integer(),
        "EnaQueueCount" => integer(),
        "EnaSrdSpecification" => instance_attachment_ena_srd_specification(),
        "NetworkCardIndex" => integer(),
        "Status" => list(any())
      }
      
  """
  @type instance_network_interface_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_status_event() :: %{
        "Code" => list(any()),
        "Description" => String.t() | atom(),
        "InstanceEventId" => String.t() | atom(),
        "NotAfter" => non_neg_integer(),
        "NotBefore" => non_neg_integer(),
        "NotBeforeDeadline" => non_neg_integer()
      }
      
  """
  @type instance_status_event() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_placement_request() :: %{
        optional("Affinity") => list(any()),
        optional("GroupId") => String.t() | atom(),
        optional("GroupName") => String.t() | atom(),
        optional("HostId") => String.t() | atom(),
        optional("HostResourceGroupArn") => String.t() | atom(),
        optional("PartitionNumber") => integer(),
        optional("Tenancy") => list(any()),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type modify_instance_placement_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_security_group_vpc_associations_result() :: %{
        "NextToken" => String.t() | atom(),
        "SecurityGroupVpcAssociations" => list(security_group_vpc_association())
      }
      
  """
  @type describe_security_group_vpc_associations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      media_device_memory_info() :: %{
        "SizeInMiB" => integer()
      }
      
  """
  @type media_device_memory_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fleet_history_result() :: %{
        "FleetId" => String.t() | atom(),
        "HistoryRecords" => list(history_record_entry()),
        "LastEvaluatedTime" => non_neg_integer(),
        "NextToken" => String.t() | atom(),
        "StartTime" => non_neg_integer()
      }
      
  """
  @type describe_fleet_history_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_reserved_instances_result() :: %{
        "ReservedInstancesModificationId" => String.t() | atom()
      }
      
  """
  @type modify_reserved_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_acl_request() :: %{
        optional("DryRun") => boolean(),
        required("NetworkAclId") => String.t() | atom()
      }
      
  """
  @type delete_network_acl_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      mac_system_integrity_protection_configuration_request() :: %{
        "AppleInternal" => list(any()),
        "BaseSystem" => list(any()),
        "DTraceRestrictions" => list(any()),
        "DebuggingRestrictions" => list(any()),
        "FilesystemProtections" => list(any()),
        "KextSigning" => list(any()),
        "NvramProtections" => list(any())
      }
      
  """
  @type mac_system_integrity_protection_configuration_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      associate_nat_gateway_address_request() :: %{
        optional("DryRun") => boolean(),
        optional("PrivateIpAddresses") => list(String.t() | atom()),
        required("AllocationIds") => list(String.t() | atom()),
        required("NatGatewayId") => String.t() | atom()
      }
      
  """
  @type associate_nat_gateway_address_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      allowed_principal() :: %{
        "Principal" => String.t() | atom(),
        "PrincipalType" => list(any()),
        "ServiceId" => String.t() | atom(),
        "ServicePermissionId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type allowed_principal() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_reserved_instances_exchange_quote_result() :: %{
        "CurrencyCode" => String.t() | atom(),
        "IsValidExchange" => boolean(),
        "OutputReservedInstancesWillExpireAt" => non_neg_integer(),
        "PaymentDue" => String.t() | atom(),
        "ReservedInstanceValueRollup" => reservation_value(),
        "ReservedInstanceValueSet" => list(reserved_instance_reservation_value()),
        "TargetConfigurationValueRollup" => reservation_value(),
        "TargetConfigurationValueSet" => list(target_reservation_value()),
        "ValidationFailureReason" => String.t() | atom()
      }
      
  """
  @type get_reserved_instances_exchange_quote_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_public_address_tag() :: %{
        "Key" => String.t() | atom(),
        "Value" => String.t() | atom()
      }
      
  """
  @type ipam_public_address_tag() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_attachment() :: %{
        "Association" => transit_gateway_attachment_association(),
        "CreationTime" => non_neg_integer(),
        "ResourceId" => String.t() | atom(),
        "ResourceOwnerId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TransitGatewayAttachmentId" => String.t() | atom(),
        "TransitGatewayId" => String.t() | atom(),
        "TransitGatewayOwnerId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpn_connections_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("VpnConnectionIds") => list(String.t() | atom())
      }
      
  """
  @type describe_vpn_connections_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_route_table_route() :: %{
        "AttachmentId" => String.t() | atom(),
        "DestinationCidr" => String.t() | atom(),
        "PrefixListId" => String.t() | atom(),
        "ResourceId" => String.t() | atom(),
        "ResourceType" => String.t() | atom(),
        "RouteOrigin" => String.t() | atom(),
        "State" => String.t() | atom()
      }
      
  """
  @type transit_gateway_route_table_route() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      request_launch_template_data() :: %{
        "LicenseSpecifications" => list(launch_template_license_configuration_request()),
        "ElasticGpuSpecifications" => list(elastic_gpu_specification()),
        "InstanceInitiatedShutdownBehavior" => list(any()),
        "DisableApiStop" => boolean(),
        "RamDiskId" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "BlockDeviceMappings" => list(launch_template_block_device_mapping_request()),
        "NetworkInterfaces" => list(launch_template_instance_network_interface_specification_request()),
        "Monitoring" => launch_templates_monitoring_request(),
        "NetworkPerformanceOptions" => launch_template_network_performance_options_request(),
        "PrivateDnsNameOptions" => launch_template_private_dns_name_options_request(),
        "InstanceRequirements" => instance_requirements_request(),
        "CreditSpecification" => credit_specification_request(),
        "CapacityReservationSpecification" => launch_template_capacity_reservation_specification_request(),
        "SecurityGroupIds" => list(String.t() | atom()),
        "InstanceType" => list(any()),
        "KernelId" => String.t() | atom(),
        "Placement" => launch_template_placement_request(),
        "ElasticInferenceAccelerators" => list(launch_template_elastic_inference_accelerator()),
        "DisableApiTermination" => boolean(),
        "EnclaveOptions" => launch_template_enclave_options_request(),
        "CpuOptions" => launch_template_cpu_options_request(),
        "IamInstanceProfile" => launch_template_iam_instance_profile_specification_request(),
        "HibernationOptions" => launch_template_hibernation_options_request(),
        "InstanceMarketOptions" => launch_template_instance_market_options_request(),
        "TagSpecifications" => list(launch_template_tag_specification_request()),
        "MetadataOptions" => launch_template_instance_metadata_options_request(),
        "UserData" => String.t() | atom(),
        "EbsOptimized" => boolean(),
        "KeyName" => String.t() | atom(),
        "Operator" => operator_request(),
        "SecurityGroups" => list(String.t() | atom()),
        "MaintenanceOptions" => launch_template_instance_maintenance_options_request()
      }
      
  """
  @type request_launch_template_data() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_scheduled_instances_result() :: %{
        "ScheduledInstanceSet" => list(scheduled_instance())
      }
      
  """
  @type purchase_scheduled_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_client_vpn_route_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("ClientVpnEndpointId") => String.t() | atom(),
        required("DestinationCidrBlock") => String.t() | atom(),
        required("TargetVpcSubnetId") => String.t() | atom()
      }
      
  """
  @type create_client_vpn_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_key_pair_result() :: %{
        "KeyFingerprint" => String.t() | atom(),
        "KeyName" => String.t() | atom(),
        "KeyPairId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type import_key_pair_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      placement_response() :: %{
        "GroupName" => String.t() | atom()
      }
      
  """
  @type placement_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_ipam_result() :: %{
        "Ipam" => ipam()
      }
      
  """
  @type delete_ipam_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_client_vpn_endpoint_request() :: %{
        optional("ClientConnectOptions") => client_connect_options(),
        optional("ClientLoginBannerOptions") => client_login_banner_options(),
        optional("ClientRouteEnforcementOptions") => client_route_enforcement_options(),
        optional("ConnectionLogOptions") => connection_log_options(),
        optional("Description") => String.t() | atom(),
        optional("DisconnectOnSessionTimeout") => boolean(),
        optional("DnsServers") => dns_servers_options_modify_structure(),
        optional("DryRun") => boolean(),
        optional("SecurityGroupIds") => list(String.t() | atom()),
        optional("SelfServicePortal") => list(any()),
        optional("ServerCertificateArn") => String.t() | atom(),
        optional("SessionTimeoutHours") => integer(),
        optional("SplitTunnel") => boolean(),
        optional("VpcId") => String.t() | atom(),
        optional("VpnPort") => integer(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type modify_client_vpn_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      register_image_request() :: %{
        optional("Architecture") => list(any()),
        optional("BillingProducts") => list(String.t() | atom()),
        optional("BlockDeviceMappings") => list(block_device_mapping()),
        optional("BootMode") => list(any()),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EnaSupport") => boolean(),
        optional("ImageLocation") => String.t() | atom(),
        optional("ImdsSupport") => list(any()),
        optional("KernelId") => String.t() | atom(),
        optional("RamdiskId") => String.t() | atom(),
        optional("RootDeviceName") => String.t() | atom(),
        optional("SriovNetSupport") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("TpmSupport") => list(any()),
        optional("UefiData") => String.t() | atom(),
        optional("VirtualizationType") => String.t() | atom(),
        required("Name") => String.t() | atom()
      }
      
  """
  @type register_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_vpc_classic_link_dns_support_request() :: %{
        optional("VpcId") => String.t() | atom()
      }
      
  """
  @type disable_vpc_classic_link_dns_support_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_image_license_configuration_response() :: %{
        "LicenseConfigurationArn" => String.t() | atom()
      }
      
  """
  @type import_image_license_configuration_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_specification() :: %{
        "AddressingType" => String.t() | atom(),
        "BlockDeviceMappings" => list(block_device_mapping()),
        "EbsOptimized" => boolean(),
        "IamInstanceProfile" => iam_instance_profile_specification(),
        "ImageId" => String.t() | atom(),
        "InstanceType" => list(any()),
        "KernelId" => String.t() | atom(),
        "KeyName" => String.t() | atom(),
        "Monitoring" => run_instances_monitoring_enabled(),
        "NetworkInterfaces" => list(instance_network_interface_specification()),
        "Placement" => spot_placement(),
        "RamdiskId" => String.t() | atom(),
        "SecurityGroups" => list(group_identifier()),
        "SubnetId" => String.t() | atom(),
        "UserData" => String.t() | atom()
      }
      
  """
  @type launch_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_local_gateway_route_request() :: %{
        optional("DestinationCidrBlock") => String.t() | atom(),
        optional("DestinationPrefixListId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("LocalGatewayVirtualInterfaceGroupId") => String.t() | atom(),
        optional("NetworkInterfaceId") => String.t() | atom(),
        required("LocalGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type modify_local_gateway_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_virtual_interface_result() :: %{
        "LocalGatewayVirtualInterface" => local_gateway_virtual_interface()
      }
      
  """
  @type delete_local_gateway_virtual_interface_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_vpn_connection_device_sample_configuration_result() :: %{
        "VpnConnectionDeviceSampleConfiguration" => String.t() | atom()
      }
      
  """
  @type get_vpn_connection_device_sample_configuration_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      iam_instance_profile_specification() :: %{
        "Arn" => String.t() | atom(),
        "Name" => String.t() | atom()
      }
      
  """
  @type iam_instance_profile_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_virtual_interfaces_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("LocalGatewayVirtualInterfaceIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_virtual_interfaces_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_multicast_domain() :: %{
        "CreationTime" => non_neg_integer(),
        "Options" => transit_gateway_multicast_domain_options(),
        "OwnerId" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TransitGatewayId" => String.t() | atom(),
        "TransitGatewayMulticastDomainArn" => String.t() | atom(),
        "TransitGatewayMulticastDomainId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_multicast_domain() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_image_task() :: %{
        "Description" => String.t() | atom(),
        "ExportImageTaskId" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "S3ExportLocation" => export_task_s3_location(),
        "Status" => String.t() | atom(),
        "StatusMessage" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type export_image_task() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      trunk_interface_association() :: %{
        "AssociationId" => String.t() | atom(),
        "BranchInterfaceId" => String.t() | atom(),
        "GreKey" => integer(),
        "InterfaceProtocol" => list(any()),
        "Tags" => list(tag()),
        "TrunkInterfaceId" => String.t() | atom(),
        "VlanId" => integer()
      }
      
  """
  @type trunk_interface_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_instance_logging_configuration_result() :: %{
        "LoggingConfiguration" => verified_access_instance_logging_configuration()
      }
      
  """
  @type modify_verified_access_instance_logging_configuration_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_conversion_tasks_result() :: %{
        "ConversionTasks" => list(conversion_task())
      }
      
  """
  @type describe_conversion_tasks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_log_kinesis_data_firehose_destination() :: %{
        "DeliveryStatus" => verified_access_log_delivery_status(),
        "DeliveryStream" => String.t() | atom(),
        "Enabled" => boolean()
      }
      
  """
  @type verified_access_log_kinesis_data_firehose_destination() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      disassociate_subnet_cidr_block_result() :: %{
        "Ipv6CidrBlockAssociation" => subnet_ipv6_cidr_block_association(),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type disassociate_subnet_cidr_block_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_multicast_domain_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_multicast_domain_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      tag_specification() :: %{
        "ResourceType" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type tag_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_route_server_routing_database_result() :: %{
        "AreRoutesPersisted" => boolean(),
        "NextToken" => String.t() | atom(),
        "Routes" => list(route_server_route())
      }
      
  """
  @type get_route_server_routing_database_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      start_vpc_endpoint_service_private_dns_verification_request() :: %{
        optional("DryRun") => boolean(),
        required("ServiceId") => String.t() | atom()
      }
      
  """
  @type start_vpc_endpoint_service_private_dns_verification_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      image_reference() :: %{
        "Arn" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "ResourceType" => list(any())
      }
      
  """
  @type image_reference() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_route_server_peer_result() :: %{
        "RouteServerPeer" => route_server_peer()
      }
      
  """
  @type delete_route_server_peer_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unlock_snapshot_request() :: %{
        optional("DryRun") => boolean(),
        required("SnapshotId") => String.t() | atom()
      }
      
  """
  @type unlock_snapshot_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      firewall_stateful_rule() :: %{
        "DestinationPorts" => list(port_range()),
        "Destinations" => list(String.t() | atom()),
        "Direction" => String.t() | atom(),
        "Protocol" => String.t() | atom(),
        "RuleAction" => String.t() | atom(),
        "RuleGroupArn" => String.t() | atom(),
        "SourcePorts" => list(port_range()),
        "Sources" => list(String.t() | atom())
      }
      
  """
  @type firewall_stateful_rule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_connection_notification_result() :: %{
        "ReturnValue" => boolean()
      }
      
  """
  @type modify_vpc_endpoint_connection_notification_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      subnet_cidr_block_state() :: %{
        "State" => list(any()),
        "StatusMessage" => String.t() | atom()
      }
      
  """
  @type subnet_cidr_block_state() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_vpc_classic_link_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type enable_vpc_classic_link_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      snapshot() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "CompletionDurationMinutes" => integer(),
        "CompletionTime" => non_neg_integer(),
        "DataEncryptionKeyId" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "Encrypted" => boolean(),
        "FullSnapshotSizeInBytes" => float(),
        "KmsKeyId" => String.t() | atom(),
        "OutpostArn" => String.t() | atom(),
        "OwnerAlias" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "RestoreExpiryTime" => non_neg_integer(),
        "SnapshotId" => String.t() | atom(),
        "SseType" => list(any()),
        "StartTime" => non_neg_integer(),
        "State" => list(any()),
        "StateMessage" => String.t() | atom(),
        "StorageTier" => list(any()),
        "Tags" => list(tag()),
        "TransferType" => list(any()),
        "VolumeId" => String.t() | atom(),
        "VolumeSize" => integer()
      }
      
  """
  @type snapshot() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_default_subnet_request() :: %{
        optional("AvailabilityZone") => String.t() | atom(),
        optional("AvailabilityZoneId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Ipv6Native") => boolean()
      }
      
  """
  @type create_default_subnet_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_fpga_image_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("LogsStorageLocation") => storage_location(),
        optional("Name") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("InputStorageLocation") => storage_location()
      }
      
  """
  @type create_fpga_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_availability_zones_request() :: %{
        optional("AllAvailabilityZones") => boolean(),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("ZoneIds") => list(String.t() | atom()),
        optional("ZoneNames") => list(String.t() | atom())
      }
      
  """
  @type describe_availability_zones_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_route_table_request() :: %{
        optional("DryRun") => boolean(),
        required("AssociationId") => String.t() | atom()
      }
      
  """
  @type disassociate_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_verified_access_endpoint_policy_request() :: %{
        optional("DryRun") => boolean(),
        required("VerifiedAccessEndpointId") => String.t() | atom()
      }
      
  """
  @type get_verified_access_endpoint_policy_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      provision_public_ipv4_pool_cidr_result() :: %{
        "PoolAddressRange" => public_ipv4_pool_range(),
        "PoolId" => String.t() | atom()
      }
      
  """
  @type provision_public_ipv4_pool_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image() :: %{
        "SriovNetSupport" => String.t() | atom(),
        "RootDeviceName" => String.t() | atom(),
        "ProductCodes" => list(product_code()),
        "FreeTierEligible" => boolean(),
        "Tags" => list(tag()),
        "CreationDate" => String.t() | atom(),
        "ImageAllowed" => boolean(),
        "OwnerId" => String.t() | atom(),
        "ImageId" => String.t() | atom(),
        "BlockDeviceMappings" => list(block_device_mapping()),
        "TpmSupport" => list(any()),
        "Public" => boolean(),
        "LastLaunchedTime" => String.t() | atom(),
        "ImageLocation" => String.t() | atom(),
        "RamdiskId" => String.t() | atom(),
        "PlatformDetails" => String.t() | atom(),
        "KernelId" => String.t() | atom(),
        "ImageType" => list(any()),
        "SourceImageId" => String.t() | atom(),
        "StateReason" => state_reason(),
        "State" => list(any()),
        "SourceImageRegion" => String.t() | atom(),
        "UsageOperation" => String.t() | atom(),
        "EnaSupport" => boolean(),
        "Hypervisor" => list(any()),
        "VirtualizationType" => list(any()),
        "SourceInstanceId" => String.t() | atom(),
        "RootDeviceType" => list(any()),
        "BootMode" => list(any()),
        "DeregistrationProtection" => String.t() | atom(),
        "Architecture" => list(any()),
        "Name" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "ImdsSupport" => list(any()),
        "ImageOwnerAlias" => String.t() | atom(),
        "DeprecationTime" => String.t() | atom(),
        "Platform" => list(any())
      }
      
  """
  @type image() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_block_offerings_result() :: %{
        "CapacityBlockOfferings" => list(capacity_block_offering()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_capacity_block_offerings_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_verified_access_instance_result() :: %{
        "VerifiedAccessInstance" => verified_access_instance()
      }
      
  """
  @type delete_verified_access_instance_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_insights_access_scope_request() :: %{
        optional("DryRun") => boolean(),
        optional("ExcludePaths") => list(access_scope_path_request()),
        optional("MatchPaths") => list(access_scope_path_request()),
        optional("TagSpecifications") => list(tag_specification()),
        required("ClientToken") => String.t() | atom()
      }
      
  """
  @type create_network_insights_access_scope_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_fast_snapshot_restores_result() :: %{
        "Successful" => list(disable_fast_snapshot_restore_success_item()),
        "Unsuccessful" => list(disable_fast_snapshot_restore_error_item())
      }
      
  """
  @type disable_fast_snapshot_restores_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_ipam_resource_discovery_request() :: %{
        optional("DryRun") => boolean(),
        required("IpamResourceDiscoveryAssociationId") => String.t() | atom()
      }
      
  """
  @type disassociate_ipam_resource_discovery_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      key_pair_info() :: %{
        "CreateTime" => non_neg_integer(),
        "KeyFingerprint" => String.t() | atom(),
        "KeyName" => String.t() | atom(),
        "KeyPairId" => String.t() | atom(),
        "KeyType" => list(any()),
        "PublicKey" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type key_pair_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_address_transfers_request() :: %{
        optional("AllocationIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_address_transfers_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      monitoring() :: %{
        "State" => list(any())
      }
      
  """
  @type monitoring() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_transit_gateway_vpc_attachment_request_options() :: %{
        "ApplianceModeSupport" => list(any()),
        "DnsSupport" => list(any()),
        "Ipv6Support" => list(any()),
        "SecurityGroupReferencingSupport" => list(any())
      }
      
  """
  @type modify_transit_gateway_vpc_attachment_request_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      phase1_encryption_algorithms_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type phase1_encryption_algorithms_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      detach_internet_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("InternetGatewayId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type detach_internet_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_launch_template_specification() :: %{
        "LaunchTemplateId" => String.t() | atom(),
        "LaunchTemplateName" => String.t() | atom(),
        "Version" => String.t() | atom()
      }
      
  """
  @type fleet_launch_template_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_insights_analysis_request() :: %{
        optional("DryRun") => boolean(),
        required("NetworkInsightsAnalysisId") => String.t() | atom()
      }
      
  """
  @type delete_network_insights_analysis_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_billing_request() :: %{
        "CapacityReservationId" => String.t() | atom(),
        "CapacityReservationInfo" => capacity_reservation_info(),
        "LastUpdateTime" => non_neg_integer(),
        "RequestedBy" => String.t() | atom(),
        "Status" => list(any()),
        "StatusMessage" => String.t() | atom(),
        "UnusedReservationBillingOwnerId" => String.t() | atom()
      }
      
  """
  @type capacity_reservation_billing_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      send_diagnostic_interrupt_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type send_diagnostic_interrupt_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_interface_permission_request() :: %{
        optional("DryRun") => boolean(),
        optional("Force") => boolean(),
        required("NetworkInterfacePermissionId") => String.t() | atom()
      }
      
  """
  @type delete_network_interface_permission_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_multicast_domain_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_multicast_domain_associations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      transit_gateway() :: %{
        "CreationTime" => non_neg_integer(),
        "Description" => String.t() | atom(),
        "Options" => transit_gateway_options(),
        "OwnerId" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TransitGatewayArn" => String.t() | atom(),
        "TransitGatewayId" => String.t() | atom()
      }
      
  """
  @type transit_gateway() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_scope_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("IpamScopeId") => String.t() | atom()
      }
      
  """
  @type modify_ipam_scope_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      license_configuration_request() :: %{
        "LicenseConfigurationArn" => String.t() | atom()
      }
      
  """
  @type license_configuration_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_managed_prefix_list_result() :: %{
        "PrefixList" => managed_prefix_list()
      }
      
  """
  @type create_managed_prefix_list_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      athena_integration() :: %{
        "IntegrationResultS3DestinationArn" => String.t() | atom(),
        "PartitionEndDate" => non_neg_integer(),
        "PartitionLoadFrequency" => list(any()),
        "PartitionStartDate" => non_neg_integer()
      }
      
  """
  @type athena_integration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_permission_modifications() :: %{
        "Add" => list(launch_permission()),
        "Remove" => list(launch_permission())
      }
      
  """
  @type launch_permission_modifications() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_endpoint() :: %{
        "AssociatedTargetNetworks" => list(associated_target_network()),
        "AuthenticationOptions" => list(client_vpn_authentication()),
        "ClientCidrBlock" => String.t() | atom(),
        "ClientConnectOptions" => client_connect_response_options(),
        "ClientLoginBannerOptions" => client_login_banner_response_options(),
        "ClientRouteEnforcementOptions" => client_route_enforcement_response_options(),
        "ClientVpnEndpointId" => String.t() | atom(),
        "ConnectionLogOptions" => connection_log_response_options(),
        "CreationTime" => String.t() | atom(),
        "DeletionTime" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "DisconnectOnSessionTimeout" => boolean(),
        "DnsName" => String.t() | atom(),
        "DnsServers" => list(String.t() | atom()),
        "EndpointIpAddressType" => list(any()),
        "SecurityGroupIds" => list(String.t() | atom()),
        "SelfServicePortalUrl" => String.t() | atom(),
        "ServerCertificateArn" => String.t() | atom(),
        "SessionTimeoutHours" => integer(),
        "SplitTunnel" => boolean(),
        "Status" => client_vpn_endpoint_status(),
        "Tags" => list(tag()),
        "TrafficIpAddressType" => list(any()),
        "TransportProtocol" => list(any()),
        "VpcId" => String.t() | atom(),
        "VpnPort" => integer(),
        "VpnProtocol" => list(any())
      }
      
  """
  @type client_vpn_endpoint() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_snapshot_attribute_request() :: %{
        optional("Attribute") => list(any()),
        optional("CreateVolumePermission") => create_volume_permission_modifications(),
        optional("DryRun") => boolean(),
        optional("GroupNames") => list(String.t() | atom()),
        optional("OperationType") => list(any()),
        optional("UserIds") => list(String.t() | atom()),
        required("SnapshotId") => String.t() | atom()
      }
      
  """
  @type modify_snapshot_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      internet_gateway_attachment() :: %{
        "State" => list(any()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type internet_gateway_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      list_images_in_recycle_bin_result() :: %{
        "Images" => list(image_recycle_bin_info()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type list_images_in_recycle_bin_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_multicast_domain_request_options() :: %{
        "AutoAcceptSharedAssociations" => list(any()),
        "Igmpv2Support" => list(any()),
        "StaticSourcesSupport" => list(any())
      }
      
  """
  @type create_transit_gateway_multicast_domain_request_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      volume_status_attachment_status() :: %{
        "InstanceId" => String.t() | atom(),
        "IoPerformance" => String.t() | atom()
      }
      
  """
  @type volume_status_attachment_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_aws_network_performance_data_request() :: %{
        optional("DataQueries") => list(data_query()),
        optional("DryRun") => boolean(),
        optional("EndTime") => non_neg_integer(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("StartTime") => non_neg_integer()
      }
      
  """
  @type get_aws_network_performance_data_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_conversion_tasks_request() :: %{
        optional("ConversionTaskIds") => list(String.t() | atom()),
        optional("DryRun") => boolean()
      }
      
  """
  @type describe_conversion_tasks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_type_info() :: %{
        "AutoRecoverySupported" => boolean(),
        "BareMetal" => boolean(),
        "BurstablePerformanceSupported" => boolean(),
        "CurrentGeneration" => boolean(),
        "DedicatedHostsSupported" => boolean(),
        "EbsInfo" => ebs_info(),
        "FpgaInfo" => fpga_info(),
        "FreeTierEligible" => boolean(),
        "GpuInfo" => gpu_info(),
        "HibernationSupported" => boolean(),
        "Hypervisor" => list(any()),
        "InferenceAcceleratorInfo" => inference_accelerator_info(),
        "InstanceStorageInfo" => instance_storage_info(),
        "InstanceStorageSupported" => boolean(),
        "InstanceType" => list(any()),
        "MediaAcceleratorInfo" => media_accelerator_info(),
        "MemoryInfo" => memory_info(),
        "NetworkInfo" => network_info(),
        "NeuronInfo" => neuron_info(),
        "NitroEnclavesSupport" => list(any()),
        "NitroTpmInfo" => nitro_tpm_info(),
        "NitroTpmSupport" => list(any()),
        "PhcSupport" => list(any()),
        "PlacementGroupInfo" => placement_group_info(),
        "ProcessorInfo" => processor_info(),
        "RebootMigrationSupport" => list(any()),
        "SupportedBootModes" => list(list(any())()),
        "SupportedRootDeviceTypes" => list(list(any())()),
        "SupportedUsageClasses" => list(list(any())()),
        "SupportedVirtualizationTypes" => list(list(any())()),
        "VCpuInfo" => v_cpu_info()
      }
      
  """
  @type instance_type_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_event_notification_attributes_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type describe_instance_event_notification_attributes_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      storage() :: %{
        "S3" => s3_storage()
      }
      
  """
  @type storage() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_dhcp_options_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("DhcpConfigurations") => list(new_dhcp_configuration())
      }
      
  """
  @type create_dhcp_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vgw_telemetry() :: %{
        "AcceptedRouteCount" => integer(),
        "CertificateArn" => String.t() | atom(),
        "LastStatusChange" => non_neg_integer(),
        "OutsideIpAddress" => String.t() | atom(),
        "Status" => list(any()),
        "StatusMessage" => String.t() | atom()
      }
      
  """
  @type vgw_telemetry() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance() :: %{
        "SriovNetSupport" => String.t() | atom(),
        "AmiLaunchIndex" => integer(),
        "PublicDnsName" => String.t() | atom(),
        "RootDeviceName" => String.t() | atom(),
        "ElasticGpuAssociations" => list(elastic_gpu_association()),
        "ProductCodes" => list(product_code()),
        "Tags" => list(tag()),
        "LaunchTime" => non_neg_integer(),
        "SubnetId" => String.t() | atom(),
        "CapacityReservationId" => String.t() | atom(),
        "InstanceLifecycle" => list(any()),
        "ImageId" => String.t() | atom(),
        "BlockDeviceMappings" => list(instance_block_device_mapping()),
        "TpmSupport" => String.t() | atom(),
        "UsageOperationUpdateTime" => non_neg_integer(),
        "Licenses" => list(license_configuration()),
        "NetworkInterfaces" => list(instance_network_interface()),
        "StateTransitionReason" => String.t() | atom(),
        "Monitoring" => monitoring(),
        "SpotInstanceRequestId" => String.t() | atom(),
        "NetworkPerformanceOptions" => instance_network_performance_options(),
        "VpcId" => String.t() | atom(),
        "RamdiskId" => String.t() | atom(),
        "PrivateDnsNameOptions" => private_dns_name_options_response(),
        "PublicIpAddress" => String.t() | atom(),
        "PlatformDetails" => String.t() | atom(),
        "CapacityReservationSpecification" => capacity_reservation_specification_response(),
        "OutpostArn" => String.t() | atom(),
        "InstanceType" => list(any()),
        "KernelId" => String.t() | atom(),
        "StateReason" => state_reason(),
        "State" => instance_state(),
        "Placement" => placement(),
        "CurrentInstanceBootMode" => list(any()),
        "InstanceId" => String.t() | atom(),
        "EnclaveOptions" => enclave_options(),
        "CpuOptions" => cpu_options(),
        "PrivateIpAddress" => String.t() | atom(),
        "PrivateDnsName" => String.t() | atom(),
        "IamInstanceProfile" => iam_instance_profile(),
        "UsageOperation" => String.t() | atom(),
        "HibernationOptions" => hibernation_options(),
        "EnaSupport" => boolean(),
        "Hypervisor" => list(any()),
        "VirtualizationType" => list(any()),
        "RootDeviceType" => list(any()),
        "BootMode" => list(any()),
        "SourceDestCheck" => boolean(),
        "Architecture" => list(any()),
        "MetadataOptions" => instance_metadata_options_response(),
        "ElasticInferenceAcceleratorAssociations" => list(elastic_inference_accelerator_association()),
        "ClientToken" => String.t() | atom(),
        "EbsOptimized" => boolean(),
        "KeyName" => String.t() | atom(),
        "CapacityBlockId" => String.t() | atom(),
        "Operator" => operator_response(),
        "SecurityGroups" => list(group_identifier()),
        "Ipv6Address" => String.t() | atom(),
        "MaintenanceOptions" => instance_maintenance_options(),
        "Platform" => list(any())
      }
      
  """
  @type instance() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attach_verified_access_trust_provider_result() :: %{
        "VerifiedAccessInstance" => verified_access_instance(),
        "VerifiedAccessTrustProvider" => verified_access_trust_provider()
      }
      
  """
  @type attach_verified_access_trust_provider_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_fleet_result() :: %{
        "Errors" => list(create_fleet_error()),
        "FleetId" => String.t() | atom(),
        "Instances" => list(create_fleet_instance())
      }
      
  """
  @type create_fleet_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_resource_discovery_result() :: %{
        "IpamResourceDiscovery" => ipam_resource_discovery()
      }
      
  """
  @type modify_ipam_resource_discovery_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      volume() :: %{
        "Attachments" => list(volume_attachment()),
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "CreateTime" => non_neg_integer(),
        "Encrypted" => boolean(),
        "FastRestored" => boolean(),
        "Iops" => integer(),
        "KmsKeyId" => String.t() | atom(),
        "MultiAttachEnabled" => boolean(),
        "Operator" => operator_response(),
        "OutpostArn" => String.t() | atom(),
        "Size" => integer(),
        "SnapshotId" => String.t() | atom(),
        "SseType" => list(any()),
        "State" => list(any()),
        "Tags" => list(tag()),
        "Throughput" => integer(),
        "VolumeId" => String.t() | atom(),
        "VolumeInitializationRate" => integer(),
        "VolumeType" => list(any())
      }
      
  """
  @type volume() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_instance_connect_endpoint_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("IpAddressType") => list(any()),
        optional("PreserveClientIp") => boolean(),
        optional("SecurityGroupIds") => list(String.t() | atom()),
        optional("TagSpecifications") => list(tag_specification()),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type create_instance_connect_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_prefix_list_references_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_prefix_list_references_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_pool_allocations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IpamPoolAllocationId") => String.t() | atom(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("IpamPoolId") => String.t() | atom()
      }
      
  """
  @type get_ipam_pool_allocations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      local_gateway_virtual_interface_group() :: %{
        "ConfigurationState" => list(any()),
        "LocalBgpAsn" => integer(),
        "LocalBgpAsnExtended" => float(),
        "LocalGatewayId" => String.t() | atom(),
        "LocalGatewayVirtualInterfaceGroupArn" => String.t() | atom(),
        "LocalGatewayVirtualInterfaceGroupId" => String.t() | atom(),
        "LocalGatewayVirtualInterfaceIds" => list(String.t() | atom()),
        "OwnerId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type local_gateway_virtual_interface_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_client_vpn_route_result() :: %{
        "Status" => client_vpn_route_status()
      }
      
  """
  @type delete_client_vpn_route_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      release_ipam_pool_allocation_result() :: %{
        "Success" => boolean()
      }
      
  """
  @type release_ipam_pool_allocation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_route_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type create_route_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_association() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "State" => list(any()),
        "TransitGatewayAttachmentId" => String.t() | atom(),
        "TransitGatewayRouteTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_trust_providers_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VerifiedAccessTrustProviderIds") => list(String.t() | atom())
      }
      
  """
  @type describe_verified_access_trust_providers_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fast_launch_launch_template_specification_response() :: %{
        "LaunchTemplateId" => String.t() | atom(),
        "LaunchTemplateName" => String.t() | atom(),
        "Version" => String.t() | atom()
      }
      
  """
  @type fast_launch_launch_template_specification_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      list_images_in_recycle_bin_request() :: %{
        optional("DryRun") => boolean(),
        optional("ImageIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type list_images_in_recycle_bin_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_tag_notification_attribute() :: %{
        "IncludeAllTagsOfInstance" => boolean(),
        "InstanceTagKeys" => list(String.t() | atom())
      }
      
  """
  @type instance_tag_notification_attribute() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reset_address_attribute_result() :: %{
        "Address" => address_attribute()
      }
      
  """
  @type reset_address_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_key_pair_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("KeyName") => String.t() | atom(),
        required("PublicKeyMaterial") => binary()
      }
      
  """
  @type import_key_pair_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      search_local_gateway_routes_result() :: %{
        "NextToken" => String.t() | atom(),
        "Routes" => list(local_gateway_route())
      }
      
  """
  @type search_local_gateway_routes_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_address_to_classic_request() :: %{
        optional("DryRun") => boolean(),
        required("PublicIp") => String.t() | atom()
      }
      
  """
  @type restore_address_to_classic_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_carrier_gateways_result() :: %{
        "CarrierGateways" => list(carrier_gateway()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_carrier_gateways_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server() :: %{
        "AmazonSideAsn" => float(),
        "PersistRoutesDuration" => float(),
        "PersistRoutesState" => list(any()),
        "RouteServerId" => String.t() | atom(),
        "SnsNotificationsEnabled" => boolean(),
        "SnsTopicArn" => String.t() | atom(),
        "State" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type route_server() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reserved_instances_listing() :: %{
        "ClientToken" => String.t() | atom(),
        "CreateDate" => non_neg_integer(),
        "InstanceCounts" => list(instance_count()),
        "PriceSchedules" => list(price_schedule()),
        "ReservedInstancesId" => String.t() | atom(),
        "ReservedInstancesListingId" => String.t() | atom(),
        "Status" => list(any()),
        "StatusMessage" => String.t() | atom(),
        "Tags" => list(tag()),
        "UpdateDate" => non_neg_integer()
      }
      
  """
  @type reserved_instances_listing() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_prefix_list_reference_request() :: %{
        optional("DryRun") => boolean(),
        required("PrefixListId") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_prefix_list_reference_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_service_link_virtual_interfaces_result() :: %{
        "NextToken" => String.t() | atom(),
        "ServiceLinkVirtualInterfaces" => list(service_link_virtual_interface())
      }
      
  """
  @type describe_service_link_virtual_interfaces_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_resource_tag() :: %{
        "Key" => String.t() | atom(),
        "Value" => String.t() | atom()
      }
      
  """
  @type ipam_resource_tag() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instances_ebs() :: %{
        "DeleteOnTermination" => boolean(),
        "Encrypted" => boolean(),
        "Iops" => integer(),
        "SnapshotId" => String.t() | atom(),
        "VolumeSize" => integer(),
        "VolumeType" => String.t() | atom()
      }
      
  """
  @type scheduled_instances_ebs() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_password_data_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type get_password_data_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_type_info_from_instance_requirements() :: %{
        "InstanceType" => String.t() | atom()
      }
      
  """
  @type instance_type_info_from_instance_requirements() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_interface_permissions_request() :: %{
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NetworkInterfacePermissionIds") => list(String.t() | atom()),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_network_interface_permissions_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_endpoint_attribute_status() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type client_vpn_endpoint_attribute_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      terminate_client_vpn_connections_request() :: %{
        optional("ConnectionId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Username") => String.t() | atom(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type terminate_client_vpn_connections_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_credit_specification_result() :: %{
        "SuccessfulInstanceCreditSpecifications" => list(successful_instance_credit_specification_item()),
        "UnsuccessfulInstanceCreditSpecifications" => list(unsuccessful_instance_credit_specification_item())
      }
      
  """
  @type modify_instance_credit_specification_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_declarative_policies_reports_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ReportIds") => list(String.t() | atom())
      }
      
  """
  @type describe_declarative_policies_reports_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_launch_template_versions_request() :: %{
        optional("DryRun") => boolean(),
        optional("LaunchTemplateId") => String.t() | atom(),
        optional("LaunchTemplateName") => String.t() | atom(),
        required("Versions") => list(String.t() | atom())
      }
      
  """
  @type delete_launch_template_versions_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_enclave_certificate_iam_role_request() :: %{
        optional("DryRun") => boolean(),
        required("CertificateArn") => String.t() | atom(),
        required("RoleArn") => String.t() | atom()
      }
      
  """
  @type disassociate_enclave_certificate_iam_role_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_public_ipv4_pools_request() :: %{
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("PoolIds") => list(String.t() | atom())
      }
      
  """
  @type describe_public_ipv4_pools_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_locked_snapshots_result() :: %{
        "NextToken" => String.t() | atom(),
        "Snapshots" => list(locked_snapshots_info())
      }
      
  """
  @type describe_locked_snapshots_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_key_pair_request() :: %{
        optional("DryRun") => boolean(),
        optional("KeyFormat") => list(any()),
        optional("KeyType") => list(any()),
        optional("TagSpecifications") => list(tag_specification()),
        required("KeyName") => String.t() | atom()
      }
      
  """
  @type create_key_pair_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_serial_console_access_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type enable_serial_console_access_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_traffic_mirror_filter_rule_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("DestinationCidrBlock") => String.t() | atom(),
        optional("DestinationPortRange") => traffic_mirror_port_range_request(),
        optional("DryRun") => boolean(),
        optional("Protocol") => integer(),
        optional("RemoveFields") => list(list(any())()),
        optional("RuleAction") => list(any()),
        optional("RuleNumber") => integer(),
        optional("SourceCidrBlock") => String.t() | atom(),
        optional("SourcePortRange") => traffic_mirror_port_range_request(),
        optional("TrafficDirection") => list(any()),
        required("TrafficMirrorFilterRuleId") => String.t() | atom()
      }
      
  """
  @type modify_traffic_mirror_filter_rule_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_fleet_cancellation_state() :: %{
        "CapacityReservationFleetId" => String.t() | atom(),
        "CurrentFleetState" => list(any()),
        "PreviousFleetState" => list(any())
      }
      
  """
  @type capacity_reservation_fleet_cancellation_state() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_vpc_classic_link_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type disable_vpc_classic_link_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_peering_attachment_request_options() :: %{
        "DynamicRouting" => list(any())
      }
      
  """
  @type create_transit_gateway_peering_attachment_request_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_local_gateways_result() :: %{
        "LocalGateways" => list(local_gateway()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_local_gateways_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_resource_discovery_request() :: %{
        optional("AddOperatingRegions") => list(add_ipam_operating_region()),
        optional("AddOrganizationalUnitExclusions") => list(add_ipam_organizational_unit_exclusion()),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("RemoveOperatingRegions") => list(remove_ipam_operating_region()),
        optional("RemoveOrganizationalUnitExclusions") => list(remove_ipam_organizational_unit_exclusion()),
        required("IpamResourceDiscoveryId") => String.t() | atom()
      }
      
  """
  @type modify_ipam_resource_discovery_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_byoasn_result() :: %{
        "Byoasns" => list(byoasn()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_ipam_byoasn_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      storage_location() :: %{
        "Bucket" => String.t() | atom(),
        "Key" => String.t() | atom()
      }
      
  """
  @type storage_location() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_group_policy_result() :: %{
        "PolicyDocument" => String.t() | atom(),
        "PolicyEnabled" => boolean(),
        "SseSpecification" => verified_access_sse_specification_response()
      }
      
  """
  @type modify_verified_access_group_policy_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      validation_warning() :: %{
        "Errors" => list(validation_error())
      }
      
  """
  @type validation_warning() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      register_instance_tag_attribute_request() :: %{
        "IncludeAllTagsOfInstance" => boolean(),
        "InstanceTagKeys" => list(String.t() | atom())
      }
      
  """
  @type register_instance_tag_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_dhcp_options_request() :: %{
        optional("DryRun") => boolean(),
        required("DhcpOptionsId") => String.t() | atom()
      }
      
  """
  @type delete_dhcp_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_vpc_classic_link_dns_support_request() :: %{
        optional("VpcId") => String.t() | atom()
      }
      
  """
  @type enable_vpc_classic_link_dns_support_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_public_ipv4_pool_result() :: %{
        "PoolId" => String.t() | atom()
      }
      
  """
  @type create_public_ipv4_pool_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deprovision_public_ipv4_pool_cidr_result() :: %{
        "DeprovisionedAddresses" => list(String.t() | atom()),
        "PoolId" => String.t() | atom()
      }
      
  """
  @type deprovision_public_ipv4_pool_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      search_transit_gateway_routes_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        required("Filters") => list(filter()),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type search_transit_gateway_routes_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_usage() :: %{
        "AccountId" => String.t() | atom(),
        "UsedInstanceCount" => integer()
      }
      
  """
  @type instance_usage() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_client_vpn_authorization_rules_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type describe_client_vpn_authorization_rules_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_route_server_propagation_result() :: %{
        "RouteServerPropagation" => route_server_propagation()
      }
      
  """
  @type enable_route_server_propagation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_route_table_virtual_interface_group_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("LocalGatewayRouteTableVirtualInterfaceGroupAssociationIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_route_table_virtual_interface_group_associations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_verified_access_endpoint_cidr_options() :: %{
        "Cidr" => String.t() | atom(),
        "PortRanges" => list(create_verified_access_endpoint_port_range()),
        "Protocol" => list(any()),
        "SubnetIds" => list(String.t() | atom())
      }
      
  """
  @type create_verified_access_endpoint_cidr_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_image_usage_report_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type delete_image_usage_report_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpcs_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VpcIds") => list(String.t() | atom())
      }
      
  """
  @type describe_vpcs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_policy_table_associations_result() :: %{
        "Associations" => list(transit_gateway_policy_table_association()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_policy_table_associations_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_import_image_tasks_result() :: %{
        "ImportImageTasks" => list(import_image_task()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_import_image_tasks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_launch_template_result() :: %{
        "LaunchTemplate" => launch_template()
      }
      
  """
  @type modify_launch_template_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_volume_attribute_request() :: %{
        optional("AutoEnableIO") => attribute_boolean_value(),
        optional("DryRun") => boolean(),
        required("VolumeId") => String.t() | atom()
      }
      
  """
  @type modify_volume_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_connect() :: %{
        "CreationTime" => non_neg_integer(),
        "Options" => transit_gateway_connect_options(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TransitGatewayAttachmentId" => String.t() | atom(),
        "TransitGatewayId" => String.t() | atom(),
        "TransportTransitGatewayAttachmentId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_connect() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      failed_capacity_reservation_fleet_cancellation_result() :: %{
        "CancelCapacityReservationFleetError" => cancel_capacity_reservation_fleet_error(),
        "CapacityReservationFleetId" => String.t() | atom()
      }
      
  """
  @type failed_capacity_reservation_fleet_cancellation_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_fleet_instance() :: %{
        "InstanceIds" => list(String.t() | atom()),
        "InstanceType" => list(any()),
        "LaunchTemplateAndOverrides" => launch_template_and_overrides_response(),
        "Lifecycle" => list(any()),
        "Platform" => list(any())
      }
      
  """
  @type create_fleet_instance() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fleet_error() :: %{
        "ErrorCode" => String.t() | atom(),
        "ErrorMessage" => String.t() | atom(),
        "LaunchTemplateAndOverrides" => launch_template_and_overrides_response(),
        "Lifecycle" => list(any())
      }
      
  """
  @type describe_fleet_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      path_filter() :: %{
        "DestinationAddress" => String.t() | atom(),
        "DestinationPortRange" => filter_port_range(),
        "SourceAddress" => String.t() | atom(),
        "SourcePortRange" => filter_port_range()
      }
      
  """
  @type path_filter() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_ipam_byoasn_request() :: %{
        optional("DryRun") => boolean(),
        required("Asn") => String.t() | atom(),
        required("Cidr") => String.t() | atom()
      }
      
  """
  @type associate_ipam_byoasn_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_policy_rule_meta_data() :: %{
        "MetaDataKey" => String.t() | atom(),
        "MetaDataValue" => String.t() | atom()
      }
      
  """
  @type transit_gateway_policy_rule_meta_data() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_volume_request() :: %{
        optional("AvailabilityZone") => String.t() | atom(),
        optional("AvailabilityZoneId") => String.t() | atom(),
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Encrypted") => boolean(),
        optional("Iops") => integer(),
        optional("KmsKeyId") => String.t() | atom(),
        optional("MultiAttachEnabled") => boolean(),
        optional("Operator") => operator_request(),
        optional("OutpostArn") => String.t() | atom(),
        optional("Size") => integer(),
        optional("SnapshotId") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("Throughput") => integer(),
        optional("VolumeInitializationRate") => integer(),
        optional("VolumeType") => list(any())
      }
      
  """
  @type create_volume_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_account_attributes_result() :: %{
        "AccountAttributes" => list(account_attribute())
      }
      
  """
  @type describe_account_attributes_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cidr_authorization_context() :: %{
        "Message" => String.t() | atom(),
        "Signature" => String.t() | atom()
      }
      
  """
  @type cidr_authorization_context() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_resource_discovery_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IpamResourceDiscoveryAssociationIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_ipam_resource_discovery_associations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      ipv6_pool() :: %{
        "Description" => String.t() | atom(),
        "PoolCidrBlocks" => list(pool_cidr_block()),
        "PoolId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type ipv6_pool() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_trust_provider_result() :: %{
        "VerifiedAccessTrustProvider" => verified_access_trust_provider()
      }
      
  """
  @type modify_verified_access_trust_provider_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reset_image_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("Attribute") => list(any()),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type reset_image_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_image_usage_report_request() :: %{
        optional("AccountIds") => list(String.t() | atom()),
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("ImageId") => String.t() | atom(),
        required("ResourceTypes") => list(image_usage_resource_type_request())
      }
      
  """
  @type create_image_usage_report_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_transit_gateway_route_table_propagation_request() :: %{
        optional("DryRun") => boolean(),
        optional("TransitGatewayAttachmentId") => String.t() | atom(),
        optional("TransitGatewayRouteTableAnnouncementId") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type enable_transit_gateway_route_table_propagation_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_verified_access_endpoint_result() :: %{
        "VerifiedAccessEndpoint" => verified_access_endpoint()
      }
      
  """
  @type modify_verified_access_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      start_network_insights_analysis_request() :: %{
        optional("AdditionalAccounts") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("FilterInArns") => list(String.t() | atom()),
        optional("FilterOutArns") => list(String.t() | atom()),
        optional("TagSpecifications") => list(tag_specification()),
        required("ClientToken") => String.t() | atom(),
        required("NetworkInsightsPathId") => String.t() | atom()
      }
      
  """
  @type start_network_insights_analysis_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      authorize_security_group_ingress_request() :: %{
        optional("CidrIp") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("FromPort") => integer(),
        optional("GroupId") => String.t() | atom(),
        optional("GroupName") => String.t() | atom(),
        optional("IpPermissions") => list(ip_permission()),
        optional("IpProtocol") => String.t() | atom(),
        optional("SourceSecurityGroupName") => String.t() | atom(),
        optional("SourceSecurityGroupOwnerId") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("ToPort") => integer()
      }
      
  """
  @type authorize_security_group_ingress_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_acl_result() :: %{
        "ClientToken" => String.t() | atom(),
        "NetworkAcl" => network_acl()
      }
      
  """
  @type create_network_acl_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipv6_pools_result() :: %{
        "Ipv6Pools" => list(ipv6_pool()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_ipv6_pools_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_network_insights_access_scope_content_request() :: %{
        optional("DryRun") => boolean(),
        required("NetworkInsightsAccessScopeId") => String.t() | atom()
      }
      
  """
  @type get_network_insights_access_scope_content_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_route_tables_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("RouteTableIds") => list(String.t() | atom())
      }
      
  """
  @type describe_route_tables_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_peering_attachment_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_peering_attachment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_type_offering() :: %{
        "InstanceType" => list(any()),
        "Location" => String.t() | atom(),
        "LocationType" => list(any())
      }
      
  """
  @type instance_type_offering() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_event_window_disassociation_request() :: %{
        "DedicatedHostIds" => list(String.t() | atom()),
        "InstanceIds" => list(String.t() | atom()),
        "InstanceTags" => list(tag())
      }
      
  """
  @type instance_event_window_disassociation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_route_installation_detail() :: %{
        "RouteInstallationStatus" => list(any()),
        "RouteInstallationStatusReason" => String.t() | atom(),
        "RouteTableId" => String.t() | atom()
      }
      
  """
  @type route_server_route_installation_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_route_table_virtual_interface_group_associations_result() :: %{
        "LocalGatewayRouteTableVirtualInterfaceGroupAssociations" => list(local_gateway_route_table_virtual_interface_group_association()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_route_table_virtual_interface_group_associations_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      network_interface_permission() :: %{
        "AwsAccountId" => String.t() | atom(),
        "AwsService" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "NetworkInterfacePermissionId" => String.t() | atom(),
        "Permission" => list(any()),
        "PermissionState" => network_interface_permission_state()
      }
      
  """
  @type network_interface_permission() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase1_d_h_group_numbers_request_list_value() :: %{
        "Value" => integer()
      }
      
  """
  @type phase1_d_h_group_numbers_request_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attach_classic_link_vpc_request() :: %{
        optional("DryRun") => boolean(),
        required("Groups") => list(String.t() | atom()),
        required("InstanceId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type attach_classic_link_vpc_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_route_table_announcement_result() :: %{
        "TransitGatewayRouteTableAnnouncement" => transit_gateway_route_table_announcement()
      }
      
  """
  @type delete_transit_gateway_route_table_announcement_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      instance_requirements() :: %{
        "AcceleratorCount" => accelerator_count(),
        "AcceleratorManufacturers" => list(list(any())()),
        "AcceleratorNames" => list(list(any())()),
        "AcceleratorTotalMemoryMiB" => accelerator_total_memory_mi_b(),
        "AcceleratorTypes" => list(list(any())()),
        "AllowedInstanceTypes" => list(String.t() | atom()),
        "BareMetal" => list(any()),
        "BaselineEbsBandwidthMbps" => baseline_ebs_bandwidth_mbps(),
        "BaselinePerformanceFactors" => baseline_performance_factors(),
        "BurstablePerformance" => list(any()),
        "CpuManufacturers" => list(list(any())()),
        "ExcludedInstanceTypes" => list(String.t() | atom()),
        "InstanceGenerations" => list(list(any())()),
        "LocalStorage" => list(any()),
        "LocalStorageTypes" => list(list(any())()),
        "MaxSpotPriceAsPercentageOfOptimalOnDemandPrice" => integer(),
        "MemoryGiBPerVCpu" => memory_gi_b_per_v_cpu(),
        "MemoryMiB" => memory_mi_b(),
        "NetworkBandwidthGbps" => network_bandwidth_gbps(),
        "NetworkInterfaceCount" => network_interface_count(),
        "OnDemandMaxPricePercentageOverLowestPrice" => integer(),
        "RequireHibernateSupport" => boolean(),
        "SpotMaxPricePercentageOverLowestPrice" => integer(),
        "TotalLocalStorageGB" => total_local_storage_g_b(),
        "VCpuCount" => v_cpu_count_range()
      }
      
  """
  @type instance_requirements() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_internet_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("InternetGatewayId") => String.t() | atom()
      }
      
  """
  @type delete_internet_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      assigned_private_ip_address() :: %{
        "PrivateIpAddress" => String.t() | atom()
      }
      
  """
  @type assigned_private_ip_address() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_data() :: %{
        "ActivityStatus" => list(any()),
        "ClientToken" => String.t() | atom(),
        "Context" => String.t() | atom(),
        "CreateTime" => non_neg_integer(),
        "Errors" => list(describe_fleet_error()),
        "ExcessCapacityTerminationPolicy" => list(any()),
        "FleetId" => String.t() | atom(),
        "FleetState" => list(any()),
        "FulfilledCapacity" => float(),
        "FulfilledOnDemandCapacity" => float(),
        "Instances" => list(describe_fleets_instances()),
        "LaunchTemplateConfigs" => list(fleet_launch_template_config()),
        "OnDemandOptions" => on_demand_options(),
        "ReplaceUnhealthyInstances" => boolean(),
        "SpotOptions" => spot_options(),
        "Tags" => list(tag()),
        "TargetCapacitySpecification" => target_capacity_specification(),
        "TerminateInstancesWithExpiration" => boolean(),
        "Type" => list(any()),
        "ValidFrom" => non_neg_integer(),
        "ValidUntil" => non_neg_integer()
      }
      
  """
  @type fleet_data() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      coip_cidr() :: %{
        "Cidr" => String.t() | atom(),
        "CoipPoolId" => String.t() | atom(),
        "LocalGatewayRouteTableId" => String.t() | atom()
      }
      
  """
  @type coip_cidr() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_allowed_images_settings_result() :: %{
        "ImageCriteria" => list(image_criterion()),
        "ManagedBy" => list(any()),
        "State" => String.t() | atom()
      }
      
  """
  @type get_allowed_images_settings_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_reserved_instances_listing_request() :: %{
        required("ClientToken") => String.t() | atom(),
        required("InstanceCount") => integer(),
        required("PriceSchedules") => list(price_schedule_specification()),
        required("ReservedInstancesId") => String.t() | atom()
      }
      
  """
  @type create_reserved_instances_listing_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      copy_snapshot_request() :: %{
        optional("CompletionDurationMinutes") => integer(),
        optional("Description") => String.t() | atom(),
        optional("DestinationAvailabilityZone") => String.t() | atom(),
        optional("DestinationOutpostArn") => String.t() | atom(),
        optional("DestinationRegion") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Encrypted") => boolean(),
        optional("KmsKeyId") => String.t() | atom(),
        optional("PresignedUrl") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("SourceRegion") => String.t() | atom(),
        required("SourceSnapshotId") => String.t() | atom()
      }
      
  """
  @type copy_snapshot_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_declarative_policies_reports_result() :: %{
        "NextToken" => String.t() | atom(),
        "Reports" => list(declarative_policies_report())
      }
      
  """
  @type describe_declarative_policies_reports_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_monitoring() :: %{
        "InstanceId" => String.t() | atom(),
        "Monitoring" => monitoring()
      }
      
  """
  @type instance_monitoring() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_multicast_domain_request() :: %{
        optional("DryRun") => boolean(),
        optional("Options") => create_transit_gateway_multicast_domain_request_options(),
        optional("TagSpecifications") => list(tag_specification()),
        required("TransitGatewayId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_multicast_domain_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      phase2_encryption_algorithms_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type phase2_encryption_algorithms_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      memory_info() :: %{
        "SizeInMiB" => float()
      }
      
  """
  @type memory_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_groups_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VerifiedAccessGroupIds") => list(String.t() | atom()),
        optional("VerifiedAccessInstanceId") => String.t() | atom()
      }
      
  """
  @type describe_verified_access_groups_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_ipam_resource_discovery_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("OperatingRegions") => list(add_ipam_operating_region()),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_ipam_resource_discovery_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_image_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type disable_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_spot_market_options() :: %{
        "BlockDurationMinutes" => integer(),
        "InstanceInterruptionBehavior" => list(any()),
        "MaxPrice" => String.t() | atom(),
        "SpotInstanceType" => list(any()),
        "ValidUntil" => non_neg_integer()
      }
      
  """
  @type launch_template_spot_market_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_encryption_control_exclusions() :: %{
        optional("EgressOnlyInternetGateway") => vpc_encryption_control_exclusion(),
        optional("InternetGateway") => vpc_encryption_control_exclusion(),
        optional("NatGateway") => vpc_encryption_control_exclusion(),
        optional("VirtualPrivateGateway") => vpc_encryption_control_exclusion(),
        optional("VpcPeering") => vpc_encryption_control_exclusion()
      }
      
  """
  @type vpc_encryption_control_exclusions() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      stale_security_group() :: %{
        "Description" => String.t() | atom(),
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "StaleIpPermissions" => list(stale_ip_permission()),
        "StaleIpPermissionsEgress" => list(stale_ip_permission()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type stale_security_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disk_image() :: %{
        "Description" => String.t() | atom(),
        "Image" => disk_image_detail(),
        "Volume" => volume_detail()
      }
      
  """
  @type disk_image() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_ipam_byoasn_result() :: %{
        "AsnAssociation" => asn_association()
      }
      
  """
  @type associate_ipam_byoasn_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_block_device_mapping() :: %{
        "DeviceName" => String.t() | atom(),
        "Ebs" => launch_template_ebs_block_device(),
        "NoDevice" => String.t() | atom(),
        "VirtualName" => String.t() | atom()
      }
      
  """
  @type launch_template_block_device_mapping() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_endpoint_request() :: %{
        optional("ApplicationDomain") => String.t() | atom(),
        optional("CidrOptions") => create_verified_access_endpoint_cidr_options(),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DomainCertificateArn") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EndpointDomainPrefix") => String.t() | atom(),
        optional("LoadBalancerOptions") => create_verified_access_endpoint_load_balancer_options(),
        optional("NetworkInterfaceOptions") => create_verified_access_endpoint_eni_options(),
        optional("PolicyDocument") => String.t() | atom(),
        optional("RdsOptions") => create_verified_access_endpoint_rds_options(),
        optional("SecurityGroupIds") => list(String.t() | atom()),
        optional("SseSpecification") => verified_access_sse_specification_request(),
        optional("TagSpecifications") => list(tag_specification()),
        required("AttachmentType") => list(any()),
        required("EndpointType") => list(any()),
        required("VerifiedAccessGroupId") => String.t() | atom()
      }
      
  """
  @type create_verified_access_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deprovision_public_ipv4_pool_cidr_request() :: %{
        optional("DryRun") => boolean(),
        required("Cidr") => String.t() | atom(),
        required("PoolId") => String.t() | atom()
      }
      
  """
  @type deprovision_public_ipv4_pool_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_network_performance_options() :: %{
        "BandwidthWeighting" => list(any())
      }
      
  """
  @type instance_network_performance_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      register_transit_gateway_multicast_group_sources_request() :: %{
        optional("DryRun") => boolean(),
        optional("GroupIpAddress") => String.t() | atom(),
        required("NetworkInterfaceIds") => list(String.t() | atom()),
        required("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type register_transit_gateway_multicast_group_sources_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      reset_ebs_default_kms_key_id_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type reset_ebs_default_kms_key_id_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fast_snapshot_restores_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_fast_snapshot_restores_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_block_extension_offerings_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("CapacityBlockExtensionDurationHours") => integer(),
        required("CapacityReservationId") => String.t() | atom()
      }
      
  """
  @type describe_capacity_block_extension_offerings_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      peering_tgw_info() :: %{
        "CoreNetworkId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "Region" => String.t() | atom(),
        "TransitGatewayId" => String.t() | atom()
      }
      
  """
  @type peering_tgw_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_traffic_mirror_filter_network_services_result() :: %{
        "TrafficMirrorFilter" => traffic_mirror_filter()
      }
      
  """
  @type modify_traffic_mirror_filter_network_services_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      ebs_status_details() :: %{
        "ImpairedSince" => non_neg_integer(),
        "Name" => list(any()),
        "Status" => list(any())
      }
      
  """
  @type ebs_status_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_launch_template_config_request() :: %{
        "LaunchTemplateSpecification" => fleet_launch_template_specification_request(),
        "Overrides" => list(fleet_launch_template_overrides_request())
      }
      
  """
  @type fleet_launch_template_config_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_vpc_cidr_block_result() :: %{
        "CidrBlockAssociation" => vpc_cidr_block_association(),
        "Ipv6CidrBlockAssociation" => vpc_ipv6_cidr_block_association(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type disassociate_vpc_cidr_block_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_image_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type enable_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_usage_resource_type_request() :: %{
        "ResourceType" => String.t() | atom(),
        "ResourceTypeOptions" => list(image_usage_resource_type_option_request())
      }
      
  """
  @type image_usage_resource_type_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_vpc_classic_link_dns_support_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type disable_vpc_classic_link_dns_support_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      target_group() :: %{
        "Arn" => String.t() | atom()
      }
      
  """
  @type target_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_block_public_access_options() :: %{
        "AwsAccountId" => String.t() | atom(),
        "AwsRegion" => String.t() | atom(),
        "ExclusionsAllowed" => list(any()),
        "InternetGatewayBlockMode" => list(any()),
        "LastUpdateTimestamp" => non_neg_integer(),
        "ManagedBy" => list(any()),
        "Reason" => String.t() | atom(),
        "State" => list(any())
      }
      
  """
  @type vpc_block_public_access_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_hibernation_options_request() :: %{
        "Configured" => boolean()
      }
      
  """
  @type launch_template_hibernation_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fpga_images_result() :: %{
        "FpgaImages" => list(fpga_image()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_fpga_images_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_virtual_interface_group_result() :: %{
        "LocalGatewayVirtualInterfaceGroup" => local_gateway_virtual_interface_group()
      }
      
  """
  @type create_local_gateway_virtual_interface_group_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_credit_specification_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("InstanceCreditSpecifications") => list(instance_credit_specification_request())
      }
      
  """
  @type modify_instance_credit_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_coip_cidr_request() :: %{
        optional("DryRun") => boolean(),
        required("Cidr") => String.t() | atom(),
        required("CoipPoolId") => String.t() | atom()
      }
      
  """
  @type delete_coip_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_instance_volume_detail_item() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "BytesConverted" => float(),
        "Description" => String.t() | atom(),
        "Image" => disk_image_description(),
        "Status" => String.t() | atom(),
        "StatusMessage" => String.t() | atom(),
        "Volume" => disk_image_volume_description()
      }
      
  """
  @type import_instance_volume_detail_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      authorize_client_vpn_ingress_request() :: %{
        optional("AccessGroupId") => String.t() | atom(),
        optional("AuthorizeAllGroups") => boolean(),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("ClientVpnEndpointId") => String.t() | atom(),
        required("TargetNetworkCidr") => String.t() | atom()
      }
      
  """
  @type authorize_client_vpn_ingress_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_managed_prefix_list_version_request() :: %{
        optional("DryRun") => boolean(),
        required("CurrentVersion") => float(),
        required("PrefixListId") => String.t() | atom(),
        required("PreviousVersion") => float()
      }
      
  """
  @type restore_managed_prefix_list_version_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_endpoint_load_balancer_options() :: %{
        "LoadBalancerArn" => String.t() | atom(),
        "Port" => integer(),
        "PortRanges" => list(verified_access_endpoint_port_range()),
        "Protocol" => list(any()),
        "SubnetIds" => list(String.t() | atom())
      }
      
  """
  @type verified_access_endpoint_load_balancer_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      analysis_security_group_rule() :: %{
        "Cidr" => String.t() | atom(),
        "Direction" => String.t() | atom(),
        "PortRange" => port_range(),
        "PrefixListId" => String.t() | atom(),
        "Protocol" => String.t() | atom(),
        "SecurityGroupId" => String.t() | atom()
      }
      
  """
  @type analysis_security_group_rule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_reserved_instances_offerings_result() :: %{
        "NextToken" => String.t() | atom(),
        "ReservedInstancesOfferings" => list(reserved_instances_offering())
      }
      
  """
  @type describe_reserved_instances_offerings_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ptr_update_status() :: %{
        "Reason" => String.t() | atom(),
        "Status" => String.t() | atom(),
        "Value" => String.t() | atom()
      }
      
  """
  @type ptr_update_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_services_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ServiceNames") => list(String.t() | atom()),
        optional("ServiceRegions") => list(String.t() | atom())
      }
      
  """
  @type describe_vpc_endpoint_services_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ebs_instance_block_device() :: %{
        "AssociatedResource" => String.t() | atom(),
        "AttachTime" => non_neg_integer(),
        "DeleteOnTermination" => boolean(),
        "Operator" => operator_response(),
        "Status" => list(any()),
        "VolumeId" => String.t() | atom(),
        "VolumeOwnerId" => String.t() | atom()
      }
      
  """
  @type ebs_instance_block_device() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_interface_permissions_result() :: %{
        "NetworkInterfacePermissions" => list(network_interface_permission()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_network_interface_permissions_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_mac_system_integrity_protection_modification_task_result() :: %{
        "MacModificationTask" => mac_modification_task()
      }
      
  """
  @type create_mac_system_integrity_protection_modification_task_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      start_instances_result() :: %{
        "StartingInstances" => list(instance_state_change())
      }
      
  """
  @type start_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      elastic_inference_accelerator_association() :: %{
        "ElasticInferenceAcceleratorArn" => String.t() | atom(),
        "ElasticInferenceAcceleratorAssociationId" => String.t() | atom(),
        "ElasticInferenceAcceleratorAssociationState" => String.t() | atom(),
        "ElasticInferenceAcceleratorAssociationTime" => non_neg_integer()
      }
      
  """
  @type elastic_inference_accelerator_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      blob_attribute_value() :: %{
        optional("Value") => binary()
      }
      
  """
  @type blob_attribute_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      allocate_ipam_pool_cidr_result() :: %{
        "IpamPoolAllocation" => ipam_pool_allocation()
      }
      
  """
  @type allocate_ipam_pool_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_managed_prefix_list_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Entries") => list(add_prefix_list_entry()),
        optional("TagSpecifications") => list(tag_specification()),
        required("AddressFamily") => String.t() | atom(),
        required("MaxEntries") => integer(),
        required("PrefixListName") => String.t() | atom()
      }
      
  """
  @type create_managed_prefix_list_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_fast_snapshot_restores_result() :: %{
        "Successful" => list(enable_fast_snapshot_restore_success_item()),
        "Unsuccessful" => list(enable_fast_snapshot_restore_error_item())
      }
      
  """
  @type enable_fast_snapshot_restores_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_peer() :: %{
        "BfdStatus" => route_server_bfd_status(),
        "BgpOptions" => route_server_bgp_options(),
        "BgpStatus" => route_server_bgp_status(),
        "EndpointEniAddress" => String.t() | atom(),
        "EndpointEniId" => String.t() | atom(),
        "FailureReason" => String.t() | atom(),
        "PeerAddress" => String.t() | atom(),
        "RouteServerEndpointId" => String.t() | atom(),
        "RouteServerId" => String.t() | atom(),
        "RouteServerPeerId" => String.t() | atom(),
        "State" => list(any()),
        "SubnetId" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type route_server_peer() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deregister_transit_gateway_multicast_group_members_request() :: %{
        optional("DryRun") => boolean(),
        optional("GroupIpAddress") => String.t() | atom(),
        optional("NetworkInterfaceIds") => list(String.t() | atom()),
        optional("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type deregister_transit_gateway_multicast_group_members_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      export_verified_access_instance_client_configuration_request() :: %{
        optional("DryRun") => boolean(),
        required("VerifiedAccessInstanceId") => String.t() | atom()
      }
      
  """
  @type export_verified_access_instance_client_configuration_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_fleet_error_item() :: %{
        "Error" => delete_fleet_error(),
        "FleetId" => String.t() | atom()
      }
      
  """
  @type delete_fleet_error_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      target_reservation_value() :: %{
        "ReservationValue" => reservation_value(),
        "TargetConfiguration" => target_configuration()
      }
      
  """
  @type target_reservation_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_scopes_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IpamScopeIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_ipam_scopes_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_fleet_monitoring() :: %{
        "Enabled" => boolean()
      }
      
  """
  @type spot_fleet_monitoring() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_authorization_rule_status() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type client_vpn_authorization_rule_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_outpost_lags_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("OutpostLagIds") => list(String.t() | atom())
      }
      
  """
  @type describe_outpost_lags_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      address_attribute() :: %{
        "AllocationId" => String.t() | atom(),
        "PtrRecord" => String.t() | atom(),
        "PtrRecordUpdate" => ptr_update_status(),
        "PublicIp" => String.t() | atom()
      }
      
  """
  @type address_attribute() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_capacity_reservation_specification_response() :: %{
        "CapacityReservationPreference" => list(any()),
        "CapacityReservationTarget" => capacity_reservation_target_response()
      }
      
  """
  @type launch_template_capacity_reservation_specification_response() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      subnet_cidr_reservation() :: %{
        "Cidr" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "ReservationType" => list(any()),
        "SubnetCidrReservationId" => String.t() | atom(),
        "SubnetId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type subnet_cidr_reservation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_event_window_association_request() :: %{
        "DedicatedHostIds" => list(String.t() | atom()),
        "InstanceIds" => list(String.t() | atom()),
        "InstanceTags" => list(tag())
      }
      
  """
  @type instance_event_window_association_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_interface_request() :: %{
        optional("DryRun") => boolean(),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type delete_network_interface_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_image_deregistration_protection_result() :: %{
        "Return" => String.t() | atom()
      }
      
  """
  @type enable_image_deregistration_protection_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      request_spot_fleet_response() :: %{
        "SpotFleetRequestId" => String.t() | atom()
      }
      
  """
  @type request_spot_fleet_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_iam_instance_profile_associations_request() :: %{
        optional("AssociationIds") => list(String.t() | atom()),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_iam_instance_profile_associations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      dns_options_specification() :: %{
        "DnsRecordIpType" => list(any()),
        "PrivateDnsOnlyForInboundResolverEndpoint" => boolean()
      }
      
  """
  @type dns_options_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_route_server_result() :: %{
        "RouteServer" => route_server()
      }
      
  """
  @type delete_route_server_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipv4_prefix_specification() :: %{
        "Ipv4Prefix" => String.t() | atom()
      }
      
  """
  @type ipv4_prefix_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_insights_access_scope_request() :: %{
        optional("DryRun") => boolean(),
        required("NetworkInsightsAccessScopeId") => String.t() | atom()
      }
      
  """
  @type delete_network_insights_access_scope_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_instance_event_window_result() :: %{
        "InstanceEventWindow" => instance_event_window()
      }
      
  """
  @type associate_instance_event_window_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_password_data_result() :: %{
        "InstanceId" => String.t() | atom(),
        "PasswordData" => String.t() | atom(),
        "Timestamp" => non_neg_integer()
      }
      
  """
  @type get_password_data_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipv6_pools_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("PoolIds") => list(String.t() | atom())
      }
      
  """
  @type describe_ipv6_pools_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_log_delivery_status() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type verified_access_log_delivery_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_insights_path_request() :: %{
        optional("Destination") => String.t() | atom(),
        optional("DestinationIp") => String.t() | atom(),
        optional("DestinationPort") => integer(),
        optional("DryRun") => boolean(),
        optional("FilterAtDestination") => path_request_filter(),
        optional("FilterAtSource") => path_request_filter(),
        optional("SourceIp") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("ClientToken") => String.t() | atom(),
        required("Protocol") => list(any()),
        required("Source") => String.t() | atom()
      }
      
  """
  @type create_network_insights_path_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_route_request() :: %{
        optional("DestinationCidrBlock") => String.t() | atom(),
        optional("DestinationIpv6CidrBlock") => String.t() | atom(),
        optional("DestinationPrefixListId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type delete_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_verified_access_group_result() :: %{
        "VerifiedAccessGroup" => verified_access_group()
      }
      
  """
  @type delete_verified_access_group_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_aggregate_id_format_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type describe_aggregate_id_format_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_address_transfer_request() :: %{
        optional("DryRun") => boolean(),
        required("AllocationId") => String.t() | atom(),
        required("TransferAccountId") => String.t() | atom()
      }
      
  """
  @type enable_address_transfer_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      bundle_task_error() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type bundle_task_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fleet_history_request() :: %{
        optional("DryRun") => boolean(),
        optional("EventType") => list(any()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("FleetId") => String.t() | atom(),
        required("StartTime") => non_neg_integer()
      }
      
  """
  @type describe_fleet_history_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      list_snapshots_in_recycle_bin_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("SnapshotIds") => list(String.t() | atom())
      }
      
  """
  @type list_snapshots_in_recycle_bin_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unsuccessful_instance_credit_specification_item() :: %{
        "Error" => unsuccessful_instance_credit_specification_item_error(),
        "InstanceId" => String.t() | atom()
      }
      
  """
  @type unsuccessful_instance_credit_specification_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      volume_status_action() :: %{
        "Code" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "EventId" => String.t() | atom(),
        "EventType" => String.t() | atom()
      }
      
  """
  @type volume_status_action() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_capacity_reservation_fleet_request() :: %{
        optional("AllocationStrategy") => String.t() | atom(),
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EndDate") => non_neg_integer(),
        optional("InstanceMatchCriteria") => list(any()),
        optional("TagSpecifications") => list(tag_specification()),
        optional("Tenancy") => list(any()),
        required("InstanceTypeSpecifications") => list(reservation_fleet_instance_specification()),
        required("TotalTargetCapacity") => integer()
      }
      
  """
  @type create_capacity_reservation_fleet_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_tag_specification() :: %{
        "ResourceType" => list(any()),
        "Tags" => list(tag())
      }
      
  """
  @type launch_template_tag_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_route_result() :: %{
        "Route" => transit_gateway_route()
      }
      
  """
  @type create_transit_gateway_route_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      coip_address_usage() :: %{
        "AllocationId" => String.t() | atom(),
        "AwsAccountId" => String.t() | atom(),
        "AwsService" => String.t() | atom(),
        "CoIp" => String.t() | atom()
      }
      
  """
  @type coip_address_usage() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_capacity_reservation_usage_result() :: %{
        "AvailableInstanceCount" => integer(),
        "CapacityReservationId" => String.t() | atom(),
        "InstanceType" => String.t() | atom(),
        "InstanceUsages" => list(instance_usage()),
        "NextToken" => String.t() | atom(),
        "State" => list(any()),
        "TotalInstanceCount" => integer()
      }
      
  """
  @type get_capacity_reservation_usage_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      declarative_policies_report() :: %{
        "EndTime" => non_neg_integer(),
        "ReportId" => String.t() | atom(),
        "S3Bucket" => String.t() | atom(),
        "S3Prefix" => String.t() | atom(),
        "StartTime" => non_neg_integer(),
        "Status" => list(any()),
        "Tags" => list(tag()),
        "TargetId" => String.t() | atom()
      }
      
  """
  @type declarative_policies_report() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_discovered_account() :: %{
        "AccountId" => String.t() | atom(),
        "DiscoveryRegion" => String.t() | atom(),
        "FailureReason" => ipam_discovery_failure_reason(),
        "LastAttemptedDiscoveryTime" => non_neg_integer(),
        "LastSuccessfulDiscoveryTime" => non_neg_integer(),
        "OrganizationalUnitId" => String.t() | atom()
      }
      
  """
  @type ipam_discovered_account() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_instance_result() :: %{
        "VerifiedAccessInstance" => verified_access_instance()
      }
      
  """
  @type create_verified_access_instance_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_datafeed_subscription_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type describe_spot_datafeed_subscription_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_endpoint_connection_notification_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("ServiceId") => String.t() | atom(),
        optional("VpcEndpointId") => String.t() | atom(),
        required("ConnectionEvents") => list(String.t() | atom()),
        required("ConnectionNotificationArn") => String.t() | atom()
      }
      
  """
  @type create_vpc_endpoint_connection_notification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_launch_template_data_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type get_launch_template_data_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_log_options() :: %{
        "CloudWatchLogs" => verified_access_log_cloud_watch_logs_destination_options(),
        "IncludeTrustContext" => boolean(),
        "KinesisDataFirehose" => verified_access_log_kinesis_data_firehose_destination_options(),
        "LogVersion" => String.t() | atom(),
        "S3" => verified_access_log_s3_destination_options()
      }
      
  """
  @type verified_access_log_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_mac_system_integrity_protection_modification_task_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("MacCredentials") => String.t() | atom(),
        optional("MacSystemIntegrityProtectionConfiguration") => mac_system_integrity_protection_configuration_request(),
        optional("TagSpecifications") => list(tag_specification()),
        required("InstanceId") => String.t() | atom(),
        required("MacSystemIntegrityProtectionStatus") => list(any())
      }
      
  """
  @type create_mac_system_integrity_protection_modification_task_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_ipam_pool_request() :: %{
        optional("AllocationDefaultNetmaskLength") => integer(),
        optional("AllocationMaxNetmaskLength") => integer(),
        optional("AllocationMinNetmaskLength") => integer(),
        optional("AllocationResourceTags") => list(request_ipam_resource_tag()),
        optional("AutoImport") => boolean(),
        optional("AwsService") => list(any()),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Locale") => String.t() | atom(),
        optional("PublicIpSource") => list(any()),
        optional("PubliclyAdvertisable") => boolean(),
        optional("SourceIpamPoolId") => String.t() | atom(),
        optional("SourceResource") => ipam_pool_source_resource_request(),
        optional("TagSpecifications") => list(tag_specification()),
        required("AddressFamily") => list(any()),
        required("IpamScopeId") => String.t() | atom()
      }
      
  """
  @type create_ipam_pool_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      prefix_list() :: %{
        "Cidrs" => list(String.t() | atom()),
        "PrefixListId" => String.t() | atom(),
        "PrefixListName" => String.t() | atom()
      }
      
  """
  @type prefix_list() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      through_resources_statement() :: %{
        "ResourceStatement" => resource_statement()
      }
      
  """
  @type through_resources_statement() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_coip_pool_result() :: %{
        "CoipPool" => coip_pool()
      }
      
  """
  @type delete_coip_pool_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      security_group_identifier() :: %{
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom()
      }
      
  """
  @type security_group_identifier() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_interface_attribute_request() :: %{
        optional("Attribute") => list(any()),
        optional("DryRun") => boolean(),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type describe_network_interface_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_iam_instance_profile_result() :: %{
        "IamInstanceProfileAssociation" => iam_instance_profile_association()
      }
      
  """
  @type disassociate_iam_instance_profile_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_ipam_resource_discovery_request() :: %{
        optional("DryRun") => boolean(),
        required("IpamResourceDiscoveryId") => String.t() | atom()
      }
      
  """
  @type delete_ipam_resource_discovery_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      subscription() :: %{
        "Destination" => String.t() | atom(),
        "Metric" => list(any()),
        "Period" => list(any()),
        "Source" => String.t() | atom(),
        "Statistic" => list(any())
      }
      
  """
  @type subscription() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_fleet_error() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type delete_fleet_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template() :: %{
        "CreateTime" => non_neg_integer(),
        "CreatedBy" => String.t() | atom(),
        "DefaultVersionNumber" => float(),
        "LatestVersionNumber" => float(),
        "LaunchTemplateId" => String.t() | atom(),
        "LaunchTemplateName" => String.t() | atom(),
        "Operator" => operator_response(),
        "Tags" => list(tag())
      }
      
  """
  @type launch_template() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_metadata_defaults_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_instance_metadata_defaults_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      import_instance_task_details() :: %{
        "Description" => String.t() | atom(),
        "InstanceId" => String.t() | atom(),
        "Platform" => list(any()),
        "Volumes" => list(import_instance_volume_detail_item())
      }
      
  """
  @type import_instance_task_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_customer_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("CustomerGatewayId") => String.t() | atom()
      }
      
  """
  @type delete_customer_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_trust_provider_oidc_options() :: %{
        "AuthorizationEndpoint" => String.t() | atom(),
        "ClientId" => String.t() | atom(),
        "ClientSecret" => String.t() | atom(),
        "Issuer" => String.t() | atom(),
        "Scope" => String.t() | atom(),
        "TokenEndpoint" => String.t() | atom(),
        "UserInfoEndpoint" => String.t() | atom()
      }
      
  """
  @type create_verified_access_trust_provider_oidc_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_interface_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("ConnectionTrackingSpecification") => connection_tracking_specification_request(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EnablePrimaryIpv6") => boolean(),
        optional("Groups") => list(String.t() | atom()),
        optional("InterfaceType") => list(any()),
        optional("Ipv4PrefixCount") => integer(),
        optional("Ipv4Prefixes") => list(ipv4_prefix_specification_request()),
        optional("Ipv6AddressCount") => integer(),
        optional("Ipv6Addresses") => list(instance_ipv6_address()),
        optional("Ipv6PrefixCount") => integer(),
        optional("Ipv6Prefixes") => list(ipv6_prefix_specification_request()),
        optional("Operator") => operator_request(),
        optional("PrivateIpAddress") => String.t() | atom(),
        optional("PrivateIpAddresses") => list(private_ip_address_specification()),
        optional("SecondaryPrivateIpAddressCount") => integer(),
        optional("TagSpecifications") => list(tag_specification()),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type create_network_interface_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fpga_images_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("FpgaImageIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("Owners") => list(String.t() | atom())
      }
      
  """
  @type describe_fpga_images_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_vpn_tunnel_replacement_status_result() :: %{
        "CustomerGatewayId" => String.t() | atom(),
        "MaintenanceDetails" => maintenance_details(),
        "TransitGatewayId" => String.t() | atom(),
        "VpnConnectionId" => String.t() | atom(),
        "VpnGatewayId" => String.t() | atom(),
        "VpnTunnelOutsideIpAddress" => String.t() | atom()
      }
      
  """
  @type get_vpn_tunnel_replacement_status_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_verified_access_instance_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("VerifiedAccessInstanceId") => String.t() | atom()
      }
      
  """
  @type delete_verified_access_instance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_server_propagation() :: %{
        "RouteServerId" => String.t() | atom(),
        "RouteTableId" => String.t() | atom(),
        "State" => list(any())
      }
      
  """
  @type route_server_propagation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_client_vpn_connections_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type describe_client_vpn_connections_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_block_offerings_request() :: %{
        optional("DryRun") => boolean(),
        optional("EndDateRange") => non_neg_integer(),
        optional("InstanceCount") => integer(),
        optional("InstanceType") => String.t() | atom(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("StartDateRange") => non_neg_integer(),
        optional("UltraserverCount") => integer(),
        optional("UltraserverType") => String.t() | atom(),
        required("CapacityDurationHours") => integer()
      }
      
  """
  @type describe_capacity_block_offerings_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_fpga_image_request() :: %{
        optional("DryRun") => boolean(),
        required("FpgaImageId") => String.t() | atom()
      }
      
  """
  @type delete_fpga_image_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      account_attribute() :: %{
        "AttributeName" => String.t() | atom(),
        "AttributeValues" => list(account_attribute_value())
      }
      
  """
  @type account_attribute() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      start_network_insights_analysis_result() :: %{
        "NetworkInsightsAnalysis" => network_insights_analysis()
      }
      
  """
  @type start_network_insights_analysis_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_route_server_peers_result() :: %{
        "NextToken" => String.t() | atom(),
        "RouteServerPeers" => list(route_server_peer())
      }
      
  """
  @type describe_route_server_peers_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_capacity_reservation() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "CapacityReservationId" => String.t() | atom(),
        "CreateDate" => non_neg_integer(),
        "EbsOptimized" => boolean(),
        "FulfilledCapacity" => float(),
        "InstancePlatform" => list(any()),
        "InstanceType" => list(any()),
        "Priority" => integer(),
        "TotalInstanceCount" => integer(),
        "Weight" => float()
      }
      
  """
  @type fleet_capacity_reservation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_placement_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_instance_placement_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_launch_template_versions_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("LaunchTemplateId") => String.t() | atom(),
        optional("LaunchTemplateName") => String.t() | atom(),
        optional("MaxResults") => integer(),
        optional("MaxVersion") => String.t() | atom(),
        optional("MinVersion") => String.t() | atom(),
        optional("NextToken") => String.t() | atom(),
        optional("ResolveAlias") => boolean(),
        optional("Versions") => list(String.t() | atom())
      }
      
  """
  @type describe_launch_template_versions_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fast_launch_images_success_item() :: %{
        "ImageId" => String.t() | atom(),
        "LaunchTemplate" => fast_launch_launch_template_specification_response(),
        "MaxParallelLaunches" => integer(),
        "OwnerId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "SnapshotConfiguration" => fast_launch_snapshot_configuration_response(),
        "State" => list(any()),
        "StateTransitionReason" => String.t() | atom(),
        "StateTransitionTime" => non_neg_integer()
      }
      
  """
  @type describe_fast_launch_images_success_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      revoke_security_group_egress_request() :: %{
        optional("CidrIp") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("FromPort") => integer(),
        optional("IpPermissions") => list(ip_permission()),
        optional("IpProtocol") => String.t() | atom(),
        optional("SecurityGroupRuleIds") => list(String.t() | atom()),
        optional("SourceSecurityGroupName") => String.t() | atom(),
        optional("SourceSecurityGroupOwnerId") => String.t() | atom(),
        optional("ToPort") => integer(),
        required("GroupId") => String.t() | atom()
      }
      
  """
  @type revoke_security_group_egress_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_aws_network_performance_metric_subscriptions_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_aws_network_performance_metric_subscriptions_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_reserved_instances_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        required("ReservedInstancesIds") => list(String.t() | atom()),
        required("TargetConfigurations") => list(reserved_instances_configuration())
      }
      
  """
  @type modify_reserved_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_ipv4_prefix() :: %{
        "Ipv4Prefix" => String.t() | atom()
      }
      
  """
  @type instance_ipv4_prefix() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_client_vpn_target_network_result() :: %{
        "AssociationId" => String.t() | atom(),
        "Status" => association_status()
      }
      
  """
  @type disassociate_client_vpn_target_network_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      start_instances_request() :: %{
        optional("AdditionalInfo") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("InstanceIds") => list(String.t() | atom())
      }
      
  """
  @type start_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_carrier_gateways_request() :: %{
        optional("CarrierGatewayIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_carrier_gateways_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_snapshots_result() :: %{
        "Snapshots" => list(snapshot_info())
      }
      
  """
  @type create_snapshots_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_associated_enclave_certificate_iam_roles_result() :: %{
        "AssociatedRoles" => list(associated_role())
      }
      
  """
  @type get_associated_enclave_certificate_iam_roles_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_replace_root_volume_task_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DeleteReplacedRootVolume") => boolean(),
        optional("DryRun") => boolean(),
        optional("ImageId") => String.t() | atom(),
        optional("SnapshotId") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("VolumeInitializationRate") => float(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type create_replace_root_volume_task_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpn_connection_options_request() :: %{
        optional("DryRun") => boolean(),
        optional("LocalIpv4NetworkCidr") => String.t() | atom(),
        optional("LocalIpv6NetworkCidr") => String.t() | atom(),
        optional("RemoteIpv4NetworkCidr") => String.t() | atom(),
        optional("RemoteIpv6NetworkCidr") => String.t() | atom(),
        required("VpnConnectionId") => String.t() | atom()
      }
      
  """
  @type modify_vpn_connection_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_pool_allocations_result() :: %{
        "IpamPoolAllocations" => list(ipam_pool_allocation()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_ipam_pool_allocations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_multicast_deregistered_group_sources() :: %{
        "DeregisteredNetworkInterfaceIds" => list(String.t() | atom()),
        "GroupIpAddress" => String.t() | atom(),
        "TransitGatewayMulticastDomainId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_multicast_deregistered_group_sources() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_instance_type_offerings_result() :: %{
        "InstanceTypeOfferings" => list(instance_type_offering()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_instance_type_offerings_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      on_demand_options_request() :: %{
        "AllocationStrategy" => list(any()),
        "CapacityReservationOptions" => capacity_reservation_options_request(),
        "MaxTotalPrice" => String.t() | atom(),
        "MinTargetCapacity" => integer(),
        "SingleAvailabilityZone" => boolean(),
        "SingleInstanceType" => boolean()
      }
      
  """
  @type on_demand_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_serial_console_access_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type disable_serial_console_access_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_route_server_endpoint_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("RouteServerId") => String.t() | atom(),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type create_route_server_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_fast_snapshot_restore_error_item() :: %{
        "FastSnapshotRestoreStateErrors" => list(enable_fast_snapshot_restore_state_error_item()),
        "SnapshotId" => String.t() | atom()
      }
      
  """
  @type enable_fast_snapshot_restore_error_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fpga_image_attribute() :: %{
        "Description" => String.t() | atom(),
        "FpgaImageId" => String.t() | atom(),
        "LoadPermissions" => list(load_permission()),
        "Name" => String.t() | atom(),
        "ProductCodes" => list(product_code())
      }
      
  """
  @type fpga_image_attribute() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      security_group_rule_update() :: %{
        "SecurityGroupRule" => security_group_rule_request(),
        "SecurityGroupRuleId" => String.t() | atom()
      }
      
  """
  @type security_group_rule_update() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instances_ipv6_address() :: %{
        "Ipv6Address" => String.t() | atom()
      }
      
  """
  @type scheduled_instances_ipv6_address() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_vpn_tunnel_replacement_status_request() :: %{
        optional("DryRun") => boolean(),
        required("VpnConnectionId") => String.t() | atom(),
        required("VpnTunnelOutsideIpAddress") => String.t() | atom()
      }
      
  """
  @type get_vpn_tunnel_replacement_status_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpn_tunnel_log_options_specification() :: %{
        "CloudWatchLogOptions" => cloud_watch_log_options_specification()
      }
      
  """
  @type vpn_tunnel_log_options_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_connect_endpoints_result() :: %{
        "InstanceConnectEndpoints" => list(ec2_instance_connect_endpoint()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_instance_connect_endpoints_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_launch_templates_result() :: %{
        "LaunchTemplates" => list(launch_template()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_launch_templates_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_managed_prefix_list_result() :: %{
        "PrefixList" => managed_prefix_list()
      }
      
  """
  @type modify_managed_prefix_list_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_prefix_list_reference_result() :: %{
        "TransitGatewayPrefixListReference" => transit_gateway_prefix_list_reference()
      }
      
  """
  @type delete_transit_gateway_prefix_list_reference_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancelled_spot_instance_request() :: %{
        "SpotInstanceRequestId" => String.t() | atom(),
        "State" => list(any())
      }
      
  """
  @type cancelled_spot_instance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipams_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IpamIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_ipams_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_route_table_request() :: %{
        optional("DryRun") => boolean(),
        optional("GatewayId") => String.t() | atom(),
        optional("PublicIpv4Pool") => String.t() | atom(),
        optional("SubnetId") => String.t() | atom(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type associate_route_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      directory_service_authentication() :: %{
        "DirectoryId" => String.t() | atom()
      }
      
  """
  @type directory_service_authentication() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      copy_image_result() :: %{
        "ImageId" => String.t() | atom()
      }
      
  """
  @type copy_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instances_result() :: %{
        "NextToken" => String.t() | atom(),
        "Reservations" => list(reservation())
      }
      
  """
  @type describe_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_connection_notifications_request() :: %{
        optional("ConnectionNotificationId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_vpc_endpoint_connection_notifications_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_ipam_resource_discovery_result() :: %{
        "IpamResourceDiscovery" => ipam_resource_discovery()
      }
      
  """
  @type delete_ipam_resource_discovery_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      moving_address_status() :: %{
        "MoveStatus" => list(any()),
        "PublicIp" => String.t() | atom()
      }
      
  """
  @type moving_address_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_elastic_gpus_request() :: %{
        optional("DryRun") => boolean(),
        optional("ElasticGpuIds") => list(String.t() | atom()),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_elastic_gpus_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      oidc_options() :: %{
        "AuthorizationEndpoint" => String.t() | atom(),
        "ClientId" => String.t() | atom(),
        "ClientSecret" => String.t() | atom(),
        "Issuer" => String.t() | atom(),
        "Scope" => String.t() | atom(),
        "TokenEndpoint" => String.t() | atom(),
        "UserInfoEndpoint" => String.t() | atom()
      }
      
  """
  @type oidc_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_virtual_interface_group_request() :: %{
        optional("DryRun") => boolean(),
        required("LocalGatewayVirtualInterfaceGroupId") => String.t() | atom()
      }
      
  """
  @type delete_local_gateway_virtual_interface_group_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_snapshots_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("OwnerIds") => list(String.t() | atom()),
        optional("RestorableByUserIds") => list(String.t() | atom()),
        optional("SnapshotIds") => list(String.t() | atom())
      }
      
  """
  @type describe_snapshots_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_fast_snapshot_restore_state_error() :: %{
        "Code" => String.t() | atom(),
        "Message" => String.t() | atom()
      }
      
  """
  @type disable_fast_snapshot_restore_state_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_iam_instance_profile_request() :: %{
        required("AssociationId") => String.t() | atom()
      }
      
  """
  @type disassociate_iam_instance_profile_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      dhcp_configuration() :: %{
        "Key" => String.t() | atom(),
        "Values" => list(attribute_value())
      }
      
  """
  @type dhcp_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      classic_load_balancers_config() :: %{
        "ClassicLoadBalancers" => list(classic_load_balancer())
      }
      
  """
  @type classic_load_balancers_config() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_bandwidth_gbps() :: %{
        "Max" => float(),
        "Min" => float()
      }
      
  """
  @type network_bandwidth_gbps() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ebs_optimized_info() :: %{
        "BaselineBandwidthInMbps" => integer(),
        "BaselineIops" => integer(),
        "BaselineThroughputInMBps" => float(),
        "MaximumBandwidthInMbps" => integer(),
        "MaximumIops" => integer(),
        "MaximumThroughputInMBps" => float()
      }
      
  """
  @type ebs_optimized_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_route_table_announcement_result() :: %{
        "TransitGatewayRouteTableAnnouncement" => transit_gateway_route_table_announcement()
      }
      
  """
  @type create_transit_gateway_route_table_announcement_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      withdraw_byoip_cidr_request() :: %{
        optional("DryRun") => boolean(),
        required("Cidr") => String.t() | atom()
      }
      
  """
  @type withdraw_byoip_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_multicast_domain_options() :: %{
        "AutoAcceptSharedAssociations" => list(any()),
        "Igmpv2Support" => list(any()),
        "StaticSourcesSupport" => list(any())
      }
      
  """
  @type transit_gateway_multicast_domain_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_propagation() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "State" => list(any()),
        "TransitGatewayAttachmentId" => String.t() | atom(),
        "TransitGatewayRouteTableAnnouncementId" => String.t() | atom(),
        "TransitGatewayRouteTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_propagation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_image_from_recycle_bin_request() :: %{
        optional("DryRun") => boolean(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type restore_image_from_recycle_bin_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_coip_cidr_result() :: %{
        "CoipCidr" => coip_cidr()
      }
      
  """
  @type delete_coip_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_host_reservation_offerings_result() :: %{
        "NextToken" => String.t() | atom(),
        "OfferingSet" => list(host_offering())
      }
      
  """
  @type describe_host_reservation_offerings_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_instance_market_options() :: %{
        "MarketType" => list(any()),
        "SpotOptions" => launch_template_spot_market_options()
      }
      
  """
  @type launch_template_instance_market_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      revoke_client_vpn_ingress_request() :: %{
        optional("AccessGroupId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("RevokeAllGroups") => boolean(),
        required("ClientVpnEndpointId") => String.t() | atom(),
        required("TargetNetworkCidr") => String.t() | atom()
      }
      
  """
  @type revoke_client_vpn_ingress_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      security_group_rule_request() :: %{
        "CidrIpv4" => String.t() | atom(),
        "CidrIpv6" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "FromPort" => integer(),
        "IpProtocol" => String.t() | atom(),
        "PrefixListId" => String.t() | atom(),
        "ReferencedGroupId" => String.t() | atom(),
        "ToPort" => integer()
      }
      
  """
  @type security_group_rule_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      host_instance() :: %{
        "InstanceId" => String.t() | atom(),
        "InstanceType" => String.t() | atom(),
        "OwnerId" => String.t() | atom()
      }
      
  """
  @type host_instance() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpn_gateways_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("VpnGatewayIds") => list(String.t() | atom())
      }
      
  """
  @type describe_vpn_gateways_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_instance_connect_endpoint_result() :: %{
        "InstanceConnectEndpoint" => ec2_instance_connect_endpoint()
      }
      
  """
  @type delete_instance_connect_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_export_image_tasks_request() :: %{
        optional("DryRun") => boolean(),
        optional("ExportImageTaskIds") => list(String.t() | atom()),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_export_image_tasks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_request() :: %{
        optional("AddOperatingRegions") => list(add_ipam_operating_region()),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EnablePrivateGua") => boolean(),
        optional("MeteredAccount") => list(any()),
        optional("RemoveOperatingRegions") => list(remove_ipam_operating_region()),
        optional("Tier") => list(any()),
        required("IpamId") => String.t() | atom()
      }
      
  """
  @type modify_ipam_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      local_gateway_route_table() :: %{
        "LocalGatewayId" => String.t() | atom(),
        "LocalGatewayRouteTableArn" => String.t() | atom(),
        "LocalGatewayRouteTableId" => String.t() | atom(),
        "Mode" => list(any()),
        "OutpostArn" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "State" => String.t() | atom(),
        "StateReason" => state_reason(),
        "Tags" => list(tag())
      }
      
  """
  @type local_gateway_route_table() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_snapshot_tier_status_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_snapshot_tier_status_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_reservation_fleets_result() :: %{
        "CapacityReservationFleets" => list(capacity_reservation_fleet()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_capacity_reservation_fleets_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_service_permissions_result() :: %{
        "AllowedPrincipals" => list(allowed_principal()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_vpc_endpoint_service_permissions_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_spot_placement_scores_result() :: %{
        "NextToken" => String.t() | atom(),
        "SpotPlacementScores" => list(spot_placement_score())
      }
      
  """
  @type get_spot_placement_scores_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_image_deprecation_request() :: %{
        optional("DryRun") => boolean(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type disable_image_deprecation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_traffic_mirror_filter_rules_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TrafficMirrorFilterId") => String.t() | atom(),
        optional("TrafficMirrorFilterRuleIds") => list(String.t() | atom())
      }
      
  """
  @type describe_traffic_mirror_filter_rules_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      inference_device_info() :: %{
        "Count" => integer(),
        "Manufacturer" => String.t() | atom(),
        "MemoryInfo" => inference_device_memory_info(),
        "Name" => String.t() | atom()
      }
      
  """
  @type inference_device_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attach_network_interface_result() :: %{
        "AttachmentId" => String.t() | atom(),
        "NetworkCardIndex" => integer()
      }
      
  """
  @type attach_network_interface_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_route_table_result() :: %{
        "AssociationId" => String.t() | atom(),
        "AssociationState" => route_table_association_state()
      }
      
  """
  @type associate_route_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_instance_event_window_result() :: %{
        "InstanceEventWindow" => instance_event_window()
      }
      
  """
  @type disassociate_instance_event_window_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_address_attribute_request() :: %{
        optional("DomainName") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("AllocationId") => String.t() | atom()
      }
      
  """
  @type modify_address_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_native_application_oidc_options() :: %{
        "AuthorizationEndpoint" => String.t() | atom(),
        "ClientId" => String.t() | atom(),
        "ClientSecret" => String.t() | atom(),
        "Issuer" => String.t() | atom(),
        "PublicSigningKeyEndpoint" => String.t() | atom(),
        "Scope" => String.t() | atom(),
        "TokenEndpoint" => String.t() | atom(),
        "UserInfoEndpoint" => String.t() | atom()
      }
      
  """
  @type modify_verified_access_native_application_oidc_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      import_snapshot_task() :: %{
        "Description" => String.t() | atom(),
        "ImportTaskId" => String.t() | atom(),
        "SnapshotTaskDetail" => snapshot_task_detail(),
        "Tags" => list(tag())
      }
      
  """
  @type import_snapshot_task() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_route_table_association_result() :: %{
        "AssociationState" => route_table_association_state(),
        "NewAssociationId" => String.t() | atom()
      }
      
  """
  @type replace_route_table_association_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_image_deprecation_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type disable_image_deprecation_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cpu_performance_factor_request() :: %{
        "References" => list(performance_factor_reference_request())
      }
      
  """
  @type cpu_performance_factor_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      availability_zone_message() :: %{
        "Message" => String.t() | atom()
      }
      
  """
  @type availability_zone_message() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_transit_gateway_multicast_domain_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("SubnetIds") => list(String.t() | atom()),
        optional("TransitGatewayAttachmentId") => String.t() | atom(),
        optional("TransitGatewayMulticastDomainId") => String.t() | atom()
      }
      
  """
  @type reject_transit_gateway_multicast_domain_associations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      metric_point() :: %{
        "EndDate" => non_neg_integer(),
        "StartDate" => non_neg_integer(),
        "Status" => String.t() | atom(),
        "Value" => float()
      }
      
  """
  @type metric_point() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_launch_template_versions_response_error_item() :: %{
        "LaunchTemplateId" => String.t() | atom(),
        "LaunchTemplateName" => String.t() | atom(),
        "ResponseError" => response_error(),
        "VersionNumber" => float()
      }
      
  """
  @type delete_launch_template_versions_response_error_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_verified_access_endpoint_targets_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("VerifiedAccessEndpointId") => String.t() | atom()
      }
      
  """
  @type get_verified_access_endpoint_targets_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      security_group_reference() :: %{
        "GroupId" => String.t() | atom(),
        "ReferencingVpcId" => String.t() | atom(),
        "TransitGatewayId" => String.t() | atom(),
        "VpcPeeringConnectionId" => String.t() | atom()
      }
      
  """
  @type security_group_reference() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_resource_cidrs_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IpamPoolId") => String.t() | atom(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ResourceId") => String.t() | atom(),
        optional("ResourceOwner") => String.t() | atom(),
        optional("ResourceTag") => request_ipam_resource_tag(),
        optional("ResourceType") => list(any()),
        required("IpamScopeId") => String.t() | atom()
      }
      
  """
  @type get_ipam_resource_cidrs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_virtual_interface_request() :: %{
        optional("DryRun") => boolean(),
        optional("PeerBgpAsn") => integer(),
        optional("PeerBgpAsnExtended") => float(),
        optional("TagSpecifications") => list(tag_specification()),
        required("LocalAddress") => String.t() | atom(),
        required("LocalGatewayVirtualInterfaceGroupId") => String.t() | atom(),
        required("OutpostLagId") => String.t() | atom(),
        required("PeerAddress") => String.t() | atom(),
        required("Vlan") => integer()
      }
      
  """
  @type create_local_gateway_virtual_interface_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      volume_modification() :: %{
        "EndTime" => non_neg_integer(),
        "ModificationState" => list(any()),
        "OriginalIops" => integer(),
        "OriginalMultiAttachEnabled" => boolean(),
        "OriginalSize" => integer(),
        "OriginalThroughput" => integer(),
        "OriginalVolumeType" => list(any()),
        "Progress" => float(),
        "StartTime" => non_neg_integer(),
        "StatusMessage" => String.t() | atom(),
        "TargetIops" => integer(),
        "TargetMultiAttachEnabled" => boolean(),
        "TargetSize" => integer(),
        "TargetThroughput" => integer(),
        "TargetVolumeType" => list(any()),
        "VolumeId" => String.t() | atom()
      }
      
  """
  @type volume_modification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_subnets_result() :: %{
        "NextToken" => String.t() | atom(),
        "Subnets" => list(subnet())
      }
      
  """
  @type describe_subnets_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_peering_attachment_result() :: %{
        "TransitGatewayPeeringAttachment" => transit_gateway_peering_attachment()
      }
      
  """
  @type create_transit_gateway_peering_attachment_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_prefix_lists_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("PrefixListIds") => list(String.t() | atom())
      }
      
  """
  @type describe_prefix_lists_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_connect_endpoint_request() :: %{
        optional("DryRun") => boolean(),
        optional("IpAddressType") => list(any()),
        optional("PreserveClientIp") => boolean(),
        optional("SecurityGroupIds") => list(String.t() | atom()),
        required("InstanceConnectEndpointId") => String.t() | atom()
      }
      
  """
  @type modify_instance_connect_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_certificate_revocation_list_status() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type client_certificate_revocation_list_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_topology_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("GroupNames") => list(String.t() | atom()),
        optional("InstanceIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_instance_topology_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_vpn_tunnel_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type replace_vpn_tunnel_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ebs_default_kms_key_id_request() :: %{
        optional("DryRun") => boolean(),
        required("KmsKeyId") => String.t() | atom()
      }
      
  """
  @type modify_ebs_default_kms_key_id_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reservation_fleet_instance_specification() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "EbsOptimized" => boolean(),
        "InstancePlatform" => list(any()),
        "InstanceType" => list(any()),
        "Priority" => integer(),
        "Weight" => float()
      }
      
  """
  @type reservation_fleet_instance_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      target_configuration() :: %{
        "InstanceCount" => integer(),
        "OfferingId" => String.t() | atom()
      }
      
  """
  @type target_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      public_ipv4_pool() :: %{
        "Description" => String.t() | atom(),
        "NetworkBorderGroup" => String.t() | atom(),
        "PoolAddressRanges" => list(public_ipv4_pool_range()),
        "PoolId" => String.t() | atom(),
        "Tags" => list(tag()),
        "TotalAddressCount" => integer(),
        "TotalAvailableAddressCount" => integer()
      }
      
  """
  @type public_ipv4_pool() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      additional_detail() :: %{
        "AdditionalDetailType" => String.t() | atom(),
        "Component" => analysis_component(),
        "LoadBalancers" => list(analysis_component()),
        "RuleGroupRuleOptionsPairs" => list(rule_group_rule_options_pair()),
        "RuleGroupTypePairs" => list(rule_group_type_pair()),
        "RuleOptions" => list(rule_option()),
        "ServiceName" => String.t() | atom(),
        "VpcEndpointService" => analysis_component()
      }
      
  """
  @type additional_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_traffic_mirror_filter_request() :: %{
        optional("DryRun") => boolean(),
        required("TrafficMirrorFilterId") => String.t() | atom()
      }
      
  """
  @type delete_traffic_mirror_filter_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_network_insights_access_scope_analysis_findings_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("NetworkInsightsAccessScopeAnalysisId") => String.t() | atom()
      }
      
  """
  @type get_network_insights_access_scope_analysis_findings_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      phase2_d_h_group_numbers_request_list_value() :: %{
        "Value" => integer()
      }
      
  """
  @type phase2_d_h_group_numbers_request_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_specification() :: %{
        "LaunchTemplateId" => String.t() | atom(),
        "LaunchTemplateName" => String.t() | atom(),
        "Version" => String.t() | atom()
      }
      
  """
  @type launch_template_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_event_windows_result() :: %{
        "InstanceEventWindows" => list(instance_event_window()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_instance_event_windows_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      move_address_to_vpc_request() :: %{
        optional("DryRun") => boolean(),
        required("PublicIp") => String.t() | atom()
      }
      
  """
  @type move_address_to_vpc_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_public_address_security_group() :: %{
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom()
      }
      
  """
  @type ipam_public_address_security_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpn_tunnel_certificate_request() :: %{
        optional("DryRun") => boolean(),
        required("VpnConnectionId") => String.t() | atom(),
        required("VpnTunnelOutsideIpAddress") => String.t() | atom()
      }
      
  """
  @type modify_vpn_tunnel_certificate_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_allowed_images_settings_result() :: %{
        "AllowedImagesSettingsState" => list(any())
      }
      
  """
  @type disable_allowed_images_settings_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_vpc_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_customer_gateways_request() :: %{
        optional("CustomerGatewayIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter())
      }
      
  """
  @type describe_customer_gateways_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      apply_security_groups_to_client_vpn_target_network_result() :: %{
        "SecurityGroupIds" => list(String.t() | atom())
      }
      
  """
  @type apply_security_groups_to_client_vpn_target_network_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      prefix_list_entry() :: %{
        "Cidr" => String.t() | atom(),
        "Description" => String.t() | atom()
      }
      
  """
  @type prefix_list_entry() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_aws_network_performance_metric_subscriptions_result() :: %{
        "NextToken" => String.t() | atom(),
        "Subscriptions" => list(subscription())
      }
      
  """
  @type describe_aws_network_performance_metric_subscriptions_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      vpn_connection_options() :: %{
        "EnableAcceleration" => boolean(),
        "LocalIpv4NetworkCidr" => String.t() | atom(),
        "LocalIpv6NetworkCidr" => String.t() | atom(),
        "OutsideIpAddressType" => String.t() | atom(),
        "RemoteIpv4NetworkCidr" => String.t() | atom(),
        "RemoteIpv6NetworkCidr" => String.t() | atom(),
        "StaticRoutesOnly" => boolean(),
        "TransportTransitGatewayAttachmentId" => String.t() | atom(),
        "TunnelInsideIpVersion" => list(any()),
        "TunnelOptions" => list(tunnel_option())
      }
      
  """
  @type vpn_connection_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fleets_result() :: %{
        "Fleets" => list(fleet_data()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_fleets_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_endpoint_policy_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("PolicyDocument") => String.t() | atom(),
        optional("PolicyEnabled") => boolean(),
        optional("SseSpecification") => verified_access_sse_specification_request(),
        required("VerifiedAccessEndpointId") => String.t() | atom()
      }
      
  """
  @type modify_verified_access_endpoint_policy_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_export_image_tasks_result() :: %{
        "ExportImageTasks" => list(export_image_task()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_export_image_tasks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_local_gateway_route_table_result() :: %{
        "LocalGatewayRouteTable" => local_gateway_route_table()
      }
      
  """
  @type delete_local_gateway_route_table_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_image_launch_permission_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type cancel_image_launch_permission_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_volume_status_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VolumeIds") => list(String.t() | atom())
      }
      
  """
  @type describe_volume_status_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      connection_tracking_configuration() :: %{
        "TcpEstablishedTimeout" => integer(),
        "UdpStreamTimeout" => integer(),
        "UdpTimeout" => integer()
      }
      
  """
  @type connection_tracking_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_group_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("PolicyDocument") => String.t() | atom(),
        optional("SseSpecification") => verified_access_sse_specification_request(),
        optional("TagSpecifications") => list(tag_specification()),
        required("VerifiedAccessInstanceId") => String.t() | atom()
      }
      
  """
  @type create_verified_access_group_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_insights_analysis() :: %{
        "AdditionalAccounts" => list(String.t() | atom()),
        "AlternatePathHints" => list(alternate_path_hint()),
        "Explanations" => list(explanation()),
        "FilterInArns" => list(String.t() | atom()),
        "FilterOutArns" => list(String.t() | atom()),
        "ForwardPathComponents" => list(path_component()),
        "NetworkInsightsAnalysisArn" => String.t() | atom(),
        "NetworkInsightsAnalysisId" => String.t() | atom(),
        "NetworkInsightsPathId" => String.t() | atom(),
        "NetworkPathFound" => boolean(),
        "ReturnPathComponents" => list(path_component()),
        "StartDate" => non_neg_integer(),
        "Status" => list(any()),
        "StatusMessage" => String.t() | atom(),
        "SuggestedAccounts" => list(String.t() | atom()),
        "Tags" => list(tag()),
        "WarningMessage" => String.t() | atom()
      }
      
  """
  @type network_insights_analysis() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_block_public_access_exclusion_result() :: %{
        "VpcBlockPublicAccessExclusion" => vpc_block_public_access_exclusion()
      }
      
  """
  @type create_vpc_block_public_access_exclusion_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_import_snapshot_tasks_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("ImportTaskIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_import_snapshot_tasks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_route_server_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("PersistRoutes") => list(any()),
        optional("PersistRoutesDuration") => float(),
        optional("SnsNotificationsEnabled") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("AmazonSideAsn") => float()
      }
      
  """
  @type create_route_server_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      prefix_list_association() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceOwner" => String.t() | atom()
      }
      
  """
  @type prefix_list_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      release_hosts_request() :: %{
        required("HostIds") => list(String.t() | atom())
      }
      
  """
  @type release_hosts_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_allowed_images_settings_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type get_allowed_images_settings_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_sse_specification_response() :: %{
        "CustomerManagedKeyEnabled" => boolean(),
        "KmsKeyArn" => String.t() | atom()
      }
      
  """
  @type verified_access_sse_specification_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      destination_options_request() :: %{
        "FileFormat" => list(any()),
        "HiveCompatiblePartitions" => boolean(),
        "PerHourPartition" => boolean()
      }
      
  """
  @type destination_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_volumes_result() :: %{
        "NextToken" => String.t() | atom(),
        "Volumes" => list(volume())
      }
      
  """
  @type describe_volumes_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      memory_mi_b_request() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type memory_mi_b_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_interface_count_request() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type network_interface_count_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_flow_logs_integration_template_result() :: %{
        "Result" => String.t() | atom()
      }
      
  """
  @type get_flow_logs_integration_template_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_tags_result() :: %{
        "NextToken" => String.t() | atom(),
        "Tags" => list(tag_description())
      }
      
  """
  @type describe_tags_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_status() :: %{
        "AttachedEbsStatus" => ebs_status_summary(),
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "Events" => list(instance_status_event()),
        "InstanceId" => String.t() | atom(),
        "InstanceState" => instance_state(),
        "InstanceStatus" => instance_status_summary(),
        "Operator" => operator_response(),
        "OutpostArn" => String.t() | atom(),
        "SystemStatus" => instance_status_summary()
      }
      
  """
  @type instance_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instances_placement() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "GroupName" => String.t() | atom()
      }
      
  """
  @type scheduled_instances_placement() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      i_k_e_versions_list_value() :: %{
        "Value" => String.t() | atom()
      }
      
  """
  @type i_k_e_versions_list_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_route_tables_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TransitGatewayRouteTableIds") => list(String.t() | atom())
      }
      
  """
  @type describe_transit_gateway_route_tables_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      principal_id_format() :: %{
        "Arn" => String.t() | atom(),
        "Statuses" => list(id_format())
      }
      
  """
  @type principal_id_format() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      dns_entry() :: %{
        "DnsName" => String.t() | atom(),
        "HostedZoneId" => String.t() | atom()
      }
      
  """
  @type dns_entry() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_resource_cidrs_result() :: %{
        "IpamResourceCidrs" => list(ipam_resource_cidr()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_ipam_resource_cidrs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_fast_launch_request() :: %{
        optional("DryRun") => boolean(),
        optional("LaunchTemplate") => fast_launch_launch_template_specification_request(),
        optional("MaxParallelLaunches") => integer(),
        optional("ResourceType") => String.t() | atom(),
        optional("SnapshotConfiguration") => fast_launch_snapshot_configuration_request(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type enable_fast_launch_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      through_resources_statement_request() :: %{
        "ResourceStatement" => resource_statement_request()
      }
      
  """
  @type through_resources_statement_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_transit_gateway_vpc_attachment_request() :: %{
        optional("AddSubnetIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Options") => modify_transit_gateway_vpc_attachment_request_options(),
        optional("RemoveSubnetIds") => list(String.t() | atom()),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type modify_transit_gateway_vpc_attachment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      total_local_storage_g_b() :: %{
        "Max" => float(),
        "Min" => float()
      }
      
  """
  @type total_local_storage_g_b() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_capacity_reservation_fleets_request() :: %{
        optional("DryRun") => boolean(),
        required("CapacityReservationFleetIds") => list(String.t() | atom())
      }
      
  """
  @type cancel_capacity_reservation_fleets_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fpga_device_memory_info() :: %{
        "SizeInMiB" => integer()
      }
      
  """
  @type fpga_device_memory_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_vpc_endpoint_connections_request() :: %{
        optional("DryRun") => boolean(),
        required("ServiceId") => String.t() | atom(),
        required("VpcEndpointIds") => list(String.t() | atom())
      }
      
  """
  @type accept_vpc_endpoint_connections_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_aggregate_id_format_result() :: %{
        "Statuses" => list(id_format()),
        "UseLongIdsAggregated" => boolean()
      }
      
  """
  @type describe_aggregate_id_format_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_launch_template_request() :: %{
        optional("DryRun") => boolean(),
        optional("LaunchTemplateId") => String.t() | atom(),
        optional("LaunchTemplateName") => String.t() | atom()
      }
      
  """
  @type delete_launch_template_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      alternate_path_hint() :: %{
        "ComponentArn" => String.t() | atom(),
        "ComponentId" => String.t() | atom()
      }
      
  """
  @type alternate_path_hint() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_regions_result() :: %{
        "Regions" => list(region())
      }
      
  """
  @type describe_regions_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_organizational_unit_exclusion() :: %{
        "OrganizationsEntityPath" => String.t() | atom()
      }
      
  """
  @type ipam_organizational_unit_exclusion() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_vpc_attachment_options() :: %{
        "ApplianceModeSupport" => list(any()),
        "DnsSupport" => list(any()),
        "Ipv6Support" => list(any()),
        "SecurityGroupReferencingSupport" => list(any())
      }
      
  """
  @type transit_gateway_vpc_attachment_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      terminate_connection_status() :: %{
        "ConnectionId" => String.t() | atom(),
        "CurrentStatus" => client_vpn_connection_status(),
        "PreviousStatus" => client_vpn_connection_status()
      }
      
  """
  @type terminate_connection_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_policy_table_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayPolicyTableId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_policy_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_address_transfer_request() :: %{
        optional("DryRun") => boolean(),
        required("AllocationId") => String.t() | atom()
      }
      
  """
  @type disable_address_transfer_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_host_reservations_request() :: %{
        optional("Filter") => list(filter()),
        optional("HostReservationIdSet") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_host_reservations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_transit_gateway_policy_table_request() :: %{
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        required("TransitGatewayId") => String.t() | atom()
      }
      
  """
  @type create_transit_gateway_policy_table_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_traffic_mirror_filters_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("TrafficMirrorFilterIds") => list(String.t() | atom())
      }
      
  """
  @type describe_traffic_mirror_filters_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_tags_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_tags_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      referenced_security_group() :: %{
        "GroupId" => String.t() | atom(),
        "PeeringStatus" => String.t() | atom(),
        "UserId" => String.t() | atom(),
        "VpcId" => String.t() | atom(),
        "VpcPeeringConnectionId" => String.t() | atom()
      }
      
  """
  @type referenced_security_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      regional_summary() :: %{
        "NumberOfMatchedAccounts" => integer(),
        "NumberOfUnmatchedAccounts" => integer(),
        "RegionName" => String.t() | atom()
      }
      
  """
  @type regional_summary() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      revoke_security_group_ingress_result() :: %{
        "Return" => boolean(),
        "RevokedSecurityGroupRules" => list(revoked_security_group_rule()),
        "UnknownIpPermissions" => list(ip_permission())
      }
      
  """
  @type revoke_security_group_ingress_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_launch_template_overrides_request() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "BlockDeviceMappings" => list(fleet_block_device_mapping_request()),
        "ImageId" => String.t() | atom(),
        "InstanceRequirements" => instance_requirements_request(),
        "InstanceType" => list(any()),
        "MaxPrice" => String.t() | atom(),
        "Placement" => placement(),
        "Priority" => float(),
        "SubnetId" => String.t() | atom(),
        "WeightedCapacity" => float()
      }
      
  """
  @type fleet_launch_template_overrides_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_route_request() :: %{
        optional("CarrierGatewayId") => String.t() | atom(),
        optional("CoreNetworkArn") => String.t() | atom(),
        optional("DestinationCidrBlock") => String.t() | atom(),
        optional("DestinationIpv6CidrBlock") => String.t() | atom(),
        optional("DestinationPrefixListId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EgressOnlyInternetGatewayId") => String.t() | atom(),
        optional("GatewayId") => String.t() | atom(),
        optional("InstanceId") => String.t() | atom(),
        optional("LocalGatewayId") => String.t() | atom(),
        optional("NatGatewayId") => String.t() | atom(),
        optional("NetworkInterfaceId") => String.t() | atom(),
        optional("OdbNetworkArn") => String.t() | atom(),
        optional("TransitGatewayId") => String.t() | atom(),
        optional("VpcEndpointId") => String.t() | atom(),
        optional("VpcPeeringConnectionId") => String.t() | atom(),
        required("RouteTableId") => String.t() | atom()
      }
      
  """
  @type create_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      total_local_storage_g_b_request() :: %{
        "Max" => float(),
        "Min" => float()
      }
      
  """
  @type total_local_storage_g_b_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_spot_maintenance_strategies_request() :: %{
        "CapacityRebalance" => fleet_spot_capacity_rebalance_request()
      }
      
  """
  @type fleet_spot_maintenance_strategies_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_security_group_vpc_result() :: %{
        "State" => list(any())
      }
      
  """
  @type associate_security_group_vpc_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_client_vpn_target_network_result() :: %{
        "AssociationId" => String.t() | atom(),
        "Status" => association_status()
      }
      
  """
  @type associate_client_vpn_target_network_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipam_pool_source_resource_request() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceOwner" => String.t() | atom(),
        "ResourceRegion" => String.t() | atom(),
        "ResourceType" => list(any())
      }
      
  """
  @type ipam_pool_source_resource_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_host_reservation_purchase_preview_request() :: %{
        required("HostIdSet") => list(String.t() | atom()),
        required("OfferingId") => String.t() | atom()
      }
      
  """
  @type get_host_reservation_purchase_preview_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_elastic_gpus_result() :: %{
        "ElasticGpuSet" => list(elastic_gpus()),
        "MaxResults" => integer(),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_elastic_gpus_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_blocks_result() :: %{
        "CapacityBlocks" => list(capacity_block()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_capacity_blocks_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_endpoint_load_balancer_options() :: %{
        "LoadBalancerArn" => String.t() | atom(),
        "Port" => integer(),
        "PortRanges" => list(create_verified_access_endpoint_port_range()),
        "Protocol" => list(any()),
        "SubnetIds" => list(String.t() | atom())
      }
      
  """
  @type create_verified_access_endpoint_load_balancer_options() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      cancel_export_task_request() :: %{
        required("ExportTaskId") => String.t() | atom()
      }
      
  """
  @type cancel_export_task_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_maintenance_options_request() :: %{
        "AutoRecovery" => list(any())
      }
      
  """
  @type instance_maintenance_options_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_attachment_association() :: %{
        "State" => list(any()),
        "TransitGatewayRouteTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_attachment_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      request_spot_instances_result() :: %{
        "SpotInstanceRequests" => list(spot_instance_request())
      }
      
  """
  @type request_spot_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_dhcp_options_result() :: %{
        "DhcpOptions" => dhcp_options()
      }
      
  """
  @type create_dhcp_options_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_ipam_byoasn_result() :: %{
        "AsnAssociation" => asn_association()
      }
      
  """
  @type disassociate_ipam_byoasn_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      neuron_device_core_info() :: %{
        "Count" => integer(),
        "Version" => integer()
      }
      
  """
  @type neuron_device_core_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_capacity_block_result() :: %{
        "CapacityBlocks" => list(capacity_block()),
        "CapacityReservation" => capacity_reservation()
      }
      
  """
  @type purchase_capacity_block_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_request_options() :: %{
        "AmazonSideAsn" => float(),
        "AutoAcceptSharedAttachments" => list(any()),
        "DefaultRouteTableAssociation" => list(any()),
        "DefaultRouteTablePropagation" => list(any()),
        "DnsSupport" => list(any()),
        "MulticastSupport" => list(any()),
        "SecurityGroupReferencingSupport" => list(any()),
        "TransitGatewayCidrBlocks" => list(String.t() | atom()),
        "VpnEcmpSupport" => list(any())
      }
      
  """
  @type transit_gateway_request_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_connect_endpoint_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type modify_instance_connect_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_connection() :: %{
        "ClientIp" => String.t() | atom(),
        "ClientIpv6Address" => String.t() | atom(),
        "ClientVpnEndpointId" => String.t() | atom(),
        "CommonName" => String.t() | atom(),
        "ConnectionEndTime" => String.t() | atom(),
        "ConnectionEstablishedTime" => String.t() | atom(),
        "ConnectionId" => String.t() | atom(),
        "EgressBytes" => String.t() | atom(),
        "EgressPackets" => String.t() | atom(),
        "IngressBytes" => String.t() | atom(),
        "IngressPackets" => String.t() | atom(),
        "PostureComplianceStatuses" => list(String.t() | atom()),
        "Status" => client_vpn_connection_status(),
        "Timestamp" => String.t() | atom(),
        "Username" => String.t() | atom()
      }
      
  """
  @type client_vpn_connection() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      store_image_task_result() :: %{
        "AmiId" => String.t() | atom(),
        "Bucket" => String.t() | atom(),
        "ProgressPercentage" => integer(),
        "S3objectKey" => String.t() | atom(),
        "StoreTaskFailureReason" => String.t() | atom(),
        "StoreTaskState" => String.t() | atom(),
        "TaskStartTime" => non_neg_integer()
      }
      
  """
  @type store_image_task_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_service_configurations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("ServiceIds") => list(String.t() | atom())
      }
      
  """
  @type describe_vpc_endpoint_service_configurations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      deregister_transit_gateway_multicast_group_sources_result() :: %{
        "DeregisteredMulticastGroupSources" => transit_gateway_multicast_deregistered_group_sources()
      }
      
  """
  @type deregister_transit_gateway_multicast_group_sources_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      get_spot_placement_scores_request() :: %{
        optional("DryRun") => boolean(),
        optional("InstanceRequirementsWithMetadata") => instance_requirements_with_metadata_request(),
        optional("InstanceTypes") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("RegionNames") => list(String.t() | atom()),
        optional("SingleAvailabilityZone") => boolean(),
        optional("TargetCapacityUnitType") => list(any()),
        required("TargetCapacity") => integer()
      }
      
  """
  @type get_spot_placement_scores_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_import_image_tasks_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("ImportTaskIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_import_image_tasks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_client_vpn_routes_result() :: %{
        "NextToken" => String.t() | atom(),
        "Routes" => list(client_vpn_route())
      }
      
  """
  @type describe_client_vpn_routes_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      pricing_detail() :: %{
        "Count" => integer(),
        "Price" => float()
      }
      
  """
  @type pricing_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      packet_header_statement_request() :: %{
        "DestinationAddresses" => list(String.t() | atom()),
        "DestinationPorts" => list(String.t() | atom()),
        "DestinationPrefixLists" => list(String.t() | atom()),
        "Protocols" => list(list(any())()),
        "SourceAddresses" => list(String.t() | atom()),
        "SourcePorts" => list(String.t() | atom()),
        "SourcePrefixLists" => list(String.t() | atom())
      }
      
  """
  @type packet_header_statement_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_default_credit_specification_request() :: %{
        optional("DryRun") => boolean(),
        required("CpuCredits") => String.t() | atom(),
        required("InstanceFamily") => list(any())
      }
      
  """
  @type modify_default_credit_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      history_record() :: %{
        "EventInformation" => event_information(),
        "EventType" => list(any()),
        "Timestamp" => non_neg_integer()
      }
      
  """
  @type history_record() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_peering_connection() :: %{
        "AccepterVpcInfo" => vpc_peering_connection_vpc_info(),
        "ExpirationTime" => non_neg_integer(),
        "RequesterVpcInfo" => vpc_peering_connection_vpc_info(),
        "Status" => vpc_peering_connection_state_reason(),
        "Tags" => list(tag()),
        "VpcPeeringConnectionId" => String.t() | atom()
      }
      
  """
  @type vpc_peering_connection() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accelerator_total_memory_mi_b() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type accelerator_total_memory_mi_b() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reserved_instances_configuration() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "AvailabilityZoneId" => String.t() | atom(),
        "InstanceCount" => integer(),
        "InstanceType" => list(any()),
        "Platform" => String.t() | atom(),
        "Scope" => list(any())
      }
      
  """
  @type reserved_instances_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      withdraw_byoip_cidr_result() :: %{
        "ByoipCidr" => byoip_cidr()
      }
      
  """
  @type withdraw_byoip_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_store_image_task_request() :: %{
        optional("DryRun") => boolean(),
        optional("S3ObjectTags") => list(s3_object_tag()),
        required("Bucket") => String.t() | atom(),
        required("ImageId") => String.t() | atom()
      }
      
  """
  @type create_store_image_task_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_tenancy_result() :: %{
        "ReturnValue" => boolean()
      }
      
  """
  @type modify_vpc_tenancy_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_interface_result() :: %{
        "ClientToken" => String.t() | atom(),
        "NetworkInterface" => network_interface()
      }
      
  """
  @type create_network_interface_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_console_output_request() :: %{
        optional("DryRun") => boolean(),
        optional("Latest") => boolean(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type get_console_output_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      release_hosts_result() :: %{
        "Successful" => list(String.t() | atom()),
        "Unsuccessful" => list(unsuccessful_item())
      }
      
  """
  @type release_hosts_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disk_info() :: %{
        "Count" => integer(),
        "SizeInGB" => float(),
        "Type" => list(any())
      }
      
  """
  @type disk_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_declarative_policies_report_summary_request() :: %{
        optional("DryRun") => boolean(),
        required("ReportId") => String.t() | atom()
      }
      
  """
  @type get_declarative_policies_report_summary_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_public_ipv4_pool_request() :: %{
        optional("DryRun") => boolean(),
        optional("NetworkBorderGroup") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_public_ipv4_pool_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      host_reservation() :: %{
        "Count" => integer(),
        "CurrencyCode" => list(any()),
        "Duration" => integer(),
        "End" => non_neg_integer(),
        "HostIdSet" => list(String.t() | atom()),
        "HostReservationId" => String.t() | atom(),
        "HourlyPrice" => String.t() | atom(),
        "InstanceFamily" => String.t() | atom(),
        "OfferingId" => String.t() | atom(),
        "PaymentOption" => list(any()),
        "Start" => non_neg_integer(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "UpfrontPrice" => String.t() | atom()
      }
      
  """
  @type host_reservation() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_key_pairs_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("IncludePublicKey") => boolean(),
        optional("KeyNames") => list(String.t() | atom()),
        optional("KeyPairIds") => list(String.t() | atom())
      }
      
  """
  @type describe_key_pairs_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_traffic_mirror_filter_rule_result() :: %{
        "TrafficMirrorFilterRule" => traffic_mirror_filter_rule()
      }
      
  """
  @type modify_traffic_mirror_filter_rule_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      destination_options_response() :: %{
        "FileFormat" => list(any()),
        "HiveCompatiblePartitions" => boolean(),
        "PerHourPartition" => boolean()
      }
      
  """
  @type destination_options_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_declarative_policies_report_request() :: %{
        optional("DryRun") => boolean(),
        required("ReportId") => String.t() | atom()
      }
      
  """
  @type cancel_declarative_policies_report_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipv6_prefix_specification_response() :: %{
        "Ipv6Prefix" => String.t() | atom()
      }
      
  """
  @type ipv6_prefix_specification_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_address_history_result() :: %{
        "HistoryRecords" => list(ipam_address_history_record()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_ipam_address_history_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      slot_date_time_range_request() :: %{
        "EarliestTime" => non_neg_integer(),
        "LatestTime" => non_neg_integer()
      }
      
  """
  @type slot_date_time_range_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reserved_instance_limit_price() :: %{
        "Amount" => float(),
        "CurrencyCode" => list(any())
      }
      
  """
  @type reserved_instance_limit_price() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_byoasn_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_ipam_byoasn_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      report_instance_status_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("EndTime") => non_neg_integer(),
        optional("StartTime") => non_neg_integer(),
        required("Instances") => list(String.t() | atom()),
        required("ReasonCodes") => list(list(any())()),
        required("Status") => list(any())
      }
      
  """
  @type report_instance_status_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_image_metadata() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "ImageMetadata" => image_metadata(),
        "InstanceId" => String.t() | atom(),
        "InstanceType" => list(any()),
        "LaunchTime" => non_neg_integer(),
        "Operator" => operator_response(),
        "OwnerId" => String.t() | atom(),
        "State" => instance_state(),
        "Tags" => list(tag()),
        "ZoneId" => String.t() | atom()
      }
      
  """
  @type instance_image_metadata() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reset_fpga_image_attribute_request() :: %{
        optional("Attribute") => list(any()),
        optional("DryRun") => boolean(),
        required("FpgaImageId") => String.t() | atom()
      }
      
  """
  @type reset_fpga_image_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      integrate_services() :: %{
        "AthenaIntegrations" => list(athena_integration())
      }
      
  """
  @type integrate_services() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_traffic_mirror_filter_result() :: %{
        "ClientToken" => String.t() | atom(),
        "TrafficMirrorFilter" => traffic_mirror_filter()
      }
      
  """
  @type create_traffic_mirror_filter_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_trust_provider_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DeviceOptions") => create_verified_access_trust_provider_device_options(),
        optional("DeviceTrustProviderType") => list(any()),
        optional("DryRun") => boolean(),
        optional("NativeApplicationOidcOptions") => create_verified_access_native_application_oidc_options(),
        optional("OidcOptions") => create_verified_access_trust_provider_oidc_options(),
        optional("SseSpecification") => verified_access_sse_specification_request(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("UserTrustProviderType") => list(any()),
        required("PolicyReferenceName") => String.t() | atom(),
        required("TrustProviderType") => list(any())
      }
      
  """
  @type create_verified_access_trust_provider_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_connect_endpoint_public_dns_names() :: %{
        "Dualstack" => instance_connect_endpoint_dns_names(),
        "Ipv4" => instance_connect_endpoint_dns_names()
      }
      
  """
  @type instance_connect_endpoint_public_dns_names() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      address() :: %{
        "AllocationId" => String.t() | atom(),
        "AssociationId" => String.t() | atom(),
        "CarrierIp" => String.t() | atom(),
        "CustomerOwnedIp" => String.t() | atom(),
        "CustomerOwnedIpv4Pool" => String.t() | atom(),
        "Domain" => list(any()),
        "InstanceId" => String.t() | atom(),
        "NetworkBorderGroup" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "NetworkInterfaceOwnerId" => String.t() | atom(),
        "PrivateIpAddress" => String.t() | atom(),
        "PublicIp" => String.t() | atom(),
        "PublicIpv4Pool" => String.t() | atom(),
        "ServiceManaged" => list(any()),
        "SubnetId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type address() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_transit_gateway_vpc_attachment_result() :: %{
        "TransitGatewayVpcAttachment" => transit_gateway_vpc_attachment()
      }
      
  """
  @type modify_transit_gateway_vpc_attachment_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unlock_snapshot_result() :: %{
        "SnapshotId" => String.t() | atom()
      }
      
  """
  @type unlock_snapshot_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      run_instances_monitoring_enabled() :: %{
        "Enabled" => boolean()
      }
      
  """
  @type run_instances_monitoring_enabled() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_capacity_reservation_usage_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("CapacityReservationId") => String.t() | atom()
      }
      
  """
  @type get_capacity_reservation_usage_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_traffic_mirror_filter_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_traffic_mirror_filter_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_transit_gateway_route_request() :: %{
        optional("Blackhole") => boolean(),
        optional("DryRun") => boolean(),
        optional("TransitGatewayAttachmentId") => String.t() | atom(),
        required("DestinationCidrBlock") => String.t() | atom(),
        required("TransitGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type replace_transit_gateway_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_fleet_requests_request() :: %{
        optional("DryRun") => boolean(),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("SpotFleetRequestIds") => list(String.t() | atom())
      }
      
  """
  @type describe_spot_fleet_requests_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      customer_gateway() :: %{
        "BgpAsn" => String.t() | atom(),
        "BgpAsnExtended" => String.t() | atom(),
        "CertificateArn" => String.t() | atom(),
        "CustomerGatewayId" => String.t() | atom(),
        "DeviceName" => String.t() | atom(),
        "IpAddress" => String.t() | atom(),
        "State" => String.t() | atom(),
        "Tags" => list(tag()),
        "Type" => String.t() | atom()
      }
      
  """
  @type customer_gateway() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      add_ipam_operating_region() :: %{
        "RegionName" => String.t() | atom()
      }
      
  """
  @type add_ipam_operating_region() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_declarative_policies_report_summary_result() :: %{
        "AttributeSummaries" => list(attribute_summary()),
        "EndTime" => non_neg_integer(),
        "NumberOfAccounts" => integer(),
        "NumberOfFailedAccounts" => integer(),
        "ReportId" => String.t() | atom(),
        "S3Bucket" => String.t() | atom(),
        "S3Prefix" => String.t() | atom(),
        "StartTime" => non_neg_integer(),
        "TargetId" => String.t() | atom()
      }
      
  """
  @type get_declarative_policies_report_summary_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_vpn_connection_request() :: %{
        optional("DryRun") => boolean(),
        required("VpnConnectionId") => String.t() | atom()
      }
      
  """
  @type delete_vpn_connection_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_active_vpn_tunnel_status_request() :: %{
        optional("DryRun") => boolean(),
        required("VpnConnectionId") => String.t() | atom(),
        required("VpnTunnelOutsideIpAddress") => String.t() | atom()
      }
      
  """
  @type get_active_vpn_tunnel_status_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      release_ipam_pool_allocation_request() :: %{
        optional("DryRun") => boolean(),
        required("Cidr") => String.t() | atom(),
        required("IpamPoolAllocationId") => String.t() | atom(),
        required("IpamPoolId") => String.t() | atom()
      }
      
  """
  @type release_ipam_pool_allocation_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_vpc_attachment() :: %{
        "CreationTime" => non_neg_integer(),
        "Options" => transit_gateway_vpc_attachment_options(),
        "State" => list(any()),
        "SubnetIds" => list(String.t() | atom()),
        "Tags" => list(tag()),
        "TransitGatewayAttachmentId" => String.t() | atom(),
        "TransitGatewayId" => String.t() | atom(),
        "VpcId" => String.t() | atom(),
        "VpcOwnerId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_vpc_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_event_window_state_change() :: %{
        "InstanceEventWindowId" => String.t() | atom(),
        "State" => list(any())
      }
      
  """
  @type instance_event_window_state_change() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      baseline_ebs_bandwidth_mbps() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type baseline_ebs_bandwidth_mbps() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_reserved_instances_offering_result() :: %{
        "ReservedInstancesId" => String.t() | atom()
      }
      
  """
  @type purchase_reserved_instances_offering_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_snapshot_attribute_result() :: %{
        "CreateVolumePermissions" => list(create_volume_permission()),
        "ProductCodes" => list(product_code()),
        "SnapshotId" => String.t() | atom()
      }
      
  """
  @type describe_snapshot_attribute_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_snapshot_return_code() :: %{
        "ReturnCode" => list(any()),
        "SnapshotId" => String.t() | atom()
      }
      
  """
  @type delete_snapshot_return_code() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_transit_gateway_multicast_domains_result() :: %{
        "NextToken" => String.t() | atom(),
        "TransitGatewayMulticastDomains" => list(transit_gateway_multicast_domain())
      }
      
  """
  @type describe_transit_gateway_multicast_domains_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_group() :: %{
        "CreationTime" => String.t() | atom(),
        "DeletionTime" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "LastUpdatedTime" => String.t() | atom(),
        "Owner" => String.t() | atom(),
        "SseSpecification" => verified_access_sse_specification_response(),
        "Tags" => list(tag()),
        "VerifiedAccessGroupArn" => String.t() | atom(),
        "VerifiedAccessGroupId" => String.t() | atom(),
        "VerifiedAccessInstanceId" => String.t() | atom()
      }
      
  """
  @type verified_access_group() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_spot_fleet_requests_request() :: %{
        optional("DryRun") => boolean(),
        required("SpotFleetRequestIds") => list(String.t() | atom()),
        required("TerminateInstances") => boolean()
      }
      
  """
  @type cancel_spot_fleet_requests_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_snapshot_block_public_access_result() :: %{
        "State" => list(any())
      }
      
  """
  @type disable_snapshot_block_public_access_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_spot_fleet_request_history_request() :: %{
        optional("DryRun") => boolean(),
        optional("EventType") => list(any()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("SpotFleetRequestId") => String.t() | atom(),
        required("StartTime") => non_neg_integer()
      }
      
  """
  @type describe_spot_fleet_request_history_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      failed_queued_purchase_deletion() :: %{
        "Error" => delete_queued_reserved_instances_error(),
        "ReservedInstancesId" => String.t() | atom()
      }
      
  """
  @type failed_queued_purchase_deletion() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_endpoint_policy_result() :: %{
        "PolicyDocument" => String.t() | atom(),
        "PolicyEnabled" => boolean(),
        "SseSpecification" => verified_access_sse_specification_response()
      }
      
  """
  @type modify_verified_access_endpoint_policy_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      user_bucket() :: %{
        "S3Bucket" => String.t() | atom(),
        "S3Key" => String.t() | atom()
      }
      
  """
  @type user_bucket() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_block_device_mapping_specification() :: %{
        "DeviceName" => String.t() | atom(),
        "Ebs" => ebs_instance_block_device_specification(),
        "NoDevice" => String.t() | atom(),
        "VirtualName" => String.t() | atom()
      }
      
  """
  @type instance_block_device_mapping_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ebs_status_summary() :: %{
        "Details" => list(ebs_status_details()),
        "Status" => list(any())
      }
      
  """
  @type ebs_status_summary() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_block_device_mapping_request() :: %{
        "DeviceName" => String.t() | atom(),
        "Ebs" => launch_template_ebs_block_device_request(),
        "NoDevice" => String.t() | atom(),
        "VirtualName" => String.t() | atom()
      }
      
  """
  @type launch_template_block_device_mapping_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_storage_info() :: %{
        "Disks" => list(disk_info()),
        "EncryptionSupport" => list(any()),
        "NvmeSupport" => list(any()),
        "TotalSizeInGB" => float()
      }
      
  """
  @type instance_storage_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_iam_instance_profile_associations_result() :: %{
        "IamInstanceProfileAssociations" => list(iam_instance_profile_association()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_iam_instance_profile_associations_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_ena_srd_specification() :: %{
        "EnaSrdEnabled" => boolean(),
        "EnaSrdUdpSpecification" => launch_template_ena_srd_udp_specification()
      }
      
  """
  @type launch_template_ena_srd_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_route_tables_result() :: %{
        "LocalGatewayRouteTables" => list(local_gateway_route_table()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_route_tables_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_instance_capacity_reservation_attributes_request() :: %{
        optional("DryRun") => boolean(),
        required("CapacityReservationSpecification") => capacity_reservation_specification(),
        required("InstanceId") => String.t() | atom()
      }
      
  """
  @type modify_instance_capacity_reservation_attributes_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      stop_instances_result() :: %{
        "StoppingInstances" => list(instance_state_change())
      }
      
  """
  @type stop_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_criterion_request() :: %{
        "CreationDateCondition" => creation_date_condition_request(),
        "DeprecationTimeCondition" => deprecation_time_condition_request(),
        "ImageNames" => list(String.t() | atom()),
        "ImageProviders" => list(String.t() | atom()),
        "MarketplaceProductCodes" => list(String.t() | atom())
      }
      
  """
  @type image_criterion_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_instance_metadata_defaults_result() :: %{
        "AccountLevel" => instance_metadata_defaults_response()
      }
      
  """
  @type get_instance_metadata_defaults_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_image_block_public_access_state_result() :: %{
        "ImageBlockPublicAccessState" => String.t() | atom(),
        "ManagedBy" => list(any())
      }
      
  """
  @type get_image_block_public_access_state_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      bundle_task() :: %{
        "BundleId" => String.t() | atom(),
        "BundleTaskError" => bundle_task_error(),
        "InstanceId" => String.t() | atom(),
        "Progress" => String.t() | atom(),
        "StartTime" => non_neg_integer(),
        "State" => list(any()),
        "Storage" => storage(),
        "UpdateTime" => non_neg_integer()
      }
      
  """
  @type bundle_task() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_interfaces_result() :: %{
        "NetworkInterfaces" => list(network_interface()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_network_interfaces_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_fleet_request_config_data() :: %{
        "AllocationStrategy" => list(any()),
        "ClientToken" => String.t() | atom(),
        "Context" => String.t() | atom(),
        "ExcessCapacityTerminationPolicy" => list(any()),
        "FulfilledCapacity" => float(),
        "IamFleetRole" => String.t() | atom(),
        "InstanceInterruptionBehavior" => list(any()),
        "InstancePoolsToUseCount" => integer(),
        "LaunchSpecifications" => list(spot_fleet_launch_specification()),
        "LaunchTemplateConfigs" => list(launch_template_config()),
        "LoadBalancersConfig" => load_balancers_config(),
        "OnDemandAllocationStrategy" => list(any()),
        "OnDemandFulfilledCapacity" => float(),
        "OnDemandMaxTotalPrice" => String.t() | atom(),
        "OnDemandTargetCapacity" => integer(),
        "ReplaceUnhealthyInstances" => boolean(),
        "SpotMaintenanceStrategies" => spot_maintenance_strategies(),
        "SpotMaxTotalPrice" => String.t() | atom(),
        "SpotPrice" => String.t() | atom(),
        "TagSpecifications" => list(tag_specification()),
        "TargetCapacity" => integer(),
        "TargetCapacityUnitType" => list(any()),
        "TerminateInstancesWithExpiration" => boolean(),
        "Type" => list(any()),
        "ValidFrom" => non_neg_integer(),
        "ValidUntil" => non_neg_integer()
      }
      
  """
  @type spot_fleet_request_config_data() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_route_server_propagations_request() :: %{
        optional("DryRun") => boolean(),
        optional("RouteTableId") => String.t() | atom(),
        required("RouteServerId") => String.t() | atom()
      }
      
  """
  @type get_route_server_propagations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_ipam_pool_request() :: %{
        optional("AddAllocationResourceTags") => list(request_ipam_resource_tag()),
        optional("AllocationDefaultNetmaskLength") => integer(),
        optional("AllocationMaxNetmaskLength") => integer(),
        optional("AllocationMinNetmaskLength") => integer(),
        optional("AutoImport") => boolean(),
        optional("ClearAllocationDefaultNetmaskLength") => boolean(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("RemoveAllocationResourceTags") => list(request_ipam_resource_tag()),
        required("IpamPoolId") => String.t() | atom()
      }
      
  """
  @type modify_ipam_pool_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      traffic_mirror_session() :: %{
        "Description" => String.t() | atom(),
        "NetworkInterfaceId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "PacketLength" => integer(),
        "SessionNumber" => integer(),
        "Tags" => list(tag()),
        "TrafficMirrorFilterId" => String.t() | atom(),
        "TrafficMirrorSessionId" => String.t() | atom(),
        "TrafficMirrorTargetId" => String.t() | atom(),
        "VirtualNetworkId" => integer()
      }
      
  """
  @type traffic_mirror_session() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_image_metadata_result() :: %{
        "InstanceImageMetadata" => list(instance_image_metadata()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_instance_image_metadata_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_fleets_request() :: %{
        optional("DryRun") => boolean(),
        required("FleetIds") => list(String.t() | atom()),
        required("TerminateInstances") => boolean()
      }
      
  """
  @type delete_fleets_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      terminate_instances_result() :: %{
        "TerminatingInstances" => list(instance_state_change())
      }
      
  """
  @type terminate_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_route_server_request() :: %{
        optional("DryRun") => boolean(),
        required("RouteServerId") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type disassociate_route_server_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_ipv6_address() :: %{
        "Ipv6Address" => String.t() | atom(),
        "IsPrimaryIpv6" => boolean()
      }
      
  """
  @type instance_ipv6_address() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_transit_gateway_multicast_domain_associations_result() :: %{
        "Associations" => transit_gateway_multicast_domain_associations()
      }
      
  """
  @type reject_transit_gateway_multicast_domain_associations_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_service_permissions_result() :: %{
        "AddedPrincipals" => list(added_principal()),
        "ReturnValue" => boolean()
      }
      
  """
  @type modify_vpc_endpoint_service_permissions_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      prefix_list_id() :: %{
        "Description" => String.t() | atom(),
        "PrefixListId" => String.t() | atom()
      }
      
  """
  @type prefix_list_id() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_policy_table() :: %{
        "CreationTime" => non_neg_integer(),
        "State" => list(any()),
        "Tags" => list(tag()),
        "TransitGatewayId" => String.t() | atom(),
        "TransitGatewayPolicyTableId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_policy_table() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_reserved_instances_exchange_quote_request() :: %{
        optional("DryRun") => boolean(),
        optional("TargetConfigurations") => list(target_configuration_request()),
        required("ReservedInstanceIds") => list(String.t() | atom())
      }
      
  """
  @type accept_reserved_instances_exchange_quote_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_local_gateway_route_tables_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("LocalGatewayRouteTableIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_local_gateway_route_tables_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      v_cpu_count_range_request() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type v_cpu_count_range_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_types_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("InstanceTypes") => list(list(any())()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_instance_types_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_verified_access_instance_client_configuration_result() :: %{
        "DeviceTrustProviders" => list(list(any())()),
        "OpenVpnConfigurations" => list(verified_access_instance_open_vpn_client_configuration()),
        "Region" => String.t() | atom(),
        "UserTrustProvider" => verified_access_instance_user_trust_provider_client_configuration(),
        "VerifiedAccessInstanceId" => String.t() | atom(),
        "Version" => String.t() | atom()
      }
      
  """
  @type export_verified_access_instance_client_configuration_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      create_egress_only_internet_gateway_result() :: %{
        "ClientToken" => String.t() | atom(),
        "EgressOnlyInternetGateway" => egress_only_internet_gateway()
      }
      
  """
  @type create_egress_only_internet_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_log_cloud_watch_logs_destination() :: %{
        "DeliveryStatus" => verified_access_log_delivery_status(),
        "Enabled" => boolean(),
        "LogGroup" => String.t() | atom()
      }
      
  """
  @type verified_access_log_cloud_watch_logs_destination() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      iam_instance_profile() :: %{
        "Arn" => String.t() | atom(),
        "Id" => String.t() | atom()
      }
      
  """
  @type iam_instance_profile() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      launch_template_ebs_block_device_request() :: %{
        "DeleteOnTermination" => boolean(),
        "Encrypted" => boolean(),
        "Iops" => integer(),
        "KmsKeyId" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "Throughput" => integer(),
        "VolumeInitializationRate" => integer(),
        "VolumeSize" => integer(),
        "VolumeType" => list(any())
      }
      
  """
  @type launch_template_ebs_block_device_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_client_vpn_endpoint_request() :: %{
        optional("ClientCidrBlock") => String.t() | atom(),
        optional("ClientConnectOptions") => client_connect_options(),
        optional("ClientLoginBannerOptions") => client_login_banner_options(),
        optional("ClientRouteEnforcementOptions") => client_route_enforcement_options(),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DisconnectOnSessionTimeout") => boolean(),
        optional("DnsServers") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("EndpointIpAddressType") => list(any()),
        optional("SecurityGroupIds") => list(String.t() | atom()),
        optional("SelfServicePortal") => list(any()),
        optional("SessionTimeoutHours") => integer(),
        optional("SplitTunnel") => boolean(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("TrafficIpAddressType") => list(any()),
        optional("TransportProtocol") => list(any()),
        optional("VpcId") => String.t() | atom(),
        optional("VpnPort") => integer(),
        required("AuthenticationOptions") => list(client_vpn_authentication_request()),
        required("ConnectionLogOptions") => connection_log_options(),
        required("ServerCertificateArn") => String.t() | atom()
      }
      
  """
  @type create_client_vpn_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      request_ipam_resource_tag() :: %{
        "Key" => String.t() | atom(),
        "Value" => String.t() | atom()
      }
      
  """
  @type request_ipam_resource_tag() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_trust_provider_result() :: %{
        "VerifiedAccessTrustProvider" => verified_access_trust_provider()
      }
      
  """
  @type create_verified_access_trust_provider_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_internet_gateway_result() :: %{
        "InternetGateway" => internet_gateway()
      }
      
  """
  @type create_internet_gateway_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_instance_result() :: %{
        "VerifiedAccessInstance" => verified_access_instance()
      }
      
  """
  @type modify_verified_access_instance_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      accept_capacity_reservation_billing_ownership_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type accept_capacity_reservation_billing_ownership_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      gpu_device_memory_info() :: %{
        "SizeInMiB" => integer()
      }
      
  """
  @type gpu_device_memory_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_launch_template_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Operator") => operator_request(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("VersionDescription") => String.t() | atom(),
        required("LaunchTemplateData") => request_launch_template_data(),
        required("LaunchTemplateName") => String.t() | atom()
      }
      
  """
  @type create_launch_template_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpn_connection_options_specification() :: %{
        "EnableAcceleration" => boolean(),
        "LocalIpv4NetworkCidr" => String.t() | atom(),
        "LocalIpv6NetworkCidr" => String.t() | atom(),
        "OutsideIpAddressType" => String.t() | atom(),
        "RemoteIpv4NetworkCidr" => String.t() | atom(),
        "RemoteIpv6NetworkCidr" => String.t() | atom(),
        "StaticRoutesOnly" => boolean(),
        "TransportTransitGatewayAttachmentId" => String.t() | atom(),
        "TunnelInsideIpVersion" => list(any()),
        "TunnelOptions" => list(vpn_tunnel_options_specification())
      }
      
  """
  @type vpn_connection_options_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_multicast_deregistered_group_members() :: %{
        "DeregisteredNetworkInterfaceIds" => list(String.t() | atom()),
        "GroupIpAddress" => String.t() | atom(),
        "TransitGatewayMulticastDomainId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_multicast_deregistered_group_members() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      authorize_security_group_ingress_result() :: %{
        "Return" => boolean(),
        "SecurityGroupRules" => list(security_group_rule())
      }
      
  """
  @type authorize_security_group_ingress_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      security_group_for_vpc() :: %{
        "Description" => String.t() | atom(),
        "GroupId" => String.t() | atom(),
        "GroupName" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "PrimaryVpcId" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type security_group_for_vpc() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_fleet() :: %{
        "AllocationStrategy" => String.t() | atom(),
        "CapacityReservationFleetArn" => String.t() | atom(),
        "CapacityReservationFleetId" => String.t() | atom(),
        "CreateTime" => non_neg_integer(),
        "EndDate" => non_neg_integer(),
        "InstanceMatchCriteria" => list(any()),
        "InstanceTypeSpecifications" => list(fleet_capacity_reservation()),
        "State" => list(any()),
        "Tags" => list(tag()),
        "Tenancy" => list(any()),
        "TotalFulfilledCapacity" => float(),
        "TotalTargetCapacity" => integer()
      }
      
  """
  @type capacity_reservation_fleet() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_discovered_accounts_result() :: %{
        "IpamDiscoveredAccounts" => list(ipam_discovered_account()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_ipam_discovered_accounts_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_snapshot_block_public_access_request() :: %{
        optional("DryRun") => boolean(),
        required("State") => list(any())
      }
      
  """
  @type enable_snapshot_block_public_access_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      capacity_reservation_status() :: %{
        "CapacityReservationId" => String.t() | atom(),
        "TotalAvailableCapacity" => integer(),
        "TotalCapacity" => integer(),
        "TotalUnavailableCapacity" => integer()
      }
      
  """
  @type capacity_reservation_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_vpc_attachment_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayAttachmentId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_vpc_attachment_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_account_attributes_request() :: %{
        optional("AttributeNames") => list(list(any())()),
        optional("DryRun") => boolean()
      }
      
  """
  @type describe_account_attributes_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_store_image_task_result() :: %{
        "ObjectKey" => String.t() | atom()
      }
      
  """
  @type create_store_image_task_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      firewall_stateless_rule() :: %{
        "DestinationPorts" => list(port_range()),
        "Destinations" => list(String.t() | atom()),
        "Priority" => integer(),
        "Protocols" => list(integer()),
        "RuleAction" => String.t() | atom(),
        "RuleGroupArn" => String.t() | atom(),
        "SourcePorts" => list(port_range()),
        "Sources" => list(String.t() | atom())
      }
      
  """
  @type firewall_stateless_rule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      provisioned_bandwidth() :: %{
        "ProvisionTime" => non_neg_integer(),
        "Provisioned" => String.t() | atom(),
        "RequestTime" => non_neg_integer(),
        "Requested" => String.t() | atom(),
        "Status" => String.t() | atom()
      }
      
  """
  @type provisioned_bandwidth() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_connect_result() :: %{
        "TransitGatewayConnect" => transit_gateway_connect()
      }
      
  """
  @type delete_transit_gateway_connect_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ipam_pool_cidrs_result() :: %{
        "IpamPoolCidrs" => list(ipam_pool_cidr()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_ipam_pool_cidrs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reject_transit_gateway_peering_attachment_result() :: %{
        "TransitGatewayPeeringAttachment" => transit_gateway_peering_attachment()
      }
      
  """
  @type reject_transit_gateway_peering_attachment_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      classic_link_dns_support() :: %{
        "ClassicLinkDnsSupported" => boolean(),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type classic_link_dns_support() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_snapshot_from_recycle_bin_request() :: %{
        optional("DryRun") => boolean(),
        required("SnapshotId") => String.t() | atom()
      }
      
  """
  @type restore_snapshot_from_recycle_bin_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_endpoint_result() :: %{
        "ClientToken" => String.t() | atom(),
        "VpcEndpoint" => vpc_endpoint()
      }
      
  """
  @type create_vpc_endpoint_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_scheduled_instance_availability_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("MaxSlotDurationInHours") => integer(),
        optional("MinSlotDurationInHours") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("FirstSlotStartTimeRange") => slot_date_time_range_request(),
        required("Recurrence") => scheduled_instance_recurrence_request()
      }
      
  """
  @type describe_scheduled_instance_availability_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      detach_vpn_gateway_request() :: %{
        optional("DryRun") => boolean(),
        required("VpcId") => String.t() | atom(),
        required("VpnGatewayId") => String.t() | atom()
      }
      
  """
  @type detach_vpn_gateway_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_image_criteria_in_allowed_images_settings_request() :: %{
        optional("DryRun") => boolean(),
        optional("ImageCriteria") => list(image_criterion_request())
      }
      
  """
  @type replace_image_criteria_in_allowed_images_settings_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_network_insights_paths_result() :: %{
        "NetworkInsightsPaths" => list(network_insights_path()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_network_insights_paths_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpn_connection_request() :: %{
        optional("DryRun") => boolean(),
        optional("Options") => vpn_connection_options_specification(),
        optional("PreSharedKeyStorage") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("TransitGatewayId") => String.t() | atom(),
        optional("VpnGatewayId") => String.t() | atom(),
        required("CustomerGatewayId") => String.t() | atom(),
        required("Type") => String.t() | atom()
      }
      
  """
  @type create_vpn_connection_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_image_usage_reports_result() :: %{
        "ImageUsageReports" => list(image_usage_report()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_image_usage_reports_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_metadata_defaults_response() :: %{
        "HttpEndpoint" => list(any()),
        "HttpPutResponseHopLimit" => integer(),
        "HttpTokens" => list(any()),
        "InstanceMetadataTags" => list(any()),
        "ManagedBy" => list(any()),
        "ManagedExceptionMessage" => String.t() | atom()
      }
      
  """
  @type instance_metadata_defaults_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_multicast_domain_result() :: %{
        "TransitGatewayMulticastDomain" => transit_gateway_multicast_domain()
      }
      
  """
  @type delete_transit_gateway_multicast_domain_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_serial_console_access_result() :: %{
        "SerialConsoleAccessEnabled" => boolean()
      }
      
  """
  @type disable_serial_console_access_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_fast_snapshot_restore_success_item() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "DisabledTime" => non_neg_integer(),
        "DisablingTime" => non_neg_integer(),
        "EnabledTime" => non_neg_integer(),
        "EnablingTime" => non_neg_integer(),
        "OptimizingTime" => non_neg_integer(),
        "OwnerAlias" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "SnapshotId" => String.t() | atom(),
        "State" => list(any()),
        "StateTransitionReason" => String.t() | atom()
      }
      
  """
  @type disable_fast_snapshot_restore_success_item() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_sse_specification_request() :: %{
        "CustomerManagedKeyEnabled" => boolean(),
        "KmsKeyArn" => String.t() | atom()
      }
      
  """
  @type verified_access_sse_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      replace_network_acl_association_result() :: %{
        "NewAssociationId" => String.t() | atom()
      }
      
  """
  @type replace_network_acl_association_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_instance_export_task_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("ExportToS3Task") => export_to_s3_task_specification(),
        required("InstanceId") => String.t() | atom(),
        required("TargetEnvironment") => list(any())
      }
      
  """
  @type create_instance_export_task_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      release_address_request() :: %{
        optional("AllocationId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("NetworkBorderGroup") => String.t() | atom(),
        optional("PublicIp") => String.t() | atom()
      }
      
  """
  @type release_address_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipv6_cidr_association() :: %{
        "AssociatedResource" => String.t() | atom(),
        "Ipv6Cidr" => String.t() | atom()
      }
      
  """
  @type ipv6_cidr_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      bundle_instance_result() :: %{
        "BundleTask" => bundle_task()
      }
      
  """
  @type bundle_instance_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_fpga_image_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type delete_fpga_image_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_capacity_reservation_by_splitting_result() :: %{
        "DestinationCapacityReservation" => capacity_reservation(),
        "InstanceCount" => integer(),
        "SourceCapacityReservation" => capacity_reservation()
      }
      
  """
  @type create_capacity_reservation_by_splitting_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cloud_watch_log_options() :: %{
        "LogEnabled" => boolean(),
        "LogGroupArn" => String.t() | atom(),
        "LogOutputFormat" => String.t() | atom()
      }
      
  """
  @type cloud_watch_log_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      service_link_virtual_interface() :: %{
        "ConfigurationState" => list(any()),
        "LocalAddress" => String.t() | atom(),
        "OutpostArn" => String.t() | atom(),
        "OutpostId" => String.t() | atom(),
        "OutpostLagId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "PeerAddress" => String.t() | atom(),
        "PeerBgpAsn" => float(),
        "ServiceLinkVirtualInterfaceArn" => String.t() | atom(),
        "ServiceLinkVirtualInterfaceId" => String.t() | atom(),
        "Tags" => list(tag()),
        "Vlan" => integer()
      }
      
  """
  @type service_link_virtual_interface() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      local_gateway_route_table_vpc_association() :: %{
        "LocalGatewayId" => String.t() | atom(),
        "LocalGatewayRouteTableArn" => String.t() | atom(),
        "LocalGatewayRouteTableId" => String.t() | atom(),
        "LocalGatewayRouteTableVpcAssociationId" => String.t() | atom(),
        "OwnerId" => String.t() | atom(),
        "State" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type local_gateway_route_table_vpc_association() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deprovision_byoip_cidr_request() :: %{
        optional("DryRun") => boolean(),
        required("Cidr") => String.t() | atom()
      }
      
  """
  @type deprovision_byoip_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      scheduled_instance_recurrence_request() :: %{
        "Frequency" => String.t() | atom(),
        "Interval" => integer(),
        "OccurrenceDays" => list(integer()),
        "OccurrenceRelativeToEnd" => boolean(),
        "OccurrenceUnit" => String.t() | atom()
      }
      
  """
  @type scheduled_instance_recurrence_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      transit_gateway_route_attachment() :: %{
        "ResourceId" => String.t() | atom(),
        "ResourceType" => list(any()),
        "TransitGatewayAttachmentId" => String.t() | atom()
      }
      
  """
  @type transit_gateway_route_attachment() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      security_group_rule() :: %{
        "CidrIpv4" => String.t() | atom(),
        "CidrIpv6" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "FromPort" => integer(),
        "GroupId" => String.t() | atom(),
        "GroupOwnerId" => String.t() | atom(),
        "IpProtocol" => String.t() | atom(),
        "IsEgress" => boolean(),
        "PrefixListId" => String.t() | atom(),
        "ReferencedGroupInfo" => referenced_security_group(),
        "SecurityGroupRuleArn" => String.t() | atom(),
        "SecurityGroupRuleId" => String.t() | atom(),
        "Tags" => list(tag()),
        "ToPort" => integer()
      }
      
  """
  @type security_group_rule() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fleets_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("FleetIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_fleets_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_verified_access_groups_result() :: %{
        "NextToken" => String.t() | atom(),
        "VerifiedAccessGroups" => list(verified_access_group())
      }
      
  """
  @type describe_verified_access_groups_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_endpoint_service_permissions_request() :: %{
        optional("AddAllowedPrincipals") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("RemoveAllowedPrincipals") => list(String.t() | atom()),
        required("ServiceId") => String.t() | atom()
      }
      
  """
  @type modify_vpc_endpoint_service_permissions_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_managed_prefix_list_request() :: %{
        optional("DryRun") => boolean(),
        required("PrefixListId") => String.t() | atom()
      }
      
  """
  @type delete_managed_prefix_list_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_fleet_error() :: %{
        "ErrorCode" => String.t() | atom(),
        "ErrorMessage" => String.t() | atom(),
        "LaunchTemplateAndOverrides" => launch_template_and_overrides_response(),
        "Lifecycle" => list(any())
      }
      
  """
  @type create_fleet_error() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_client_vpn_endpoint_request() :: %{
        optional("DryRun") => boolean(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type delete_client_vpn_endpoint_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_local_gateway_route_request() :: %{
        optional("DestinationCidrBlock") => String.t() | atom(),
        optional("DestinationPrefixListId") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("LocalGatewayVirtualInterfaceGroupId") => String.t() | atom(),
        optional("NetworkInterfaceId") => String.t() | atom(),
        required("LocalGatewayRouteTableId") => String.t() | atom()
      }
      
  """
  @type create_local_gateway_route_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      price_schedule_specification() :: %{
        "CurrencyCode" => list(any()),
        "Price" => float(),
        "Term" => float()
      }
      
  """
  @type price_schedule_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_instance_event_windows_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("InstanceEventWindowIds") => list(String.t() | atom()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_instance_event_windows_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reservation_value() :: %{
        "HourlyPrice" => String.t() | atom(),
        "RemainingTotalValue" => String.t() | atom(),
        "RemainingUpfrontValue" => String.t() | atom()
      }
      
  """
  @type reservation_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enclave_options() :: %{
        "Enabled" => boolean()
      }
      
  """
  @type enclave_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_network_interface_permission_request() :: %{
        optional("AwsAccountId") => String.t() | atom(),
        optional("AwsService") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("NetworkInterfaceId") => String.t() | atom(),
        required("Permission") => list(any())
      }
      
  """
  @type create_network_interface_permission_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_ebs_encryption_by_default_result() :: %{
        "EbsEncryptionByDefault" => boolean(),
        "SseType" => list(any())
      }
      
  """
  @type get_ebs_encryption_by_default_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_serial_console_access_status_result() :: %{
        "ManagedBy" => list(any()),
        "SerialConsoleAccessEnabled" => boolean()
      }
      
  """
  @type get_serial_console_access_status_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      load_permission_modifications() :: %{
        "Add" => list(load_permission_request()),
        "Remove" => list(load_permission_request())
      }
      
  """
  @type load_permission_modifications() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_connect_options() :: %{
        "Enabled" => boolean(),
        "LambdaFunctionArn" => String.t() | atom()
      }
      
  """
  @type client_connect_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      subnet_ip_prefixes() :: %{
        "IpPrefixes" => list(String.t() | atom()),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type subnet_ip_prefixes() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      rule_option() :: %{
        "Keyword" => String.t() | atom(),
        "Settings" => list(String.t() | atom())
      }
      
  """
  @type rule_option() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      baseline_ebs_bandwidth_mbps_request() :: %{
        "Max" => integer(),
        "Min" => integer()
      }
      
  """
  @type baseline_ebs_bandwidth_mbps_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_client_vpn_endpoints_request() :: %{
        optional("ClientVpnEndpointIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_client_vpn_endpoints_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      monitor_instances_request() :: %{
        optional("DryRun") => boolean(),
        required("InstanceIds") => list(String.t() | atom())
      }
      
  """
  @type monitor_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disable_ebs_encryption_by_default_result() :: %{
        "EbsEncryptionByDefault" => boolean()
      }
      
  """
  @type disable_ebs_encryption_by_default_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_usage_resource_type() :: %{
        "ResourceType" => String.t() | atom(),
        "ResourceTypeOptions" => list(image_usage_resource_type_option())
      }
      
  """
  @type image_usage_resource_type() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_snapshot_tier_request() :: %{
        optional("DryRun") => boolean(),
        optional("PermanentRestore") => boolean(),
        optional("TemporaryRestoreDays") => integer(),
        required("SnapshotId") => String.t() | atom()
      }
      
  """
  @type restore_snapshot_tier_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      connection_log_options() :: %{
        "CloudwatchLogGroup" => String.t() | atom(),
        "CloudwatchLogStream" => String.t() | atom(),
        "Enabled" => boolean()
      }
      
  """
  @type connection_log_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_transit_gateway_route_table_announcement_request() :: %{
        optional("DryRun") => boolean(),
        required("TransitGatewayRouteTableAnnouncementId") => String.t() | atom()
      }
      
  """
  @type delete_transit_gateway_route_table_announcement_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      instance_status_details() :: %{
        "ImpairedSince" => non_neg_integer(),
        "Name" => list(any()),
        "Status" => list(any())
      }
      
  """
  @type instance_status_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      detach_verified_access_trust_provider_result() :: %{
        "VerifiedAccessInstance" => verified_access_instance(),
        "VerifiedAccessTrustProvider" => verified_access_trust_provider()
      }
      
  """
  @type detach_verified_access_trust_provider_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      restore_address_to_classic_result() :: %{
        "PublicIp" => String.t() | atom(),
        "Status" => list(any())
      }
      
  """
  @type restore_address_to_classic_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      spot_instance_request() :: %{
        "ActualBlockHourlyPrice" => String.t() | atom(),
        "AvailabilityZoneGroup" => String.t() | atom(),
        "BlockDurationMinutes" => integer(),
        "CreateTime" => non_neg_integer(),
        "Fault" => spot_instance_state_fault(),
        "InstanceId" => String.t() | atom(),
        "InstanceInterruptionBehavior" => list(any()),
        "LaunchGroup" => String.t() | atom(),
        "LaunchSpecification" => launch_specification(),
        "LaunchedAvailabilityZone" => String.t() | atom(),
        "LaunchedAvailabilityZoneId" => String.t() | atom(),
        "ProductDescription" => list(any()),
        "SpotInstanceRequestId" => String.t() | atom(),
        "SpotPrice" => String.t() | atom(),
        "State" => list(any()),
        "Status" => spot_instance_status(),
        "Tags" => list(tag()),
        "Type" => list(any()),
        "ValidFrom" => non_neg_integer(),
        "ValidUntil" => non_neg_integer()
      }
      
  """
  @type spot_instance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_subnet_cidr_block_request() :: %{
        optional("Ipv6CidrBlock") => String.t() | atom(),
        optional("Ipv6IpamPoolId") => String.t() | atom(),
        optional("Ipv6NetmaskLength") => integer(),
        required("SubnetId") => String.t() | atom()
      }
      
  """
  @type associate_subnet_cidr_block_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_insights_access_scope_result() :: %{
        "NetworkInsightsAccessScopeId" => String.t() | atom()
      }
      
  """
  @type delete_network_insights_access_scope_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_scheduled_instances_request() :: %{
        optional("ClientToken") => String.t() | atom(),
        optional("DryRun") => boolean(),
        required("PurchaseRequests") => list(purchase_request())
      }
      
  """
  @type purchase_scheduled_instances_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_ipam_external_resource_verification_tokens_result() :: %{
        "IpamExternalResourceVerificationTokens" => list(ipam_external_resource_verification_token()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type describe_ipam_external_resource_verification_tokens_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      delete_route_server_peer_request() :: %{
        optional("DryRun") => boolean(),
        required("RouteServerPeerId") => String.t() | atom()
      }
      
  """
  @type delete_route_server_peer_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fleet_spot_capacity_rebalance() :: %{
        "ReplacementStrategy" => list(any()),
        "TerminationDelay" => integer()
      }
      
  """
  @type fleet_spot_capacity_rebalance() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_spot_instance_requests_result() :: %{
        "CancelledSpotInstanceRequests" => list(cancelled_spot_instance_request())
      }
      
  """
  @type cancel_spot_instance_requests_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      cancel_reserved_instances_listing_result() :: %{
        "ReservedInstancesListings" => list(reserved_instances_listing())
      }
      
  """
  @type cancel_reserved_instances_listing_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      deprovision_byoip_cidr_result() :: %{
        "ByoipCidr" => byoip_cidr()
      }
      
  """
  @type deprovision_byoip_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_cidr_block_state() :: %{
        "State" => list(any()),
        "StatusMessage" => String.t() | atom()
      }
      
  """
  @type vpc_cidr_block_state() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_fpga_image_attribute_request() :: %{
        optional("DryRun") => boolean(),
        required("Attribute") => list(any()),
        required("FpgaImageId") => String.t() | atom()
      }
      
  """
  @type describe_fpga_image_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_instance_tpm_ek_pub_result() :: %{
        "InstanceId" => String.t() | atom(),
        "KeyFormat" => list(any()),
        "KeyType" => list(any()),
        "KeyValue" => String.t() | atom()
      }
      
  """
  @type get_instance_tpm_ek_pub_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      dns_options() :: %{
        "DnsRecordIpType" => list(any()),
        "PrivateDnsOnlyForInboundResolverEndpoint" => boolean()
      }
      
  """
  @type dns_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      service_configuration() :: %{
        "AcceptanceRequired" => boolean(),
        "AvailabilityZoneIds" => list(String.t() | atom()),
        "AvailabilityZones" => list(String.t() | atom()),
        "BaseEndpointDnsNames" => list(String.t() | atom()),
        "GatewayLoadBalancerArns" => list(String.t() | atom()),
        "ManagesVpcEndpoints" => boolean(),
        "NetworkLoadBalancerArns" => list(String.t() | atom()),
        "PayerResponsibility" => list(any()),
        "PrivateDnsName" => String.t() | atom(),
        "PrivateDnsNameConfiguration" => private_dns_name_configuration(),
        "RemoteAccessEnabled" => boolean(),
        "ServiceId" => String.t() | atom(),
        "ServiceName" => String.t() | atom(),
        "ServiceState" => list(any()),
        "ServiceType" => list(service_type_detail()),
        "SupportedIpAddressTypes" => list(list(any())()),
        "SupportedRegions" => list(supported_region_detail()),
        "Tags" => list(tag())
      }
      
  """
  @type service_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_route_status() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type client_vpn_route_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reserved_instance_reservation_value() :: %{
        "ReservationValue" => reservation_value(),
        "ReservedInstanceId" => String.t() | atom()
      }
      
  """
  @type reserved_instance_reservation_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_hosts_request() :: %{
        optional("AutoPlacement") => list(any()),
        optional("HostMaintenance") => list(any()),
        optional("HostRecovery") => list(any()),
        optional("InstanceFamily") => String.t() | atom(),
        optional("InstanceType") => String.t() | atom(),
        required("HostIds") => list(String.t() | atom())
      }
      
  """
  @type modify_hosts_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_client_vpn_client_certificate_revocation_list_request() :: %{
        optional("DryRun") => boolean(),
        required("ClientVpnEndpointId") => String.t() | atom()
      }
      
  """
  @type export_client_vpn_client_certificate_revocation_list_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      describe_vpc_endpoints_result() :: %{
        "NextToken" => String.t() | atom(),
        "VpcEndpoints" => list(vpc_endpoint())
      }
      
  """
  @type describe_vpc_endpoints_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_insights_analysis_result() :: %{
        "NetworkInsightsAnalysisId" => String.t() | atom()
      }
      
  """
  @type delete_network_insights_analysis_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_instance() :: %{
        "CidrEndpointsCustomSubDomain" => verified_access_instance_custom_sub_domain(),
        "CreationTime" => String.t() | atom(),
        "Description" => String.t() | atom(),
        "FipsEnabled" => boolean(),
        "LastUpdatedTime" => String.t() | atom(),
        "Tags" => list(tag()),
        "VerifiedAccessInstanceId" => String.t() | atom(),
        "VerifiedAccessTrustProviders" => list(verified_access_trust_provider_condensed())
      }
      
  """
  @type verified_access_instance() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      load_balancers_config() :: %{
        "ClassicLoadBalancersConfig" => classic_load_balancers_config(),
        "TargetGroupsConfig" => target_groups_config()
      }
      
  """
  @type load_balancers_config() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_traffic_mirror_target_request() :: %{
        optional("DryRun") => boolean(),
        required("TrafficMirrorTargetId") => String.t() | atom()
      }
      
  """
  @type delete_traffic_mirror_target_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_coip_cidr_result() :: %{
        "CoipCidr" => coip_cidr()
      }
      
  """
  @type create_coip_cidr_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      reset_ebs_default_kms_key_id_result() :: %{
        "KmsKeyId" => String.t() | atom()
      }
      
  """
  @type reset_ebs_default_kms_key_id_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_subnet_request() :: %{
        optional("AvailabilityZone") => String.t() | atom(),
        optional("AvailabilityZoneId") => String.t() | atom(),
        optional("CidrBlock") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("Ipv4IpamPoolId") => String.t() | atom(),
        optional("Ipv4NetmaskLength") => integer(),
        optional("Ipv6CidrBlock") => String.t() | atom(),
        optional("Ipv6IpamPoolId") => String.t() | atom(),
        optional("Ipv6Native") => boolean(),
        optional("Ipv6NetmaskLength") => integer(),
        optional("OutpostArn") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type create_subnet_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      monitor_instances_result() :: %{
        "InstanceMonitorings" => list(instance_monitoring())
      }
      
  """
  @type monitor_instances_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpc_encryption_control() :: %{
        optional("Mode") => list(any()),
        optional("ResourceExclusions") => vpc_encryption_control_exclusions(),
        optional("State") => list(any()),
        optional("StateMessage") => String.t() | atom(),
        optional("Tags") => list(tag()),
        optional("VpcEncryptionControlId") => String.t() | atom(),
        optional("VpcId") => String.t() | atom()
      }
      
  """
  @type vpc_encryption_control() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      volume_status_details() :: %{
        "Name" => list(any()),
        "Status" => String.t() | atom()
      }
      
  """
  @type volume_status_details() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ec2_instance_connect_endpoint() :: %{
        "AvailabilityZone" => String.t() | atom(),
        "CreatedAt" => non_neg_integer(),
        "DnsName" => String.t() | atom(),
        "FipsDnsName" => String.t() | atom(),
        "InstanceConnectEndpointArn" => String.t() | atom(),
        "InstanceConnectEndpointId" => String.t() | atom(),
        "IpAddressType" => list(any()),
        "NetworkInterfaceIds" => list(String.t() | atom()),
        "OwnerId" => String.t() | atom(),
        "PreserveClientIp" => boolean(),
        "PublicDnsNames" => instance_connect_endpoint_public_dns_names(),
        "SecurityGroupIds" => list(String.t() | atom()),
        "State" => list(any()),
        "StateMessage" => String.t() | atom(),
        "SubnetId" => String.t() | atom(),
        "Tags" => list(tag()),
        "VpcId" => String.t() | atom()
      }
      
  """
  @type ec2_instance_connect_endpoint() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_traffic_mirror_session_request() :: %{
        optional("DryRun") => boolean(),
        required("TrafficMirrorSessionId") => String.t() | atom()
      }
      
  """
  @type delete_traffic_mirror_session_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_launch_template_result() :: %{
        "LaunchTemplate" => launch_template(),
        "Warning" => validation_warning()
      }
      
  """
  @type create_launch_template_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_vpc_block_public_access_exclusion_request() :: %{
        optional("DryRun") => boolean(),
        optional("SubnetId") => String.t() | atom(),
        optional("TagSpecifications") => list(tag_specification()),
        optional("VpcId") => String.t() | atom(),
        required("InternetGatewayExclusionMode") => list(any())
      }
      
  """
  @type create_vpc_block_public_access_exclusion_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disassociate_trunk_interface_result() :: %{
        "ClientToken" => String.t() | atom(),
        "Return" => boolean()
      }
      
  """
  @type disassociate_trunk_interface_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      supported_region_detail() :: %{
        "Region" => String.t() | atom(),
        "ServiceState" => String.t() | atom()
      }
      
  """
  @type supported_region_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      processor_info() :: %{
        "Manufacturer" => String.t() | atom(),
        "SupportedArchitectures" => list(list(any())()),
        "SupportedFeatures" => list(list(any())()),
        "SustainedClockSpeedInGhz" => float()
      }
      
  """
  @type processor_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      elastic_gpu_specification_response() :: %{
        "Type" => String.t() | atom()
      }
      
  """
  @type elastic_gpu_specification_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_peering_connections_result() :: %{
        "NextToken" => String.t() | atom(),
        "VpcPeeringConnections" => list(vpc_peering_connection())
      }
      
  """
  @type describe_vpc_peering_connections_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_security_groups_for_vpc_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("VpcId") => String.t() | atom()
      }
      
  """
  @type get_security_groups_for_vpc_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_restore_image_task_result() :: %{
        "ImageId" => String.t() | atom()
      }
      
  """
  @type create_restore_image_task_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      network_interface_ipv6_address() :: %{
        "Ipv6Address" => String.t() | atom(),
        "IsPrimaryIpv6" => boolean(),
        "PublicIpv6DnsName" => String.t() | atom()
      }
      
  """
  @type network_interface_ipv6_address() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_instance_request() :: %{
        optional("CidrEndpointsCustomSubDomain") => String.t() | atom(),
        optional("ClientToken") => String.t() | atom(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("FIPSEnabled") => boolean(),
        optional("TagSpecifications") => list(tag_specification())
      }
      
  """
  @type create_verified_access_instance_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_transit_gateway_policy_table_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("TransitGatewayPolicyTableId") => String.t() | atom()
      }
      
  """
  @type get_transit_gateway_policy_table_associations_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      target_capacity_specification_request() :: %{
        "DefaultTargetCapacityType" => list(any()),
        "OnDemandTargetCapacity" => integer(),
        "SpotTargetCapacity" => integer(),
        "TargetCapacityUnitType" => list(any()),
        "TotalTargetCapacity" => integer()
      }
      
  """
  @type target_capacity_specification_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_associated_ipv6_pool_cidrs_result() :: %{
        "Ipv6CidrAssociations" => list(ipv6_cidr_association()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_associated_ipv6_pool_cidrs_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_network_insights_access_scope_analysis_request() :: %{
        optional("DryRun") => boolean(),
        required("NetworkInsightsAccessScopeAnalysisId") => String.t() | atom()
      }
      
  """
  @type delete_network_insights_access_scope_analysis_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      associated_target_network() :: %{
        "NetworkId" => String.t() | atom(),
        "NetworkType" => list(any())
      }
      
  """
  @type associated_target_network() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_traffic_mirror_session_request() :: %{
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("PacketLength") => integer(),
        optional("RemoveFields") => list(list(any())()),
        optional("SessionNumber") => integer(),
        optional("TrafficMirrorFilterId") => String.t() | atom(),
        optional("TrafficMirrorTargetId") => String.t() | atom(),
        optional("VirtualNetworkId") => integer(),
        required("TrafficMirrorSessionId") => String.t() | atom()
      }
      
  """
  @type modify_traffic_mirror_session_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      operator_response() :: %{
        "Managed" => boolean(),
        "Principal" => String.t() | atom()
      }
      
  """
  @type operator_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_vpc_endpoint_associations_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        optional("VpcEndpointIds") => list(String.t() | atom())
      }
      
  """
  @type describe_vpc_endpoint_associations_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      create_verified_access_endpoint_rds_options() :: %{
        "Port" => integer(),
        "Protocol" => list(any()),
        "RdsDbClusterArn" => String.t() | atom(),
        "RdsDbInstanceArn" => String.t() | atom(),
        "RdsDbProxyArn" => String.t() | atom(),
        "RdsEndpoint" => String.t() | atom(),
        "SubnetIds" => list(String.t() | atom())
      }
      
  """
  @type create_verified_access_endpoint_rds_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      delete_placement_group_request() :: %{
        optional("DryRun") => boolean(),
        required("GroupName") => String.t() | atom()
      }
      
  """
  @type delete_placement_group_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      instance_network_interface_specification() :: %{
        "AssociateCarrierIpAddress" => boolean(),
        "AssociatePublicIpAddress" => boolean(),
        "ConnectionTrackingSpecification" => connection_tracking_specification_request(),
        "DeleteOnTermination" => boolean(),
        "Description" => String.t() | atom(),
        "DeviceIndex" => integer(),
        "EnaQueueCount" => integer(),
        "EnaSrdSpecification" => ena_srd_specification_request(),
        "Groups" => list(String.t() | atom()),
        "InterfaceType" => String.t() | atom(),
        "Ipv4PrefixCount" => integer(),
        "Ipv4Prefixes" => list(ipv4_prefix_specification_request()),
        "Ipv6AddressCount" => integer(),
        "Ipv6Addresses" => list(instance_ipv6_address()),
        "Ipv6PrefixCount" => integer(),
        "Ipv6Prefixes" => list(ipv6_prefix_specification_request()),
        "NetworkCardIndex" => integer(),
        "NetworkInterfaceId" => String.t() | atom(),
        "PrimaryIpv6" => boolean(),
        "PrivateIpAddress" => String.t() | atom(),
        "PrivateIpAddresses" => list(private_ip_address_specification()),
        "SecondaryPrivateIpAddressCount" => integer(),
        "SubnetId" => String.t() | atom()
      }
      
  """
  @type instance_network_interface_specification() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      attribute_boolean_value() :: %{
        "Value" => boolean()
      }
      
  """
  @type attribute_boolean_value() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_route_server_routing_database_request() :: %{
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom(),
        required("RouteServerId") => String.t() | atom()
      }
      
  """
  @type get_route_server_routing_database_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      disk_image_detail() :: %{
        "Bytes" => float(),
        "Format" => list(any()),
        "ImportManifestUrl" => String.t() | atom()
      }
      
  """
  @type disk_image_detail() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_id_format_result() :: %{
        "Statuses" => list(id_format())
      }
      
  """
  @type describe_id_format_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      unassign_private_ip_addresses_request() :: %{
        optional("Ipv4Prefixes") => list(String.t() | atom()),
        optional("PrivateIpAddresses") => list(String.t() | atom()),
        required("NetworkInterfaceId") => String.t() | atom()
      }
      
  """
  @type unassign_private_ip_addresses_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      provision_byoip_cidr_request() :: %{
        optional("CidrAuthorizationContext") => cidr_authorization_context(),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("MultiRegion") => boolean(),
        optional("NetworkBorderGroup") => String.t() | atom(),
        optional("PoolTagSpecifications") => list(tag_specification()),
        optional("PubliclyAdvertisable") => boolean(),
        required("Cidr") => String.t() | atom()
      }
      
  """
  @type provision_byoip_cidr_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      fpga_image_state() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type fpga_image_state() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_fpga_image_attribute_request() :: %{
        optional("Attribute") => list(any()),
        optional("Description") => String.t() | atom(),
        optional("DryRun") => boolean(),
        optional("LoadPermission") => load_permission_modifications(),
        optional("Name") => String.t() | atom(),
        optional("OperationType") => list(any()),
        optional("ProductCodes") => list(String.t() | atom()),
        optional("UserGroups") => list(String.t() | atom()),
        optional("UserIds") => list(String.t() | atom()),
        required("FpgaImageId") => String.t() | atom()
      }
      
  """
  @type modify_fpga_image_attribute_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      data_response() :: %{
        "Destination" => String.t() | atom(),
        "Id" => String.t() | atom(),
        "Metric" => list(any()),
        "MetricPoints" => list(metric_point()),
        "Period" => list(any()),
        "Source" => String.t() | atom(),
        "Statistic" => list(any())
      }
      
  """
  @type data_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_capacity_blocks_request() :: %{
        optional("CapacityBlockIds") => list(String.t() | atom()),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_capacity_blocks_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      vpn_tunnel_log_options() :: %{
        "CloudWatchLogOptions" => cloud_watch_log_options()
      }
      
  """
  @type vpn_tunnel_log_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      image_usage_report() :: %{
        "AccountIds" => list(String.t() | atom()),
        "CreationTime" => non_neg_integer(),
        "ExpirationTime" => non_neg_integer(),
        "ImageId" => String.t() | atom(),
        "ReportId" => String.t() | atom(),
        "ResourceTypes" => list(image_usage_resource_type()),
        "State" => String.t() | atom(),
        "StateReason" => String.t() | atom(),
        "Tags" => list(tag())
      }
      
  """
  @type image_usage_report() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      route_table_association_state() :: %{
        "State" => list(any()),
        "StatusMessage" => String.t() | atom()
      }
      
  """
  @type route_table_association_state() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      ipv4_prefix_specification_response() :: %{
        "Ipv4Prefix" => String.t() | atom()
      }
      
  """
  @type ipv4_prefix_specification_response() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      memory_gi_b_per_v_cpu() :: %{
        "Max" => float(),
        "Min" => float()
      }
      
  """
  @type memory_gi_b_per_v_cpu() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      v_cpu_info() :: %{
        "DefaultCores" => integer(),
        "DefaultThreadsPerCore" => integer(),
        "DefaultVCpus" => integer(),
        "ValidCores" => list(integer()),
        "ValidThreadsPerCore" => list(integer())
      }
      
  """
  @type v_cpu_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      get_instance_types_from_instance_requirements_result() :: %{
        "InstanceTypes" => list(instance_type_info_from_instance_requirements()),
        "NextToken" => String.t() | atom()
      }
      
  """
  @type get_instance_types_from_instance_requirements_result() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      enable_vpc_classic_link_dns_support_result() :: %{
        "Return" => boolean()
      }
      
  """
  @type enable_vpc_classic_link_dns_support_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      verified_access_endpoint_status() :: %{
        "Code" => list(any()),
        "Message" => String.t() | atom()
      }
      
  """
  @type verified_access_endpoint_status() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      describe_network_insights_analyses_request() :: %{
        optional("AnalysisEndTime") => non_neg_integer(),
        optional("AnalysisStartTime") => non_neg_integer(),
        optional("DryRun") => boolean(),
        optional("Filters") => list(filter()),
        optional("MaxResults") => integer(),
        optional("NetworkInsightsAnalysisIds") => list(String.t() | atom()),
        optional("NetworkInsightsPathId") => String.t() | atom(),
        optional("NextToken") => String.t() | atom()
      }
      
  """
  @type describe_network_insights_analyses_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      new_dhcp_configuration() :: %{
        "Key" => String.t() | atom(),
        "Values" => list(String.t() | atom())
      }
      
  """
  @type new_dhcp_configuration() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      gpu_info() :: %{
        "Gpus" => list(gpu_device_info()),
        "TotalGpuMemoryInMiB" => integer()
      }
      
  """
  @type gpu_info() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      export_task_s3_location() :: %{
        "S3Bucket" => String.t() | atom(),
        "S3Prefix" => String.t() | atom()
      }
      
  """
  @type export_task_s3_location() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_capacity_block_extension_result() :: %{
        "CapacityBlockExtensions" => list(capacity_block_extension())
      }
      
  """
  @type purchase_capacity_block_extension_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      associate_iam_instance_profile_result() :: %{
        "IamInstanceProfileAssociation" => iam_instance_profile_association()
      }
      
  """
  @type associate_iam_instance_profile_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_vpc_block_public_access_exclusion_result() :: %{
        "VpcBlockPublicAccessExclusion" => vpc_block_public_access_exclusion()
      }
      
  """
  @type modify_vpc_block_public_access_exclusion_result() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase() :: %{
        "CurrencyCode" => list(any()),
        "Duration" => integer(),
        "HostIdSet" => list(String.t() | atom()),
        "HostReservationId" => String.t() | atom(),
        "HourlyPrice" => String.t() | atom(),
        "InstanceFamily" => String.t() | atom(),
        "PaymentOption" => list(any()),
        "UpfrontPrice" => String.t() | atom()
      }
      
  """
  @type purchase() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      enable_reachability_analyzer_organization_sharing_request() :: %{
        optional("DryRun") => boolean()
      }
      
  """
  @type enable_reachability_analyzer_organization_sharing_request() :: %{
          (String.t() | atom()) => any()
        }

  @typedoc """

  ## Example:
      
      private_dns_name_options_on_launch() :: %{
        "EnableResourceNameDnsAAAARecord" => boolean(),
        "EnableResourceNameDnsARecord" => boolean(),
        "HostnameType" => list(any())
      }
      
  """
  @type private_dns_name_options_on_launch() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      modify_verified_access_endpoint_rds_options() :: %{
        "Port" => integer(),
        "RdsEndpoint" => String.t() | atom(),
        "SubnetIds" => list(String.t() | atom())
      }
      
  """
  @type modify_verified_access_endpoint_rds_options() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      purchase_reserved_instances_offering_request() :: %{
        optional("DryRun") => boolean(),
        optional("LimitPrice") => reserved_instance_limit_price(),
        optional("PurchaseTime") => non_neg_integer(),
        required("InstanceCount") => integer(),
        required("ReservedInstancesOfferingId") => String.t() | atom()
      }
      
  """
  @type purchase_reserved_instances_offering_request() :: %{(String.t() | atom()) => any()}

  @typedoc """

  ## Example:
      
      client_vpn_authentication() :: %{
        "ActiveDirectory" => directory_service_authentication(),
        "FederatedAuthentication" => federated_authentication(),
        "MutualAuthentication" => certificate_authentication(),
        "Type" => list(any())
      }
      
  """
  @type client_vpn_authentication() :: %{(String.t() | atom()) => any()}

  def metadata do
    %{
      api_version: "2016-11-15",
      content_type: "application/x-www-form-urlencoded",
      credential_scope: nil,
      endpoint_prefix: "ec2",
      global?: false,
      hostname: nil,
      protocol: "ec2",
      service_id: "EC2",
      signature_version: "v4",
      signing_name: "ec2",
      target_prefix: "AmazonEC2"
    }
  end

  @doc """
  Accepts an Elastic IP address transfer.

  For more information, see [Accept a transferred Elastic IP address](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#using-instance-addressing-eips-transfer-accept)
  in the *Amazon VPC User Guide*.
  """
  @spec accept_address_transfer(map(), accept_address_transfer_request(), list()) ::
          {:ok, accept_address_transfer_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def accept_address_transfer(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AcceptAddressTransfer", input, options)
  end

  @doc """
  Accepts a request to assign billing of the available capacity of a shared
  Capacity
  Reservation to your account.

  For more information, see [ Billing assignment for shared Amazon EC2 Capacity
  Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/assign-billing.html).
  """
  @spec accept_capacity_reservation_billing_ownership(
          map(),
          accept_capacity_reservation_billing_ownership_request(),
          list()
        ) ::
          {:ok, accept_capacity_reservation_billing_ownership_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def accept_capacity_reservation_billing_ownership(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "AcceptCapacityReservationBillingOwnership",
      input,
      options
    )
  end

  @doc """
  Accepts the Convertible Reserved Instance exchange quote described in the
  `GetReservedInstancesExchangeQuote` call.
  """
  @spec accept_reserved_instances_exchange_quote(
          map(),
          accept_reserved_instances_exchange_quote_request(),
          list()
        ) ::
          {:ok, accept_reserved_instances_exchange_quote_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def accept_reserved_instances_exchange_quote(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AcceptReservedInstancesExchangeQuote", input, options)
  end

  @doc """
  Accepts a request to associate subnets with a transit gateway multicast domain.
  """
  @spec accept_transit_gateway_multicast_domain_associations(
          map(),
          accept_transit_gateway_multicast_domain_associations_request(),
          list()
        ) ::
          {:ok, accept_transit_gateway_multicast_domain_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def accept_transit_gateway_multicast_domain_associations(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "AcceptTransitGatewayMulticastDomainAssociations",
      input,
      options
    )
  end

  @doc """
  Accepts a transit gateway peering attachment request.

  The peering attachment must be
  in the `pendingAcceptance` state.
  """
  @spec accept_transit_gateway_peering_attachment(
          map(),
          accept_transit_gateway_peering_attachment_request(),
          list()
        ) ::
          {:ok, accept_transit_gateway_peering_attachment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def accept_transit_gateway_peering_attachment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AcceptTransitGatewayPeeringAttachment", input, options)
  end

  @doc """
  Accepts a request to attach a VPC to a transit gateway.

  The VPC attachment must be in the `pendingAcceptance` state.
  Use `DescribeTransitGatewayVpcAttachments` to view your pending VPC attachment
  requests.
  Use `RejectTransitGatewayVpcAttachment` to reject a VPC attachment request.
  """
  @spec accept_transit_gateway_vpc_attachment(
          map(),
          accept_transit_gateway_vpc_attachment_request(),
          list()
        ) ::
          {:ok, accept_transit_gateway_vpc_attachment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def accept_transit_gateway_vpc_attachment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AcceptTransitGatewayVpcAttachment", input, options)
  end

  @doc """
  Accepts connection requests to your VPC endpoint service.
  """
  @spec accept_vpc_endpoint_connections(map(), accept_vpc_endpoint_connections_request(), list()) ::
          {:ok, accept_vpc_endpoint_connections_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def accept_vpc_endpoint_connections(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AcceptVpcEndpointConnections", input, options)
  end

  @doc """
  Accept a VPC peering connection request.

  To accept a request, the VPC peering connection must
  be in the `pending-acceptance` state, and you must be the owner of the peer VPC.
  Use `DescribeVpcPeeringConnections` to view your outstanding VPC
  peering connection requests.

  For an inter-Region VPC peering connection request, you must accept the VPC
  peering
  connection in the Region of the accepter VPC.
  """
  @spec accept_vpc_peering_connection(map(), accept_vpc_peering_connection_request(), list()) ::
          {:ok, accept_vpc_peering_connection_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def accept_vpc_peering_connection(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AcceptVpcPeeringConnection", input, options)
  end

  @doc """
  Advertises an IPv4 or IPv6 address range that is provisioned for use with your
  Amazon Web Services resources through
  bring your own IP addresses (BYOIP).

  You can perform this operation at most once every 10 seconds, even if you
  specify different
  address ranges each time.

  We recommend that you stop advertising the BYOIP CIDR from other locations when
  you advertise
  it from Amazon Web Services. To minimize down time, you can configure your
  Amazon Web Services resources to use an address from a
  BYOIP CIDR before it is advertised, and then simultaneously stop advertising it
  from the current
  location and start advertising it through Amazon Web Services.

  It can take a few minutes before traffic to the specified addresses starts
  routing to Amazon Web Services
  because of BGP propagation delays.
  """
  @spec advertise_byoip_cidr(map(), advertise_byoip_cidr_request(), list()) ::
          {:ok, advertise_byoip_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def advertise_byoip_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AdvertiseByoipCidr", input, options)
  end

  @doc """
  Allocates an Elastic IP address to your Amazon Web Services account.

  After you allocate the Elastic IP address you can associate
  it with an instance or network interface. After you release an Elastic IP
  address, it is released to the IP address
  pool and can be allocated to a different Amazon Web Services account.

  You can allocate an Elastic IP address from an address pool owned by Amazon Web
  Services or from an address pool created
  from a public IPv4 address range that you have brought to Amazon Web Services
  for use with your Amazon Web Services resources using bring your own
  IP addresses (BYOIP). For more information, see [Bring Your Own IP Addresses (BYOIP)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) in
  the *Amazon EC2 User Guide*.

  If you release an Elastic IP address, you might be able to recover it. You
  cannot recover
  an Elastic IP address that you released after it is allocated to another Amazon
  Web Services account. To attempt to recover an Elastic IP address that you
  released, specify
  it in this operation.

  For more information, see [Elastic IP Addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)
  in the *Amazon EC2 User Guide*.

  You can allocate a carrier IP address which is a public IP address from a
  telecommunication carrier,
  to a network interface which resides in a subnet in a Wavelength Zone (for
  example an EC2 instance).
  """
  @spec allocate_address(map(), allocate_address_request(), list()) ::
          {:ok, allocate_address_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def allocate_address(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AllocateAddress", input, options)
  end

  @doc """
  Allocates a Dedicated Host to your account.

  At a minimum, specify the supported
  instance type or instance family, the Availability Zone in which to allocate the
  host,
  and the number of hosts to allocate.
  """
  @spec allocate_hosts(map(), allocate_hosts_request(), list()) ::
          {:ok, allocate_hosts_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def allocate_hosts(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AllocateHosts", input, options)
  end

  @doc """
  Allocate a CIDR from an IPAM pool.

  The Region you use should be the IPAM pool locale. The locale is the Amazon Web
  Services Region where this IPAM pool is available for allocations.

  In IPAM, an allocation is a CIDR assignment from an IPAM pool to another IPAM
  pool or to a resource. For more information, see [Allocate CIDRs](https://docs.aws.amazon.com/vpc/latest/ipam/allocate-cidrs-ipam.html) in
  the *Amazon VPC IPAM User Guide*.

  This action creates an allocation with strong consistency. The returned CIDR
  will not overlap with any other allocations from the same pool.
  """
  @spec allocate_ipam_pool_cidr(map(), allocate_ipam_pool_cidr_request(), list()) ::
          {:ok, allocate_ipam_pool_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def allocate_ipam_pool_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AllocateIpamPoolCidr", input, options)
  end

  @doc """
  Applies a security group to the association between the target network and the
  Client VPN endpoint.

  This action replaces the existing
  security groups with the specified security groups.
  """
  @spec apply_security_groups_to_client_vpn_target_network(
          map(),
          apply_security_groups_to_client_vpn_target_network_request(),
          list()
        ) ::
          {:ok, apply_security_groups_to_client_vpn_target_network_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def apply_security_groups_to_client_vpn_target_network(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "ApplySecurityGroupsToClientVpnTargetNetwork",
      input,
      options
    )
  end

  @doc """
  Assigns the specified IPv6 addresses to the specified network interface.

  You can
  specify specific IPv6 addresses, or you can specify the number of IPv6 addresses
  to be
  automatically assigned from the subnet's IPv6 CIDR block range. You can assign
  as many
  IPv6 addresses to a network interface as you can assign private IPv4 addresses,
  and the
  limit varies by instance type.

  You must specify either the IPv6 addresses or the IPv6 address count in the
  request.

  You can optionally use Prefix Delegation on the network interface. You must
  specify
  either the IPV6 Prefix Delegation prefixes, or the IPv6 Prefix Delegation count.
  For
  information, see [ Assigning prefixes to network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec assign_ipv6_addresses(map(), assign_ipv6_addresses_request(), list()) ::
          {:ok, assign_ipv6_addresses_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def assign_ipv6_addresses(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssignIpv6Addresses", input, options)
  end

  @doc """
  Assigns the specified secondary private IP addresses to the specified network
  interface.

  You can specify specific secondary IP addresses, or you can specify the number
  of
  secondary IP addresses to be automatically assigned from the subnet's CIDR block
  range.
  The number of secondary IP addresses that you can assign to an instance varies
  by
  instance type. For more information about Elastic IP addresses, see [Elastic IP Addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)
  in the *Amazon EC2 User Guide*.

  When you move a secondary private IP address to another network interface, any
  Elastic
  IP address that is associated with the IP address is also moved.

  Remapping an IP address is an asynchronous operation. When you move an IP
  address from
  one network interface to another, check
  `network/interfaces/macs/mac/local-ipv4s` in the instance metadata to
  confirm that the remapping is complete.

  You must specify either the IP addresses or the IP address count in the
  request.

  You can optionally use Prefix Delegation on the network interface. You must
  specify
  either the IPv4 Prefix Delegation prefixes, or the IPv4 Prefix Delegation count.
  For
  information, see [ Assigning prefixes to network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec assign_private_ip_addresses(map(), assign_private_ip_addresses_request(), list()) ::
          {:ok, assign_private_ip_addresses_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def assign_private_ip_addresses(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssignPrivateIpAddresses", input, options)
  end

  @doc """
  Assigns private IPv4 addresses to a private NAT gateway.

  For more information, see
  [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-working-with.html)
  in the *Amazon VPC User Guide*.
  """
  @spec assign_private_nat_gateway_address(
          map(),
          assign_private_nat_gateway_address_request(),
          list()
        ) ::
          {:ok, assign_private_nat_gateway_address_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def assign_private_nat_gateway_address(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssignPrivateNatGatewayAddress", input, options)
  end

  @doc """
  Associates an Elastic IP address, or carrier IP address (for instances that are
  in
  subnets in Wavelength Zones) with an instance or a network interface.

  Before you can use an
  Elastic IP address, you must allocate it to your account.

  If the Elastic IP address is already
  associated with a different instance, it is disassociated from that instance and
  associated
  with the specified instance. If you associate an Elastic IP address with an
  instance that has
  an existing Elastic IP address, the existing address is disassociated from the
  instance, but
  remains allocated to your account.

  [Subnets in Wavelength Zones] You can associate an IP address from the telecommunication
  carrier to the instance or network interface.

  You cannot associate an Elastic IP address with an interface in a different
  network border group.

  This is an idempotent operation. If you perform the operation more than once,
  Amazon EC2
  doesn't return an error, and you may be charged for each time the Elastic IP
  address is
  remapped to the same instance. For more information, see the *Elastic IP
  Addresses* section of [Amazon EC2
  Pricing](http://aws.amazon.com/ec2/pricing/).
  """
  @spec associate_address(map(), associate_address_request(), list()) ::
          {:ok, associate_address_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_address(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateAddress", input, options)
  end

  @doc """
  Initiates a request to assign billing of the unused capacity of a shared
  Capacity
  Reservation to a consumer account that is consolidated under the same Amazon Web
  Services
  organizations payer account.

  For more information, see [Billing assignment for shared Amazon EC2 Capacity
  Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/assign-billing.html).
  """
  @spec associate_capacity_reservation_billing_owner(
          map(),
          associate_capacity_reservation_billing_owner_request(),
          list()
        ) ::
          {:ok, associate_capacity_reservation_billing_owner_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_capacity_reservation_billing_owner(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateCapacityReservationBillingOwner", input, options)
  end

  @doc """
  Associates a target network with a Client VPN endpoint.

  A target network is a subnet in a VPC. You can associate multiple subnets from
  the same VPC with a Client VPN endpoint. You can associate only one subnet in
  each Availability Zone. We recommend that you associate at least two subnets to
  provide Availability Zone redundancy.

  If you specified a VPC when you created the Client VPN endpoint or if you have
  previous subnet associations, the specified subnet must be in the same VPC. To
  specify a subnet that's in a different VPC, you must first modify the Client VPN
  endpoint (`ModifyClientVpnEndpoint`) and change the VPC that's associated with
  it.
  """
  @spec associate_client_vpn_target_network(
          map(),
          associate_client_vpn_target_network_request(),
          list()
        ) ::
          {:ok, associate_client_vpn_target_network_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_client_vpn_target_network(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateClientVpnTargetNetwork", input, options)
  end

  @doc """
  Associates a set of DHCP options (that you've previously created) with the
  specified VPC, or associates no DHCP options with the VPC.

  After you associate the options with the VPC, any existing instances and all new
  instances that you launch in that VPC use the options. You don't need to restart
  or relaunch the instances. They automatically pick up the changes within a few
  hours, depending on how frequently the instance renews its DHCP lease. You can
  explicitly renew the lease using the operating system on the instance.

  For more information, see [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)
  in the *Amazon VPC User Guide*.
  """
  @spec associate_dhcp_options(map(), associate_dhcp_options_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_dhcp_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateDhcpOptions", input, options)
  end

  @doc """
  Associates an Identity and Access Management (IAM) role with an Certificate
  Manager (ACM) certificate.

  This enables the certificate to be used by the ACM for Nitro Enclaves
  application inside an enclave. For more
  information, see [Certificate Manager for Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html)
  in the *Amazon Web Services Nitro Enclaves
  User Guide*.

  When the IAM role is associated with the ACM certificate, the certificate,
  certificate chain, and encrypted
  private key are placed in an Amazon S3 location that only the associated IAM
  role can access. The private key of the certificate
  is encrypted with an Amazon Web Services managed key that has an attached
  attestation-based key policy.

  To enable the IAM role to access the Amazon S3 object, you must grant it
  permission to call `s3:GetObject`
  on the Amazon S3 bucket returned by the command. To enable the IAM role to
  access the KMS key,
  you must grant it permission to call `kms:Decrypt` on the KMS key returned by
  the command.
  For more information, see [
  Grant the role permission to access the certificate and encryption
  key](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html#add-policy)
  in the
  *Amazon Web Services Nitro Enclaves User Guide*.
  """
  @spec associate_enclave_certificate_iam_role(
          map(),
          associate_enclave_certificate_iam_role_request(),
          list()
        ) ::
          {:ok, associate_enclave_certificate_iam_role_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_enclave_certificate_iam_role(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateEnclaveCertificateIamRole", input, options)
  end

  @doc """
  Associates an IAM instance profile with a running or stopped instance.

  You cannot
  associate more than one IAM instance profile with an instance.
  """
  @spec associate_iam_instance_profile(map(), associate_iam_instance_profile_request(), list()) ::
          {:ok, associate_iam_instance_profile_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_iam_instance_profile(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateIamInstanceProfile", input, options)
  end

  @doc """
  Associates one or more targets with an event window.

  Only one type of target (instance
  IDs, Dedicated Host IDs, or tags) can be specified with an event window.

  For more information, see [Define event windows for scheduled events](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec associate_instance_event_window(map(), associate_instance_event_window_request(), list()) ::
          {:ok, associate_instance_event_window_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_instance_event_window(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateInstanceEventWindow", input, options)
  end

  @doc """
  Associates your Autonomous System Number (ASN) with a BYOIP CIDR that you own in
  the same Amazon Web Services Region.

  For more information, see [Tutorial: Bring your ASN to IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoasn.html) in the
  *Amazon VPC IPAM guide*.

  After the association succeeds, the ASN is eligible for
  advertisement. You can view the association with
  [DescribeByoipCidrs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeByoipCidrs.html). You can advertise the CIDR with
  [AdvertiseByoipCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AdvertiseByoipCidr.html).
  """
  @spec associate_ipam_byoasn(map(), associate_ipam_byoasn_request(), list()) ::
          {:ok, associate_ipam_byoasn_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_ipam_byoasn(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateIpamByoasn", input, options)
  end

  @doc """
  Associates an IPAM resource discovery with an Amazon VPC IPAM.

  A resource discovery is an IPAM component that enables IPAM to manage and
  monitor resources that belong to the owning account.
  """
  @spec associate_ipam_resource_discovery(
          map(),
          associate_ipam_resource_discovery_request(),
          list()
        ) ::
          {:ok, associate_ipam_resource_discovery_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_ipam_resource_discovery(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateIpamResourceDiscovery", input, options)
  end

  @doc """
  Associates Elastic IP addresses (EIPs) and private IPv4 addresses with a public
  NAT gateway.

  For more information,
  see [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-working-with.html)
  in the *Amazon VPC User Guide*.

  By default, you can associate up to 2 Elastic IP addresses per public NAT
  gateway. You can increase the limit by requesting a quota adjustment.
  For more information, see [Elastic IP address quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html#vpc-limits-eips)
  in the *Amazon VPC User Guide*.

  When you associate an EIP or secondary EIPs with a public NAT gateway, the
  network border group of the EIPs
  must match the network border group of the Availability Zone (AZ) that the
  public NAT gateway is in. If it's not the same,
  the EIP will fail to associate. You can see the network border group for the
  subnet's AZ by viewing the details of the subnet.
  Similarly, you can view the network border group of an EIP by viewing the
  details of the EIP address. For more information
  about network border groups and EIPs, see [Allocate an Elastic IP address](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithEIPs.html) in
  the *Amazon VPC User Guide*.
  """
  @spec associate_nat_gateway_address(map(), associate_nat_gateway_address_request(), list()) ::
          {:ok, associate_nat_gateway_address_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_nat_gateway_address(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateNatGatewayAddress", input, options)
  end

  @doc """
  Associates a route server with a VPC to enable dynamic route updates.

  A route server association is the connection established between a route server
  and a VPC.

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec associate_route_server(map(), associate_route_server_request(), list()) ::
          {:ok, associate_route_server_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_route_server(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateRouteServer", input, options)
  end

  @doc """
  Associates a subnet in your VPC or an internet gateway or virtual private
  gateway
  attached to your VPC with a route table in your VPC.

  This association causes traffic
  from the subnet or gateway to be routed according to the routes in the route
  table. The
  action returns an association ID, which you need in order to disassociate the
  route
  table later. A route table can be associated with multiple subnets.

  For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)
  in the
  *Amazon VPC User Guide*.
  """
  @spec associate_route_table(map(), associate_route_table_request(), list()) ::
          {:ok, associate_route_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateRouteTable", input, options)
  end

  @doc """
  Associates a security group with another VPC in the same Region.

  This enables you to use the same security group with network interfaces and
  instances in the specified VPC.

    
  The VPC you want to associate the security group with must be in the same
  Region.

    
  You can associate the security group with another VPC if your account owns the
  VPC or if the VPC was shared with you.

    
  You must own the security group.

    
  You cannot use this feature with default security groups.

    
  You cannot use this feature with the default VPC.
  """
  @spec associate_security_group_vpc(map(), associate_security_group_vpc_request(), list()) ::
          {:ok, associate_security_group_vpc_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_security_group_vpc(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateSecurityGroupVpc", input, options)
  end

  @doc """
  Associates a CIDR block with your subnet.

  You can only associate a single IPv6 CIDR
  block with your subnet.
  """
  @spec associate_subnet_cidr_block(map(), associate_subnet_cidr_block_request(), list()) ::
          {:ok, associate_subnet_cidr_block_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_subnet_cidr_block(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateSubnetCidrBlock", input, options)
  end

  @doc """
  Associates the specified subnets and transit gateway attachments with the
  specified transit gateway multicast domain.

  The transit gateway attachment must be in the available state before you can add
  a resource. Use
  [DescribeTransitGatewayAttachments](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTransitGatewayAttachments.html)
  to see the state of the attachment.
  """
  @spec associate_transit_gateway_multicast_domain(
          map(),
          associate_transit_gateway_multicast_domain_request(),
          list()
        ) ::
          {:ok, associate_transit_gateway_multicast_domain_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_transit_gateway_multicast_domain(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateTransitGatewayMulticastDomain", input, options)
  end

  @doc """
  Associates the specified transit gateway attachment with a transit gateway
  policy table.
  """
  @spec associate_transit_gateway_policy_table(
          map(),
          associate_transit_gateway_policy_table_request(),
          list()
        ) ::
          {:ok, associate_transit_gateway_policy_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_transit_gateway_policy_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateTransitGatewayPolicyTable", input, options)
  end

  @doc """
  Associates the specified attachment with the specified transit gateway route
  table.

  You can
  associate only one route table with an attachment.
  """
  @spec associate_transit_gateway_route_table(
          map(),
          associate_transit_gateway_route_table_request(),
          list()
        ) ::
          {:ok, associate_transit_gateway_route_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_transit_gateway_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateTransitGatewayRouteTable", input, options)
  end

  @doc """
  Associates a branch network interface with a trunk network interface.

  Before you create the association, use
  [CreateNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
  command and set the interface type
  to `trunk`. You must also create a network interface for
  each branch network interface that you want to associate with the trunk
  network interface.
  """
  @spec associate_trunk_interface(map(), associate_trunk_interface_request(), list()) ::
          {:ok, associate_trunk_interface_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_trunk_interface(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateTrunkInterface", input, options)
  end

  @doc """
  Associates a CIDR block with your VPC.

  You can associate a secondary IPv4 CIDR block,
  an Amazon-provided IPv6 CIDR block, or an IPv6 CIDR block from an IPv6 address
  pool that
  you provisioned through bring your own IP addresses
  ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)).   You must specify one of the following in the request: an IPv4 CIDR block, an
  IPv6
  pool, or an Amazon-provided IPv6 CIDR block.

  For more information about associating CIDR blocks with your VPC and applicable
  restrictions, see [IP addressing for your VPCs and
  subnets](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html)
  in the *Amazon VPC User Guide*.
  """
  @spec associate_vpc_cidr_block(map(), associate_vpc_cidr_block_request(), list()) ::
          {:ok, associate_vpc_cidr_block_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def associate_vpc_cidr_block(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AssociateVpcCidrBlock", input, options)
  end

  @doc """

  This action is deprecated.

  Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more
  of the VPC
  security groups. You cannot link an EC2-Classic instance to more than one VPC at
  a time. You
  can only link an instance that's in the `running` state. An instance is
  automatically unlinked from a VPC when it's stopped - you can link it to the VPC
  again when
  you restart it.

  After you've linked an instance, you cannot change the VPC security groups that
  are associated with it. To change the security groups, you must first unlink the
  instance, and then link it again.

  Linking your instance to a VPC is sometimes referred to as *attaching* your
  instance.
  """
  @spec attach_classic_link_vpc(map(), attach_classic_link_vpc_request(), list()) ::
          {:ok, attach_classic_link_vpc_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def attach_classic_link_vpc(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AttachClassicLinkVpc", input, options)
  end

  @doc """
  Attaches an internet gateway or a virtual private gateway to a VPC, enabling
  connectivity
  between the internet and the VPC.

  For more information, see [Internet gateways](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)
  in the
  *Amazon VPC User Guide*.
  """
  @spec attach_internet_gateway(map(), attach_internet_gateway_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def attach_internet_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AttachInternetGateway", input, options)
  end

  @doc """
  Attaches a network interface to an instance.
  """
  @spec attach_network_interface(map(), attach_network_interface_request(), list()) ::
          {:ok, attach_network_interface_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def attach_network_interface(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AttachNetworkInterface", input, options)
  end

  @doc """
  Attaches the specified Amazon Web Services Verified Access trust provider to the
  specified Amazon Web Services Verified Access instance.
  """
  @spec attach_verified_access_trust_provider(
          map(),
          attach_verified_access_trust_provider_request(),
          list()
        ) ::
          {:ok, attach_verified_access_trust_provider_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def attach_verified_access_trust_provider(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AttachVerifiedAccessTrustProvider", input, options)
  end

  @doc """
  Attaches an Amazon EBS volume to a `running` or `stopped`
  instance, and exposes it to the instance with the specified device name.

  The maximum number of Amazon EBS volumes that you can attach to an instance
  depends on the
  instance type. If you exceed the volume attachment limit for an instance type,
  the attachment
  request fails with the `AttachmentLimitExceeded` error. For more information,
  see [Instance volume
  limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html).

  After you attach an EBS volume, you must make it available for use. For more
  information,
  see [Make an EBS volume available for
  use](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-using-volumes.html).

  If a volume has an Amazon Web Services Marketplace product code:

    *
  The volume can be attached only to a stopped instance.

    *
  Amazon Web Services Marketplace product codes are copied from the volume to the
  instance.

    *
  You must be subscribed to the product.

    *
  The instance type and operating system of the instance must support the product.
  For
  example, you can't detach a volume from a Windows instance and attach it to a
  Linux
  instance.

  For more information, see [Attach an Amazon EBS volume to an instance](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-attaching-volume.html)
  in the
  *Amazon EBS User Guide*.
  """
  @spec attach_volume(map(), attach_volume_request(), list()) ::
          {:ok, volume_attachment(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def attach_volume(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AttachVolume", input, options)
  end

  @doc """
  Attaches an available virtual private gateway to a VPC.

  You can attach one virtual private
  gateway to one VPC at a time.

  For more information, see [Amazon Web Services Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) in the *Amazon
  Web Services Site-to-Site VPN
  User Guide*.
  """
  @spec attach_vpn_gateway(map(), attach_vpn_gateway_request(), list()) ::
          {:ok, attach_vpn_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def attach_vpn_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AttachVpnGateway", input, options)
  end

  @doc """
  Adds an ingress authorization rule to a Client VPN endpoint.

  Ingress authorization rules act as
  firewall rules that grant access to networks. You must configure ingress
  authorization rules to
  enable clients to access resources in Amazon Web Services or on-premises
  networks.
  """
  @spec authorize_client_vpn_ingress(map(), authorize_client_vpn_ingress_request(), list()) ::
          {:ok, authorize_client_vpn_ingress_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def authorize_client_vpn_ingress(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AuthorizeClientVpnIngress", input, options)
  end

  @doc """
  Adds the specified outbound (egress) rules to a security group.

  An outbound rule permits instances to send traffic to the specified IPv4 or IPv6
  address ranges, the IP address ranges specified by a prefix list, or the
  instances
  that are associated with a source security group. For more information, see
  [Security group rules](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html).

  You must specify exactly one of the following destinations: an IPv4 or IPv6
  address range,
  a prefix list, or a security group. You must specify a protocol for each rule
  (for example, TCP).
  If the protocol is TCP or UDP, you must also specify a port or port range. If
  the protocol is
  ICMP or ICMPv6, you must also specify the ICMP type and code.

  Rule changes are propagated to instances associated with the security group as
  quickly
  as possible. However, a small delay might occur.

  For examples of rules that you can add to security groups for specific access
  scenarios,
  see [Security group rules for different use cases](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html)
  in the *Amazon EC2 User Guide*.

  For information about security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html)
  in the *Amazon VPC User Guide*.
  """
  @spec authorize_security_group_egress(map(), authorize_security_group_egress_request(), list()) ::
          {:ok, authorize_security_group_egress_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def authorize_security_group_egress(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AuthorizeSecurityGroupEgress", input, options)
  end

  @doc """
  Adds the specified inbound (ingress) rules to a security group.

  An inbound rule permits instances to receive traffic from the specified IPv4 or
  IPv6
  address range, the IP address ranges that are specified by a prefix list, or the
  instances
  that are associated with a destination security group. For more information, see
  [Security group rules](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html).

  You must specify exactly one of the following sources: an IPv4 or IPv6 address
  range,
  a prefix list, or a security group. You must specify a protocol for each rule
  (for example, TCP).
  If the protocol is TCP or UDP, you must also specify a port or port range. If
  the protocol is
  ICMP or ICMPv6, you must also specify the ICMP/ICMPv6 type and code.

  Rule changes are propagated to instances associated with the security group as
  quickly
  as possible. However, a small delay might occur.

  For examples of rules that you can add to security groups for specific access
  scenarios,
  see [Security group rules for different use cases](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html)
  in the *Amazon EC2 User Guide*.

  For more information about security group quotas, see [Amazon VPC quotas](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html)
  in the *Amazon VPC User Guide*.
  """
  @spec authorize_security_group_ingress(
          map(),
          authorize_security_group_ingress_request(),
          list()
        ) ::
          {:ok, authorize_security_group_ingress_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def authorize_security_group_ingress(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "AuthorizeSecurityGroupIngress", input, options)
  end

  @doc """
  Bundles an Amazon instance store-backed Windows instance.

  During bundling, only the root device volume (C:\) is bundled. Data on other
  instance
  store volumes is not preserved.

  This action is not applicable for Linux/Unix instances or Windows instances that
  are
  backed by Amazon EBS.
  """
  @spec bundle_instance(map(), bundle_instance_request(), list()) ::
          {:ok, bundle_instance_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def bundle_instance(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "BundleInstance", input, options)
  end

  @doc """
  Cancels a bundling operation for an instance store-backed Windows instance.
  """
  @spec cancel_bundle_task(map(), cancel_bundle_task_request(), list()) ::
          {:ok, cancel_bundle_task_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_bundle_task(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelBundleTask", input, options)
  end

  @doc """
  Cancels the specified Capacity Reservation, releases the reserved capacity, and
  changes the Capacity Reservation's state to `cancelled`.

  You can cancel a Capacity Reservation that is in the following states:

    *

  `assessing`

    *

  `active` and there is no commitment duration or the commitment
  duration has elapsed. You can't cancel a future-dated Capacity Reservation
  during the commitment duration.

  You can't modify or cancel a Capacity Block. For more information, see [Capacity Blocks for
  ML](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html).

  If a future-dated Capacity Reservation enters the `delayed` state, the
  commitment duration is waived, and you can cancel it as soon as it enters the
  `active` state.

  Instances running in the reserved capacity continue running until you stop them.
  Stopped instances that target the Capacity Reservation can no longer launch.
  Modify
  these instances to either target a different Capacity Reservation, launch
  On-Demand
  Instance capacity, or run in any open Capacity Reservation that has matching
  attributes
  and sufficient capacity.
  """
  @spec cancel_capacity_reservation(map(), cancel_capacity_reservation_request(), list()) ::
          {:ok, cancel_capacity_reservation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_capacity_reservation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelCapacityReservation", input, options)
  end

  @doc """
  Cancels one or more Capacity Reservation Fleets.

  When you cancel a Capacity
  Reservation Fleet, the following happens:

    *
  The Capacity Reservation Fleet's status changes to
  `cancelled`.

    *
  The individual Capacity Reservations in the Fleet are cancelled. Instances
  running in the Capacity Reservations at the time of cancelling the Fleet
  continue to run in shared capacity.

    *
  The Fleet stops creating new Capacity Reservations.
  """
  @spec cancel_capacity_reservation_fleets(
          map(),
          cancel_capacity_reservation_fleets_request(),
          list()
        ) ::
          {:ok, cancel_capacity_reservation_fleets_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_capacity_reservation_fleets(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelCapacityReservationFleets", input, options)
  end

  @doc """
  Cancels an active conversion task.

  The task can be the import of an instance or volume. The action removes all
  artifacts of the conversion, including a partially uploaded volume or instance.
  If the conversion is complete or is
  in the process of transferring the final disk image, the command fails and
  returns an exception.
  """
  @spec cancel_conversion_task(map(), cancel_conversion_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_conversion_task(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelConversionTask", input, options)
  end

  @doc """
  Cancels the generation of an account status report.

  You can only cancel a report while it has the `running` status. Reports
  with other statuses (`complete`, `cancelled`, or
  `error`) can't be canceled.

  For more information, see [Generating the account status report for declarative policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_status-report.html)
  in the
  *Amazon Web Services Organizations User Guide*.
  """
  @spec cancel_declarative_policies_report(
          map(),
          cancel_declarative_policies_report_request(),
          list()
        ) ::
          {:ok, cancel_declarative_policies_report_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_declarative_policies_report(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelDeclarativePoliciesReport", input, options)
  end

  @doc """
  Cancels an active export task.

  The request removes all artifacts of the export, including any partially-created
  Amazon S3 objects. If the export task is complete or is in the process of
  transferring the final disk image, the
  command fails and returns an error.
  """
  @spec cancel_export_task(map(), cancel_export_task_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_export_task(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelExportTask", input, options)
  end

  @doc """
  Removes your Amazon Web Services account from the launch permissions for the
  specified AMI.

  For more information, see [Cancel having an AMI shared with your Amazon Web Services
  account](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cancel-sharing-an-AMI.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec cancel_image_launch_permission(map(), cancel_image_launch_permission_request(), list()) ::
          {:ok, cancel_image_launch_permission_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_image_launch_permission(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelImageLaunchPermission", input, options)
  end

  @doc """
  Cancels an in-process import virtual machine or import snapshot task.
  """
  @spec cancel_import_task(map(), cancel_import_task_request(), list()) ::
          {:ok, cancel_import_task_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_import_task(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelImportTask", input, options)
  end

  @doc """
  Cancels the specified Reserved Instance listing in the Reserved Instance
  Marketplace.

  For more information, see [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec cancel_reserved_instances_listing(
          map(),
          cancel_reserved_instances_listing_request(),
          list()
        ) ::
          {:ok, cancel_reserved_instances_listing_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_reserved_instances_listing(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelReservedInstancesListing", input, options)
  end

  @doc """
  Cancels the specified Spot Fleet requests.

  After you cancel a Spot Fleet request, the Spot Fleet launches no new instances.

  You must also specify whether a canceled Spot Fleet request should terminate its
  instances. If you
  choose to terminate the instances, the Spot Fleet request enters the
  `cancelled_terminating` state. Otherwise, the Spot Fleet request enters
  the `cancelled_running` state and the instances continue to run until they
  are interrupted or you terminate them manually.

  ## Restrictions

    *
  You can delete up to 100 fleets in a single request. If you exceed the specified
  number, no fleets are deleted.
  """
  @spec cancel_spot_fleet_requests(map(), cancel_spot_fleet_requests_request(), list()) ::
          {:ok, cancel_spot_fleet_requests_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_spot_fleet_requests(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelSpotFleetRequests", input, options)
  end

  @doc """
  Cancels one or more Spot Instance requests.

  Canceling a Spot Instance request does not terminate running Spot Instances
  associated with the request.
  """
  @spec cancel_spot_instance_requests(map(), cancel_spot_instance_requests_request(), list()) ::
          {:ok, cancel_spot_instance_requests_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def cancel_spot_instance_requests(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CancelSpotInstanceRequests", input, options)
  end

  @doc """
  Determines whether a product code is associated with an instance.

  This action can only
  be used by the owner of the product code. It is useful when a product code owner
  must
  verify whether another user's instance is eligible for support.
  """
  @spec confirm_product_instance(map(), confirm_product_instance_request(), list()) ::
          {:ok, confirm_product_instance_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def confirm_product_instance(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ConfirmProductInstance", input, options)
  end

  @doc """
  Copies the specified Amazon FPGA Image (AFI) to the current Region.
  """
  @spec copy_fpga_image(map(), copy_fpga_image_request(), list()) ::
          {:ok, copy_fpga_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def copy_fpga_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CopyFpgaImage", input, options)
  end

  @doc """
  Initiates an AMI copy operation.

  You must specify the source AMI ID and both the source
  and destination locations. The copy operation must be initiated in the
  destination
  Region.

  ## CopyImage supports the following source to destination copies:

    *
  Region to Region

    *
  Region to Outpost

    *
  Parent Region to Local Zone

    *
  Local Zone to parent Region

    *
  Between Local Zones with the same parent Region (only supported for certain
  Local
  Zones)

  ## CopyImage does not support the following source to destination copies:

    *
  Local Zone to non-parent Regions

    *
  Between Local Zones with different parent Regions

    *
  Local Zone to Outpost

    *
  Outpost to Local Zone

    *
  Outpost to Region

    *
  Between Outposts

    *
  Within same Outpost

    *
  Cross-partition copies (use
  [CreateStoreImageTask](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html) instead)

  ## Destination specification

    *
  Region to Region: The destination Region is the Region in which you initiate the
  copy
  operation.

    *
  Region to Outpost: Specify the destination using the
  `DestinationOutpostArn` parameter (the ARN of the Outpost)

    *
  Region to Local Zone, and Local Zone to Local Zone copies: Specify the
  destination
  using the `DestinationAvailabilityZone` parameter (the name of the destination
  Local Zone) or `DestinationAvailabilityZoneId` parameter (the ID of the
  destination Local Zone).

  ## Snapshot encryption

    *
  Region to Outpost: Backing snapshots copied to an Outpost are encrypted by
  default
  using the default encryption key for the Region or the key that you specify.
  Outposts do
  not support unencrypted snapshots.

    *
  Region to Local Zone, and Local Zone to Local Zone: Not all Local Zones require
  encrypted snapshots. In Local Zones that require encrypted snapshots, backing
  snapshots
  are automatically encrypted during copy. In Local Zones where encryption is not
  required,
  snapshots retain their original encryption state (encrypted or unencrypted) by
  default.

  For more information, including the required permissions for copying an AMI, see
  [Copy an Amazon EC2
  AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html) in
  the
  *Amazon EC2 User Guide*.
  """
  @spec copy_image(map(), copy_image_request(), list()) ::
          {:ok, copy_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def copy_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CopyImage", input, options)
  end

  @doc """
  Creates an exact copy of an Amazon EBS snapshot.

  The location of the source snapshot determines whether you can copy it or not,
  and the allowed destinations for the snapshot copy.

    *
  If the source snapshot is in a Region, you can copy it within that Region,
  to another Region, to an Outpost associated with that Region, or to a Local
  Zone in that Region.

    *
  If the source snapshot is in a Local Zone, you can copy it within that Local
  Zone,
  to another Local Zone in the same zone group, or to the parent Region of the
  Local
  Zone.

    *
  If the source snapshot is on an Outpost, you can't copy it.

  When copying snapshots to a Region, the encryption outcome for the snapshot copy
  depends on the
  Amazon EBS encryption by default setting for the destination Region, the
  encryption status of the source
  snapshot, and the encryption parameters you specify in the request. For more
  information, see [
  Encryption and snapshot
  copying](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-copy-snapshot.html#creating-encrypted-snapshots).

  Snapshots copied to an Outpost must be encrypted. Unencrypted snapshots are not
  supported
  on Outposts. For more information, [
  Amazon EBS local snapshots on
  Outposts](https://docs.aws.amazon.com/ebs/latest/userguide/snapshots-outposts.html#considerations).

  Snapshots copies have an arbitrary source volume ID. Do not use this volume ID
  for
  any purpose.

  For more information, see [Copy an Amazon EBS snapshot](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-copy-snapshot.html)
  in the
  *Amazon EBS User Guide*.
  """
  @spec copy_snapshot(map(), copy_snapshot_request(), list()) ::
          {:ok, copy_snapshot_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def copy_snapshot(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CopySnapshot", input, options)
  end

  @doc """
  Creates a new Capacity Reservation with the specified attributes.

  Capacity
  Reservations enable you to reserve capacity for your Amazon EC2 instances in a
  specific
  Availability Zone for any duration.

  You can create a Capacity Reservation at any time, and you can choose when it
  starts.
  You can create a Capacity Reservation for immediate use or you can request a
  Capacity
  Reservation for a future date.

  For more information, see [ Reserve compute capacity with On-Demand Capacity
  Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)
  in the
  *Amazon EC2 User Guide*.

  Your request to create a Capacity Reservation could fail if:

    *
  Amazon EC2 does not have sufficient capacity. In this case, try again
  at a later time, try in a different Availability Zone, or request a smaller
  Capacity Reservation. If your workload is flexible across instance types and
  sizes, try with different instance attributes.

    *
  The requested quantity exceeds your On-Demand Instance quota. In this case,
  increase your On-Demand Instance quota for the requested instance type and try
  again. For more information, see [
  Amazon EC2 Service
  Quotas](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_capacity_reservation(map(), create_capacity_reservation_request(), list()) ::
          {:ok, create_capacity_reservation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_capacity_reservation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateCapacityReservation", input, options)
  end

  @doc """
  Create a new Capacity Reservation by splitting the capacity of the source
  Capacity
  Reservation.

  The new Capacity Reservation will have the same attributes as the source
  Capacity Reservation except for tags. The source Capacity Reservation must be
  `active` and owned by your Amazon Web Services account.
  """
  @spec create_capacity_reservation_by_splitting(
          map(),
          create_capacity_reservation_by_splitting_request(),
          list()
        ) ::
          {:ok, create_capacity_reservation_by_splitting_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_capacity_reservation_by_splitting(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateCapacityReservationBySplitting", input, options)
  end

  @doc """
  Creates a Capacity Reservation Fleet.

  For more information, see [Create a Capacity Reservation
  Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-cr-fleets.html#create-crfleet)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_capacity_reservation_fleet(
          map(),
          create_capacity_reservation_fleet_request(),
          list()
        ) ::
          {:ok, create_capacity_reservation_fleet_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_capacity_reservation_fleet(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateCapacityReservationFleet", input, options)
  end

  @doc """
  Creates a carrier gateway.

  For more information about carrier gateways, see [Carrier gateways](https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#wavelength-carrier-gateway)
  in the *Amazon Web Services Wavelength Developer Guide*.
  """
  @spec create_carrier_gateway(map(), create_carrier_gateway_request(), list()) ::
          {:ok, create_carrier_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_carrier_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateCarrierGateway", input, options)
  end

  @doc """
  Creates a Client VPN endpoint.

  A Client VPN endpoint is the resource you create and configure to
  enable and manage client VPN sessions. It is the destination endpoint at which
  all client VPN sessions
  are terminated.
  """
  @spec create_client_vpn_endpoint(map(), create_client_vpn_endpoint_request(), list()) ::
          {:ok, create_client_vpn_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_client_vpn_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateClientVpnEndpoint", input, options)
  end

  @doc """
  Adds a route to a network to a Client VPN endpoint.

  Each Client VPN endpoint has a route table that describes the
  available destination network routes. Each route in the route table specifies
  the path for traﬃc to speciﬁc resources or networks.
  """
  @spec create_client_vpn_route(map(), create_client_vpn_route_request(), list()) ::
          {:ok, create_client_vpn_route_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_client_vpn_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateClientVpnRoute", input, options)
  end

  @doc """

  Creates a range of customer-owned IP addresses.
  """
  @spec create_coip_cidr(map(), create_coip_cidr_request(), list()) ::
          {:ok, create_coip_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_coip_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateCoipCidr", input, options)
  end

  @doc """
  Creates a pool of customer-owned IP (CoIP) addresses.
  """
  @spec create_coip_pool(map(), create_coip_pool_request(), list()) ::
          {:ok, create_coip_pool_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_coip_pool(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateCoipPool", input, options)
  end

  @doc """
  Provides information to Amazon Web Services about your customer gateway device.

  The
  customer gateway device is the appliance at your end of the VPN connection. You
  must provide the IP address of the customer gateway device’s external
  interface. The IP address must be static and can be behind a device performing
  network
  address translation (NAT).

  For devices that use Border Gateway Protocol (BGP), you can also provide the
  device's
  BGP Autonomous System Number (ASN). You can use an existing ASN assigned to your
  network.
  If you don't have an ASN already, you can use a private ASN. For more
  information, see
  [Customer gateway options for your Site-to-Site VPN
  connection](https://docs.aws.amazon.com/vpn/latest/s2svpn/cgw-options.html) in
  the *Amazon Web Services Site-to-Site VPN User Guide*.

  To create more than one customer gateway with the same VPN type, IP address, and
  BGP ASN, specify a unique device name for each customer gateway. An identical
  request
  returns information about the existing customer gateway; it doesn't create a new
  customer
  gateway.
  """
  @spec create_customer_gateway(map(), create_customer_gateway_request(), list()) ::
          {:ok, create_customer_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_customer_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateCustomerGateway", input, options)
  end

  @doc """
  Creates a default subnet with a size `/20` IPv4 CIDR block in the
  specified Availability Zone in your default VPC.

  You can have only one default subnet
  per Availability Zone. For more information, see [Create a default subnet](https://docs.aws.amazon.com/vpc/latest/userguide/work-with-default-vpc.html#create-default-subnet)
  in the *Amazon VPC User Guide*.
  """
  @spec create_default_subnet(map(), create_default_subnet_request(), list()) ::
          {:ok, create_default_subnet_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_default_subnet(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateDefaultSubnet", input, options)
  end

  @doc """
  Creates a default VPC with a size `/16` IPv4 CIDR block and a default subnet
  in each Availability Zone.

  For more information about the components of a default VPC,
  see [Default VPCs](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html)
  in the *Amazon VPC User Guide*. You cannot specify the components of the
  default VPC yourself.

  If you deleted your previous default VPC, you can create a default VPC. You
  cannot have
  more than one default VPC per Region.
  """
  @spec create_default_vpc(map(), create_default_vpc_request(), list()) ::
          {:ok, create_default_vpc_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_default_vpc(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateDefaultVpc", input, options)
  end

  @doc """
  Delegates ownership of the Amazon EBS root volume for an Apple silicon
  Mac instance to an administrative user.
  """
  @spec create_delegate_mac_volume_ownership_task(
          map(),
          create_delegate_mac_volume_ownership_task_request(),
          list()
        ) ::
          {:ok, create_delegate_mac_volume_ownership_task_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_delegate_mac_volume_ownership_task(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateDelegateMacVolumeOwnershipTask", input, options)
  end

  @doc """
  Creates a custom set of DHCP options.

  After you create a DHCP option set, you associate
  it with a VPC. After you associate a DHCP option set with a VPC, all existing
  and newly
  launched instances in the VPC use this set of DHCP options.

  The following are the individual DHCP options you can specify. For more
  information, see
  [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)
  in the *Amazon VPC User Guide*.

    *

  `domain-name` - If you're using AmazonProvidedDNS in `us-east-1`,
  specify `ec2.internal`. If you're using AmazonProvidedDNS in any other Region,
  specify `region.compute.internal`. Otherwise, specify a custom domain name.
  This value is used to complete unqualified DNS hostnames.

  Some Linux operating systems accept multiple domain names separated by spaces.
  However, Windows and other Linux operating systems treat the value as a single
  domain, which results in unexpected behavior. If your DHCP option set is
  associated with a VPC that has instances running operating systems that treat
  the value as a single domain, specify only one domain name.

    *

  `domain-name-servers` - The IP addresses of up to four DNS servers,
  or AmazonProvidedDNS. To specify multiple domain name servers in a single
  parameter,
  separate the IP addresses using commas. To have your instances receive custom
  DNS
  hostnames as specified in `domain-name`, you must specify a custom DNS
  server.

    *

  `ntp-servers` - The IP addresses of up to eight Network Time Protocol (NTP)
  servers (four IPv4 addresses and four IPv6 addresses).

    *

  `netbios-name-servers` - The IP addresses of up to four NetBIOS name
  servers.

    *

  `netbios-node-type` - The NetBIOS node type (1, 2, 4, or 8). We recommend that
  you specify 2. Broadcast and multicast are not supported. For more information
  about
  NetBIOS node types, see [RFC 2132](https://www.ietf.org/rfc/rfc2132.txt).

    *

  `ipv6-address-preferred-lease-time` - A value (in seconds, minutes, hours, or
  years) for how frequently a running instance with an IPv6 assigned to it goes
  through DHCPv6 lease renewal.
  Acceptable values are between 140 and 2147483647 seconds (approximately 68
  years). If no value is entered, the default lease time is 140 seconds. If you
  use long-term addressing for EC2 instances, you can increase the lease time and
  avoid frequent
  lease renewal requests. Lease renewal typically occurs when half of the lease
  time has elapsed.
  """
  @spec create_dhcp_options(map(), create_dhcp_options_request(), list()) ::
          {:ok, create_dhcp_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_dhcp_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateDhcpOptions", input, options)
  end

  @doc """
  [IPv6 only] Creates an egress-only internet gateway for your VPC.

  An egress-only
  internet gateway is used to enable outbound communication over IPv6 from
  instances in
  your VPC to the internet, and prevents hosts outside of your VPC from initiating
  an IPv6
  connection with your instance.
  """
  @spec create_egress_only_internet_gateway(
          map(),
          create_egress_only_internet_gateway_request(),
          list()
        ) ::
          {:ok, create_egress_only_internet_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_egress_only_internet_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateEgressOnlyInternetGateway", input, options)
  end

  @doc """
  Creates an EC2 Fleet that contains the configuration information for On-Demand
  Instances and Spot Instances.

  Instances are launched immediately if there is available capacity.

  A single EC2 Fleet can include multiple launch specifications that vary by
  instance type,
  AMI, Availability Zone, or subnet.

  For more information, see [EC2 Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet.html) in
  the *Amazon EC2 User Guide*.
  """
  @spec create_fleet(map(), create_fleet_request(), list()) ::
          {:ok, create_fleet_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_fleet(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateFleet", input, options)
  end

  @doc """
  Creates one or more flow logs to capture information about IP traffic for a
  specific network interface,
  subnet, or VPC.

  Flow log data for a monitored network interface is recorded as flow log records,
  which are log events
  consisting of fields that describe the traffic flow. For more information, see
  [Flow log records](https://docs.aws.amazon.com/vpc/latest/userguide/flow-log-records.html)
  in the *Amazon VPC User Guide*.

  When publishing to CloudWatch Logs, flow log records are published to a log
  group, and each network
  interface has a unique log stream in the log group. When publishing to Amazon
  S3, flow log records for all
  of the monitored network interfaces are published to a single log file object
  that is stored in the specified
  bucket.

  For more information, see [VPC Flow Logs](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)
  in the *Amazon VPC User Guide*.
  """
  @spec create_flow_logs(map(), create_flow_logs_request(), list()) ::
          {:ok, create_flow_logs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_flow_logs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateFlowLogs", input, options)
  end

  @doc """
  Creates an Amazon FPGA Image (AFI) from the specified design checkpoint (DCP).

  The create operation is asynchronous. To verify that the AFI was successfully
  created and is ready for use, check the output logs.

  An AFI contains the FPGA bitstream that is ready to download to an FPGA.
  You can securely deploy an AFI on multiple FPGA-accelerated instances.
  For more information, see the [Amazon Web Services FPGA Hardware Development Kit](https://github.com/aws/aws-fpga/).
  """
  @spec create_fpga_image(map(), create_fpga_image_request(), list()) ::
          {:ok, create_fpga_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_fpga_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateFpgaImage", input, options)
  end

  @doc """
  Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is
  either running or
  stopped.

  If you customized your instance with instance store volumes or Amazon EBS
  volumes in addition
  to the root device volume, the new AMI contains block device mapping information
  for those
  volumes. When you launch an instance from this new AMI, the instance
  automatically launches
  with those additional volumes.

  The location of the source instance determines where you can create the
  snapshots of the
  AMI:

    *
  If the source instance is in a Region, you must create the snapshots in the same
  Region as the instance.

    *
  If the source instance is in a Local Zone, you can create the snapshots in the
  same
  Local Zone or in its parent Region.

  For more information, see [Create an Amazon EBS-backed AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html)
  in
  the *Amazon Elastic Compute Cloud User Guide*.
  """
  @spec create_image(map(), create_image_request(), list()) ::
          {:ok, create_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateImage", input, options)
  end

  @doc """
  Creates a report that shows how your image is used across other Amazon Web
  Services accounts.

  The report
  provides visibility into which accounts are using the specified image, and how
  many resources
  (EC2 instances or launch templates) are referencing it.

  For more information, see [View your AMI usage](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/your-ec2-ami-usage.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_image_usage_report(map(), create_image_usage_report_request(), list()) ::
          {:ok, create_image_usage_report_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_image_usage_report(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateImageUsageReport", input, options)
  end

  @doc """
  Creates an EC2 Instance Connect Endpoint.

  An EC2 Instance Connect Endpoint allows you to connect to an instance, without
  requiring the instance to have a public IPv4 or public IPv6 address. For more
  information, see [Connect to your instances using EC2 Instance Connect Endpoint](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect-Endpoint.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_instance_connect_endpoint(
          map(),
          create_instance_connect_endpoint_request(),
          list()
        ) ::
          {:ok, create_instance_connect_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_instance_connect_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateInstanceConnectEndpoint", input, options)
  end

  @doc """
  Creates an event window in which scheduled events for the associated Amazon EC2
  instances can
  run.

  You can define either a set of time ranges or a cron expression when creating
  the event
  window, but not both. All event window times are in UTC.

  You can create up to 200 event windows per Amazon Web Services Region.

  When you create the event window, targets (instance IDs, Dedicated Host IDs, or
  tags)
  are not yet associated with it. To ensure that the event window can be used, you
  must
  associate one or more targets with it by using the
  `AssociateInstanceEventWindow` API.

  Event windows are applicable only for scheduled events that stop, reboot, or
  terminate instances.

  Event windows are *not* applicable for:

    
  Expedited scheduled events and network maintenance events.

    
  Unscheduled maintenance such as AutoRecovery and unplanned reboots.

  For more information, see [Define event windows for scheduled events](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec create_instance_event_window(map(), create_instance_event_window_request(), list()) ::
          {:ok, create_instance_event_window_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_instance_event_window(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateInstanceEventWindow", input, options)
  end

  @doc """
  Exports a running or stopped instance to an Amazon S3 bucket.

  For information about the prerequisites for your Amazon S3 bucket, supported
  operating systems,
  image formats, and known limitations for the types of instances you can export,
  see [Exporting an instance as a VM Using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html)
  in the *VM Import/Export User Guide*.
  """
  @spec create_instance_export_task(map(), create_instance_export_task_request(), list()) ::
          {:ok, create_instance_export_task_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_instance_export_task(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateInstanceExportTask", input, options)
  end

  @doc """
  Creates an internet gateway for use with a VPC.

  After creating the internet gateway,
  you attach it to a VPC using `AttachInternetGateway`.

  For more information, see [Internet gateways](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)
  in the
  *Amazon VPC User Guide*.
  """
  @spec create_internet_gateway(map(), create_internet_gateway_request(), list()) ::
          {:ok, create_internet_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_internet_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateInternetGateway", input, options)
  end

  @doc """
  Create an IPAM.

  Amazon VPC IP Address Manager (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 [Create an IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html) in the
  *Amazon VPC IPAM User Guide*.
  """
  @spec create_ipam(map(), create_ipam_request(), list()) ::
          {:ok, create_ipam_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_ipam(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateIpam", input, options)
  end

  @doc """
  Create a verification token.

  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).
  """
  @spec create_ipam_external_resource_verification_token(
          map(),
          create_ipam_external_resource_verification_token_request(),
          list()
        ) ::
          {:ok, create_ipam_external_resource_verification_token_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_ipam_external_resource_verification_token(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "CreateIpamExternalResourceVerificationToken",
      input,
      options
    )
  end

  @doc """
  Create an IP address pool for Amazon VPC IP Address Manager (IPAM).

  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.

  For more information, see [Create a top-level pool](https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html) in the
  *Amazon VPC IPAM User Guide*.
  """
  @spec create_ipam_pool(map(), create_ipam_pool_request(), list()) ::
          {:ok, create_ipam_pool_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_ipam_pool(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateIpamPool", input, options)
  end

  @doc """
  Creates an IPAM resource discovery.

  A resource discovery is an IPAM component that enables IPAM to manage and
  monitor resources that belong to the owning account.
  """
  @spec create_ipam_resource_discovery(map(), create_ipam_resource_discovery_request(), list()) ::
          {:ok, create_ipam_resource_discovery_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_ipam_resource_discovery(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateIpamResourceDiscovery", input, options)
  end

  @doc """
  Create an IPAM scope.

  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 [Add a scope](https://docs.aws.amazon.com/vpc/latest/ipam/add-scope-ipam.html) in the
  *Amazon VPC IPAM User Guide*.
  """
  @spec create_ipam_scope(map(), create_ipam_scope_request(), list()) ::
          {:ok, create_ipam_scope_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_ipam_scope(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateIpamScope", input, options)
  end

  @doc """
  Creates an ED25519 or 2048-bit RSA key pair with the specified name and in the
  specified format.

  Amazon EC2 stores the public key and displays the private
  key for you to save to a file. The private key is returned as an unencrypted PEM
  encoded
  PKCS#1 private key or an unencrypted PPK formatted private key for use with
  PuTTY. If a
  key with the specified name already exists, Amazon EC2 returns an error.

  The key pair returned to you is available only in the Amazon Web Services Region
  in which you create it.
  If you prefer, you can create your own key pair using a third-party tool and
  upload it
  to any Region using `ImportKeyPair`.

  You can have up to 5,000 key pairs per Amazon Web Services Region.

  For more information, see [Amazon EC2 key pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_key_pair(map(), create_key_pair_request(), list()) ::
          {:ok, key_pair(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_key_pair(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateKeyPair", input, options)
  end

  @doc """
  Creates a launch template.

  A launch template contains the parameters to launch an instance. When you launch
  an
  instance using `RunInstances`, you can specify a launch template instead
  of providing the launch parameters in the request. For more information, see
  [Store instance launch parameters in Amazon EC2 launch
  templates](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)
  in the
  *Amazon EC2 User Guide*.

  To clone an existing launch template as the basis for a new launch template, use
  the
  Amazon EC2 console. The API, SDKs, and CLI do not support cloning a template.
  For more
  information, see [Create a launch template from an existing launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#create-launch-template-from-existing-launch-template)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_launch_template(map(), create_launch_template_request(), list()) ::
          {:ok, create_launch_template_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_launch_template(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateLaunchTemplate", input, options)
  end

  @doc """
  Creates a new version of a launch template.

  You must specify an existing launch
  template, either by name or ID. You can determine whether the new version
  inherits
  parameters from a source version, and add or overwrite parameters as needed.

  Launch template versions are numbered in the order in which they are created.
  You
  can't specify, change, or replace the numbering of launch template versions.

  Launch templates are immutable; after you create a launch template, you can't
  modify
  it. Instead, you can create a new version of the launch template that includes
  the
  changes that you require.

  For more information, see [Modify a launch template (manage launch template
  versions)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-launch-template-versions.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_launch_template_version(map(), create_launch_template_version_request(), list()) ::
          {:ok, create_launch_template_version_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_launch_template_version(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateLaunchTemplateVersion", input, options)
  end

  @doc """
  Creates a static route for the specified local gateway route table.

  You must specify one of the
  following targets:

    *

  `LocalGatewayVirtualInterfaceGroupId`

    *

  `NetworkInterfaceId`
  """
  @spec create_local_gateway_route(map(), create_local_gateway_route_request(), list()) ::
          {:ok, create_local_gateway_route_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_local_gateway_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateLocalGatewayRoute", input, options)
  end

  @doc """

  Creates a local gateway route table.
  """
  @spec create_local_gateway_route_table(
          map(),
          create_local_gateway_route_table_request(),
          list()
        ) ::
          {:ok, create_local_gateway_route_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_local_gateway_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateLocalGatewayRouteTable", input, options)
  end

  @doc """

  Creates a local gateway route table virtual interface group association.
  """
  @spec create_local_gateway_route_table_virtual_interface_group_association(
          map(),
          create_local_gateway_route_table_virtual_interface_group_association_request(),
          list()
        ) ::
          {:ok, create_local_gateway_route_table_virtual_interface_group_association_result(),
           any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_local_gateway_route_table_virtual_interface_group_association(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation",
      input,
      options
    )
  end

  @doc """
  Associates the specified VPC with the specified local gateway route table.
  """
  @spec create_local_gateway_route_table_vpc_association(
          map(),
          create_local_gateway_route_table_vpc_association_request(),
          list()
        ) ::
          {:ok, create_local_gateway_route_table_vpc_association_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_local_gateway_route_table_vpc_association(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "CreateLocalGatewayRouteTableVpcAssociation",
      input,
      options
    )
  end

  @doc """
  Create a virtual interface for a local gateway.
  """
  @spec create_local_gateway_virtual_interface(
          map(),
          create_local_gateway_virtual_interface_request(),
          list()
        ) ::
          {:ok, create_local_gateway_virtual_interface_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_local_gateway_virtual_interface(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateLocalGatewayVirtualInterface", input, options)
  end

  @doc """
  Create a local gateway virtual interface group.
  """
  @spec create_local_gateway_virtual_interface_group(
          map(),
          create_local_gateway_virtual_interface_group_request(),
          list()
        ) ::
          {:ok, create_local_gateway_virtual_interface_group_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_local_gateway_virtual_interface_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateLocalGatewayVirtualInterfaceGroup", input, options)
  end

  @doc """
  Creates a System Integrity Protection (SIP) modification task to configure the
  SIP settings
  for an x86 Mac instance or Apple silicon Mac instance.

  For more information, see
  [
  Configure SIP for Amazon EC2
  instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mac-sip-settings.html#mac-sip-configure)
  in the *Amazon EC2 User Guide*.

  When you configure the SIP settings for your instance, you can either enable
  or disable all SIP settings, or you can specify a custom SIP configuration that
  selectively enables or disables specific SIP settings.

  If you implement a custom configuration, [
  connect to the instance and verify the
  settings](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mac-sip-settings.html#mac-sip-check-settings)
  to ensure that your
  requirements are properly implemented and functioning as intended.

  SIP configurations might change with macOS updates. We recommend that you
  review custom SIP settings after any macOS version upgrade to ensure
  continued compatibility and proper functionality of your security
  configurations.

  To enable or disable all SIP settings, use the
  ## MacSystemIntegrityProtectionStatus
  parameter only. For example, to enable all SIP settings, specify the following:

    *

  `MacSystemIntegrityProtectionStatus=enabled`

  To specify a custom configuration that selectively enables or disables specific
  SIP
  settings, use the ## MacSystemIntegrityProtectionStatus
  parameter to enable or disable all SIP settings, and then use the
  **MacSystemIntegrityProtectionConfiguration** parameter
  to specify exceptions. In this case, the exceptions you specify for
  **MacSystemIntegrityProtectionConfiguration** override the value
  you specify for **MacSystemIntegrityProtectionStatus**.
  For example, to enable all SIP settings, except `NvramProtections`,
  specify the following:

    *

  `MacSystemIntegrityProtectionStatus=enabled`

    *

  `MacSystemIntegrityProtectionConfigurationRequest "NvramProtections=disabled"`
  """
  @spec create_mac_system_integrity_protection_modification_task(
          map(),
          create_mac_system_integrity_protection_modification_task_request(),
          list()
        ) ::
          {:ok, create_mac_system_integrity_protection_modification_task_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_mac_system_integrity_protection_modification_task(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "CreateMacSystemIntegrityProtectionModificationTask",
      input,
      options
    )
  end

  @doc """
  Creates a managed prefix list.

  You can specify entries for the prefix list.
  Each entry consists of a CIDR block and an optional description.
  """
  @spec create_managed_prefix_list(map(), create_managed_prefix_list_request(), list()) ::
          {:ok, create_managed_prefix_list_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_managed_prefix_list(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateManagedPrefixList", input, options)
  end

  @doc """
  Creates a NAT gateway in the specified subnet.

  This action creates a network interface
  in the specified subnet with a private IP address from the IP address range of
  the
  subnet. You can create either a public NAT gateway or a private NAT gateway.

  With a public NAT gateway, internet-bound traffic from a private subnet can be
  routed
  to the NAT gateway, so that instances in a private subnet can connect to the
  internet.

  With a private NAT gateway, private communication is routed across VPCs and
  on-premises
  networks through a transit gateway or virtual private gateway. Common use cases
  include
  running large workloads behind a small pool of allowlisted IPv4 addresses,
  preserving
  private IPv4 addresses, and communicating between overlapping networks.

  For more information, see [NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)
  in the *Amazon VPC User Guide*.

  When you create a public NAT gateway and assign it an EIP or secondary EIPs,
  the network border group of the EIPs must match the network border group of the
  Availability Zone (AZ)
  that the public NAT gateway is in. If it's not the same, the NAT gateway will
  fail to launch.
  You can see the network border group for the subnet's AZ by viewing the details
  of the subnet.
  Similarly, you can view the network border group of an EIP by viewing the
  details of the EIP address.
  For more information about network border groups and EIPs, see [Allocate an Elastic IP
  address](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithEIPs.html)
  in the *Amazon VPC User Guide*.
  """
  @spec create_nat_gateway(map(), create_nat_gateway_request(), list()) ::
          {:ok, create_nat_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_nat_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateNatGateway", input, options)
  end

  @doc """
  Creates a network ACL in a VPC.

  Network ACLs provide an optional layer of security (in addition to security
  groups) for the instances in your VPC.

  For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in
  the
  *Amazon VPC User Guide*.
  """
  @spec create_network_acl(map(), create_network_acl_request(), list()) ::
          {:ok, create_network_acl_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_network_acl(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateNetworkAcl", input, options)
  end

  @doc """
  Creates an entry (a rule) in a network ACL with the specified rule number.

  Each network ACL has a set of numbered ingress rules
  and a separate set of numbered egress rules. When determining whether a packet
  should be allowed in or out of a subnet associated
  with the ACL, we process the entries in the ACL according to the rule numbers,
  in ascending order. Each network ACL has a set of
  ingress rules and a separate set of egress rules.

  We recommend that you leave room between the rule numbers (for example, 100,
  110, 120, ...), and not number them one right after the
  other (for example, 101, 102, 103, ...). This makes it easier to add a rule
  between existing ones without having to renumber the rules.

  After you add an entry, you can't modify it; you must either replace it, or
  create an entry and delete the old one.

  For more information about network ACLs, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)
  in the *Amazon VPC User Guide*.
  """
  @spec create_network_acl_entry(map(), create_network_acl_entry_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_network_acl_entry(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateNetworkAclEntry", input, options)
  end

  @doc """
  Creates a Network Access Scope.

  Amazon Web Services Network Access Analyzer enables cloud networking and cloud
  operations teams
  to verify that their networks on Amazon Web Services conform to their network
  security and governance
  objectives. For more information, see the [Amazon Web Services Network Access Analyzer
  Guide](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/).
  """
  @spec create_network_insights_access_scope(
          map(),
          create_network_insights_access_scope_request(),
          list()
        ) ::
          {:ok, create_network_insights_access_scope_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_network_insights_access_scope(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateNetworkInsightsAccessScope", input, options)
  end

  @doc """
  Creates a path to analyze for reachability.

  Reachability Analyzer enables you to analyze and debug network reachability
  between
  two resources in your virtual private cloud (VPC). For more information, see the
  [Reachability Analyzer Guide](https://docs.aws.amazon.com/vpc/latest/reachability/).
  """
  @spec create_network_insights_path(map(), create_network_insights_path_request(), list()) ::
          {:ok, create_network_insights_path_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_network_insights_path(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateNetworkInsightsPath", input, options)
  end

  @doc """
  Creates a network interface in the specified subnet.

  The number of IP addresses you can assign to a network interface varies by
  instance
  type.

  For more information about network interfaces, see [Elastic network interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_network_interface(map(), create_network_interface_request(), list()) ::
          {:ok, create_network_interface_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_network_interface(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateNetworkInterface", input, options)
  end

  @doc """
  Grants an Amazon Web Services-authorized account permission to attach the
  specified
  network interface to an instance in their account.

  You can grant permission to a single Amazon Web Services account only, and only
  one
  account at a time.
  """
  @spec create_network_interface_permission(
          map(),
          create_network_interface_permission_request(),
          list()
        ) ::
          {:ok, create_network_interface_permission_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_network_interface_permission(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateNetworkInterfacePermission", input, options)
  end

  @doc """
  Creates a placement group in which to launch instances.

  The strategy of the placement
  group determines how the instances are organized within the group.

  A `cluster` placement group is a logical grouping of instances within a
  single Availability Zone that benefit from low network latency, high network
  throughput.
  A `spread` placement group places instances on distinct hardware. A
  `partition` placement group places groups of instances in different
  partitions, where instances in one partition do not share the same hardware with
  instances in another partition.

  For more information, see [Placement groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_placement_group(map(), create_placement_group_request(), list()) ::
          {:ok, create_placement_group_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_placement_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreatePlacementGroup", input, options)
  end

  @doc """
  Creates a public IPv4 address pool.

  A public IPv4 pool is an EC2 IP address pool required for the public IPv4 CIDRs
  that you own and bring to Amazon Web Services to manage with IPAM. IPv6
  addresses you bring to Amazon Web Services, however, use IPAM pools only. To
  monitor the status of pool creation, use
  [DescribePublicIpv4Pools](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribePublicIpv4Pools.html).
  """
  @spec create_public_ipv4_pool(map(), create_public_ipv4_pool_request(), list()) ::
          {:ok, create_public_ipv4_pool_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_public_ipv4_pool(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreatePublicIpv4Pool", input, options)
  end

  @doc """
  Replaces the EBS-backed root volume for a `running` instance with a new
  volume that is restored to the original root volume's launch state, that is
  restored to a
  specific snapshot taken from the original root volume, or that is restored from
  an AMI
  that has the same key characteristics as that of the instance.

  For more information, see [Replace a root volume](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec create_replace_root_volume_task(map(), create_replace_root_volume_task_request(), list()) ::
          {:ok, create_replace_root_volume_task_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_replace_root_volume_task(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateReplaceRootVolumeTask", input, options)
  end

  @doc """
  Creates a listing for Amazon EC2 Standard Reserved Instances to be sold in the
  Reserved
  Instance Marketplace.

  You can submit one Standard Reserved Instance listing at a time. To get
  a list of your Standard Reserved Instances, you can use the
  `DescribeReservedInstances` operation.

  Only Standard Reserved Instances can be sold in the Reserved Instance
  Marketplace.
  Convertible Reserved Instances cannot be sold.

  The Reserved Instance Marketplace matches sellers who want to resell Standard
  Reserved
  Instance capacity that they no longer need with buyers who want to purchase
  additional
  capacity. Reserved Instances bought and sold through the Reserved Instance
  Marketplace work
  like any other Reserved Instances.

  To sell your Standard Reserved Instances, you must first register as a seller in
  the
  Reserved Instance Marketplace. After completing the registration process, you
  can create a
  Reserved Instance Marketplace listing of some or all of your Standard Reserved
  Instances, and
  specify the upfront price to receive for them. Your Standard Reserved Instance
  listings then
  become available for purchase. To view the details of your Standard Reserved
  Instance listing,
  you can use the `DescribeReservedInstancesListings` operation.

  For more information, see [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec create_reserved_instances_listing(
          map(),
          create_reserved_instances_listing_request(),
          list()
        ) ::
          {:ok, create_reserved_instances_listing_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_reserved_instances_listing(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateReservedInstancesListing", input, options)
  end

  @doc """
  Starts a task that restores an AMI from an Amazon S3 object that was previously
  created by
  using
  [CreateStoreImageTask](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html). 
  To use this API, you must have the required permissions. For more information,
  see [Permissions for storing and restoring AMIs using
  S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-ami-store-restore.html#ami-s3-permissions)
  in the
  *Amazon EC2 User Guide*.

  For more information, see [Store and restore an AMI using S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec create_restore_image_task(map(), create_restore_image_task_request(), list()) ::
          {:ok, create_restore_image_task_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_restore_image_task(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateRestoreImageTask", input, options)
  end

  @doc """
  Creates a route in a route table within a VPC.

  You must specify either a destination CIDR block or a prefix list ID. You must
  also specify
  exactly one of the resources from the parameter list.

  When determining how to route traffic, we use the route with the most specific
  match.
  For example, traffic is destined for the IPv4 address `192.0.2.3`, and the
  route table includes the following two IPv4 routes:

    *

  `192.0.2.0/24` (goes to some target A)

    *

  `192.0.2.0/28` (goes to some target B)

  Both routes apply to the traffic destined for `192.0.2.3`. However, the second
  route
  in the list covers a smaller number of IP addresses and is therefore more
  specific,
  so we use that route to determine where to target the traffic.

  For more information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)
  in the
  *Amazon VPC User Guide*.
  """
  @spec create_route(map(), create_route_request(), list()) ::
          {:ok, create_route_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateRoute", input, options)
  end

  @doc """
  Creates a new route server to manage dynamic routing in a VPC.

  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](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html).

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec create_route_server(map(), create_route_server_request(), list()) ::
          {:ok, create_route_server_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_route_server(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateRouteServer", input, options)
  end

  @doc """
  Creates a new endpoint for a route server in a specified subnet.

  A route server endpoint is an Amazon Web Services-managed component inside a
  subnet that facilitates [BGP (Border Gateway Protocol)](https://en.wikipedia.org/wiki/Border_Gateway_Protocol) connections
  between your route server and your BGP peers.

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec create_route_server_endpoint(map(), create_route_server_endpoint_request(), list()) ::
          {:ok, create_route_server_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_route_server_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateRouteServerEndpoint", input, options)
  end

  @doc """
  Creates a new BGP peer for a specified 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

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec create_route_server_peer(map(), create_route_server_peer_request(), list()) ::
          {:ok, create_route_server_peer_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_route_server_peer(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateRouteServerPeer", input, options)
  end

  @doc """
  Creates a route table for the specified VPC.

  After you create a route table, you can add routes and associate the table with
  a subnet.

  For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)
  in the
  *Amazon VPC User Guide*.
  """
  @spec create_route_table(map(), create_route_table_request(), list()) ::
          {:ok, create_route_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateRouteTable", input, options)
  end

  @doc """
  Creates a security group.

  A security group acts as a virtual firewall for your instance to control inbound
  and outbound traffic.
  For more information, see
  [Amazon EC2 security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)
  in
  the *Amazon EC2 User Guide* and
  [Security groups for your VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html)
  in the
  *Amazon VPC User Guide*.

  When you create a security group, you specify a friendly name of your choice.
  You can't have two security groups for the same VPC with the same name.

  You have a default security group for use in your VPC. If you don't specify a
  security group
  when you launch an instance, the instance is launched into the appropriate
  default security group.
  A default security group includes a default rule that grants instances
  unrestricted network access
  to each other.

  You can add or remove rules from your security groups using
  `AuthorizeSecurityGroupIngress`,
  `AuthorizeSecurityGroupEgress`,
  `RevokeSecurityGroupIngress`, and
  `RevokeSecurityGroupEgress`.

  For more information about VPC security group limits, see [Amazon VPC Limits](https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html).
  """
  @spec create_security_group(map(), create_security_group_request(), list()) ::
          {:ok, create_security_group_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_security_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateSecurityGroup", input, options)
  end

  @doc """
  Creates a snapshot of an EBS volume and stores it in Amazon S3.

  You can use snapshots for
  backups, to make copies of EBS volumes, and to save data before shutting down an
  instance.

  The location of the source EBS volume determines where you can create the
  snapshot.

    *
  If the source volume is in a Region, you must create the snapshot in the same
  Region as the volume.

    *
  If the source volume is in a Local Zone, you can create the snapshot in the same
  Local
  Zone or in its parent Amazon Web Services Region.

    *
  If the source volume is on an Outpost, you can create the snapshot on the same
  Outpost or in its parent Amazon Web Services Region.

  When a snapshot is created, any Amazon Web Services Marketplace product codes
  that are associated with the
  source volume are propagated to the snapshot.

  You can take a snapshot of an attached volume that is in use. However, snapshots
  only
  capture data that has been written to your Amazon EBS volume at the time the
  snapshot command is
  issued; this might exclude any data that has been cached by any applications or
  the operating
  system. If you can pause any file systems on the volume long enough to take a
  snapshot, your
  snapshot should be complete. However, if you cannot pause all file writes to the
  volume, you
  should unmount the volume from within the instance, issue the snapshot command,
  and then
  remount the volume to ensure a consistent and complete snapshot. You may remount
  and use your
  volume while the snapshot status is `pending`.

  When you create a snapshot for an EBS volume that serves as a root device, we
  recommend
  that you stop the instance before taking the snapshot.

  Snapshots that are taken from encrypted volumes are automatically encrypted.
  Volumes that
  are created from encrypted snapshots are also automatically encrypted. Your
  encrypted volumes
  and any associated snapshots always remain protected. For more information, see
  [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)
  in the *Amazon EBS User Guide*.
  """
  @spec create_snapshot(map(), create_snapshot_request(), list()) ::
          {:ok, snapshot(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_snapshot(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateSnapshot", input, options)
  end

  @doc """
  Creates crash-consistent snapshots of multiple EBS volumes attached to an Amazon
  EC2 instance.

  Volumes are chosen by specifying an instance. Each volume attached to the
  specified instance
  will produce one snapshot that is crash-consistent across the instance. You can
  include all of
  the volumes currently attached to the instance, or you can exclude the root
  volume or specific
  data (non-root) volumes from the multi-volume snapshot set.

  The location of the source instance determines where you can create the
  snapshots.

    *
  If the source instance is in a Region, you must create the snapshots in the same
  Region as the instance.

    *
  If the source instance is in a Local Zone, you can create the snapshots in the
  same
  Local Zone or in its parent Amazon Web Services Region.

    *
  If the source instance is on an Outpost, you can create the snapshots on the
  same
  Outpost or in its parent Amazon Web Services Region.
  """
  @spec create_snapshots(map(), create_snapshots_request(), list()) ::
          {:ok, create_snapshots_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_snapshots(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateSnapshots", input, options)
  end

  @doc """
  Creates a data feed for Spot Instances, enabling you to view Spot Instance usage
  logs.

  You can create one data feed per Amazon Web Services account. For more
  information, see
  [Spot Instance data feed](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec create_spot_datafeed_subscription(
          map(),
          create_spot_datafeed_subscription_request(),
          list()
        ) ::
          {:ok, create_spot_datafeed_subscription_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_spot_datafeed_subscription(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateSpotDatafeedSubscription", input, options)
  end

  @doc """
  Stores an AMI as a single object in an Amazon S3 bucket.

  To use this API, you must have the required permissions. For more information,
  see [Permissions for storing and restoring AMIs using S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-ami-store-restore.html#ami-s3-permissions)
  in the
  *Amazon EC2 User Guide*.

  For more information, see [Store and restore an AMI using S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec create_store_image_task(map(), create_store_image_task_request(), list()) ::
          {:ok, create_store_image_task_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_store_image_task(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateStoreImageTask", input, options)
  end

  @doc """
  Creates a subnet in the specified VPC.

  For an IPv4 only subnet, specify an IPv4 CIDR block.
  If the VPC has an IPv6 CIDR block, you can create an IPv6 only subnet or a dual
  stack subnet instead.
  For an IPv6 only subnet, specify an IPv6 CIDR block. For a dual stack subnet,
  specify both
  an IPv4 CIDR block and an IPv6 CIDR block.

  A subnet CIDR block must not overlap the CIDR block of an existing subnet in the
  VPC.
  After you create a subnet, you can't change its CIDR block.

  The allowed size for an IPv4 subnet is between a /28 netmask (16 IP addresses)
  and
  a /16 netmask (65,536 IP addresses). Amazon Web Services reserves both the first
  four and
  the last IPv4 address in each subnet's CIDR block. They're not available for
  your use.

  If you've associated an IPv6 CIDR block with your VPC, you can associate an IPv6
  CIDR
  block with a subnet when you create it.

  If you add more than one subnet to a VPC, they're set up in a star topology with
  a
  logical router in the middle.

  When you stop an instance in a subnet, it retains its private IPv4 address. It's
  therefore possible to have a subnet with no running instances (they're all
  stopped), but
  no remaining IP addresses available.

  For more information, see
  [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html)
  in the *Amazon VPC User Guide*.
  """
  @spec create_subnet(map(), create_subnet_request(), list()) ::
          {:ok, create_subnet_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_subnet(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateSubnet", input, options)
  end

  @doc """
  Creates a subnet CIDR reservation.

  For more information, see [Subnet CIDR reservations](https://docs.aws.amazon.com/vpc/latest/userguide/subnet-cidr-reservation.html)
  in the *Amazon VPC User Guide* and [Manage prefixes for your network
  interfaces](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-prefixes.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec create_subnet_cidr_reservation(map(), create_subnet_cidr_reservation_request(), list()) ::
          {:ok, create_subnet_cidr_reservation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_subnet_cidr_reservation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateSubnetCidrReservation", input, options)
  end

  @doc """
  Adds or overwrites only the specified tags for the specified Amazon EC2 resource
  or
  resources.

  When you specify an existing tag key, the value is overwritten with
  the new value. Each resource can have a maximum of 50 tags. Each tag consists of
  a key and
  optional value. Tag keys must be unique per resource.

  For more information about tags, see [Tag your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)
  in the
  *Amazon Elastic Compute Cloud User Guide*. For more information about
  creating IAM policies that control users' access to resources based on tags, see
  [Supported resource-level permissions for Amazon EC2 API
  actions](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html)
  in the *Amazon
  Elastic Compute Cloud User Guide*.
  """
  @spec create_tags(map(), create_tags_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_tags(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTags", input, options)
  end

  @doc """
  Creates a Traffic Mirror filter.

  A Traffic Mirror filter is a set of rules that defines the traffic to mirror.

  By default, no traffic is mirrored. To mirror traffic, use
  [CreateTrafficMirrorFilterRule](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilterRule.htm) to add Traffic Mirror rules to the filter. The rules you add define what traffic
  gets mirrored.
  You can also use
  [ModifyTrafficMirrorFilterNetworkServices](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyTrafficMirrorFilterNetworkServices.html)
  to mirror supported network services.
  """
  @spec create_traffic_mirror_filter(map(), create_traffic_mirror_filter_request(), list()) ::
          {:ok, create_traffic_mirror_filter_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_traffic_mirror_filter(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTrafficMirrorFilter", input, options)
  end

  @doc """
  Creates a Traffic Mirror filter rule.

  A Traffic Mirror rule defines the Traffic Mirror source traffic to mirror.

  You need the Traffic Mirror filter ID when you create the rule.
  """
  @spec create_traffic_mirror_filter_rule(
          map(),
          create_traffic_mirror_filter_rule_request(),
          list()
        ) ::
          {:ok, create_traffic_mirror_filter_rule_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_traffic_mirror_filter_rule(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTrafficMirrorFilterRule", input, options)
  end

  @doc """
  Creates a Traffic Mirror session.

  A Traffic Mirror session actively copies packets from a Traffic Mirror source to
  a Traffic Mirror target. Create a filter, and then assign it
  to the session to define a subset of the traffic to mirror, for example all TCP
  traffic.

  The Traffic Mirror source and the Traffic Mirror target (monitoring appliances)
  can be in the same VPC, or in a different VPC connected via VPC peering or a
  transit gateway.

  By default, no traffic is mirrored. Use
  [CreateTrafficMirrorFilter](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilter.html)
  to
  create filter rules that specify the traffic to mirror.
  """
  @spec create_traffic_mirror_session(map(), create_traffic_mirror_session_request(), list()) ::
          {:ok, create_traffic_mirror_session_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_traffic_mirror_session(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTrafficMirrorSession", input, options)
  end

  @doc """
  Creates a target for your Traffic Mirror session.

  A Traffic Mirror target is the destination for mirrored traffic. The Traffic
  Mirror source and
  the Traffic Mirror target (monitoring appliances) can be in the same VPC, or in
  different VPCs connected via VPC peering or a transit gateway.

  A Traffic Mirror target can be a network interface, a Network Load Balancer, or
  a Gateway Load Balancer endpoint.

  To use the target in a Traffic Mirror session, use
  [CreateTrafficMirrorSession](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorSession.htm).
  """
  @spec create_traffic_mirror_target(map(), create_traffic_mirror_target_request(), list()) ::
          {:ok, create_traffic_mirror_target_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_traffic_mirror_target(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTrafficMirrorTarget", input, options)
  end

  @doc """
  Creates a transit gateway.

  You can use a transit gateway to interconnect your virtual private clouds (VPC)
  and on-premises networks.
  After the transit gateway enters the `available` state, you can attach your VPCs
  and VPN
  connections to the transit gateway.

  To attach your VPCs, use `CreateTransitGatewayVpcAttachment`.

  To attach a VPN connection, use `CreateCustomerGateway` to create a customer
  gateway and specify the ID of the customer gateway and the ID of the transit
  gateway in a call to
  `CreateVpnConnection`.

  When you create a transit gateway, we create a default transit gateway route
  table and use it as the default association route table
  and the default propagation route table. You can use
  `CreateTransitGatewayRouteTable` to create
  additional transit gateway route tables. If you disable automatic route
  propagation, we do not create a default transit gateway route table.
  You can use `EnableTransitGatewayRouteTablePropagation` to propagate routes from
  a resource
  attachment to a transit gateway route table. If you disable automatic
  associations, you can use `AssociateTransitGatewayRouteTable` to associate a
  resource attachment with a transit gateway route table.
  """
  @spec create_transit_gateway(map(), create_transit_gateway_request(), list()) ::
          {:ok, create_transit_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGateway", input, options)
  end

  @doc """
  Creates a Connect attachment from a specified transit gateway attachment.

  A Connect attachment is a GRE-based tunnel attachment that you can use to
  establish a connection between a transit gateway and an appliance.

  A Connect attachment uses an existing VPC or Amazon Web Services Direct Connect
  attachment as the underlying transport mechanism.
  """
  @spec create_transit_gateway_connect(map(), create_transit_gateway_connect_request(), list()) ::
          {:ok, create_transit_gateway_connect_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_connect(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGatewayConnect", input, options)
  end

  @doc """
  Creates a Connect peer for a specified transit gateway Connect attachment
  between a
  transit gateway and an appliance.

  The peer address and transit gateway address must be the same IP address family
  (IPv4 or IPv6).

  For more information, see [Connect peers](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html#tgw-connect-peer)
  in the *Amazon Web Services Transit Gateways Guide*.
  """
  @spec create_transit_gateway_connect_peer(
          map(),
          create_transit_gateway_connect_peer_request(),
          list()
        ) ::
          {:ok, create_transit_gateway_connect_peer_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_connect_peer(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGatewayConnectPeer", input, options)
  end

  @doc """
  Creates a multicast domain using the specified transit gateway.

  The transit gateway must be in the available state before you create a domain.
  Use
  [DescribeTransitGateways](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTransitGateways.html)
  to see the state of transit gateway.
  """
  @spec create_transit_gateway_multicast_domain(
          map(),
          create_transit_gateway_multicast_domain_request(),
          list()
        ) ::
          {:ok, create_transit_gateway_multicast_domain_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_multicast_domain(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGatewayMulticastDomain", input, options)
  end

  @doc """
  Requests a transit gateway peering attachment between the specified transit
  gateway
  (requester) and a peer transit gateway (accepter).

  The peer transit gateway can be in
  your account or a different Amazon Web Services account.

  After you create the peering attachment, the owner of the accepter transit
  gateway
  must accept the attachment request.
  """
  @spec create_transit_gateway_peering_attachment(
          map(),
          create_transit_gateway_peering_attachment_request(),
          list()
        ) ::
          {:ok, create_transit_gateway_peering_attachment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_peering_attachment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGatewayPeeringAttachment", input, options)
  end

  @doc """
  Creates a transit gateway policy table.
  """
  @spec create_transit_gateway_policy_table(
          map(),
          create_transit_gateway_policy_table_request(),
          list()
        ) ::
          {:ok, create_transit_gateway_policy_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_policy_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGatewayPolicyTable", input, options)
  end

  @doc """
  Creates a reference (route) to a prefix list in a specified transit gateway
  route table.
  """
  @spec create_transit_gateway_prefix_list_reference(
          map(),
          create_transit_gateway_prefix_list_reference_request(),
          list()
        ) ::
          {:ok, create_transit_gateway_prefix_list_reference_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_prefix_list_reference(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGatewayPrefixListReference", input, options)
  end

  @doc """
  Creates a static route for the specified transit gateway route table.
  """
  @spec create_transit_gateway_route(map(), create_transit_gateway_route_request(), list()) ::
          {:ok, create_transit_gateway_route_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGatewayRoute", input, options)
  end

  @doc """
  Creates a route table for the specified transit gateway.
  """
  @spec create_transit_gateway_route_table(
          map(),
          create_transit_gateway_route_table_request(),
          list()
        ) ::
          {:ok, create_transit_gateway_route_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGatewayRouteTable", input, options)
  end

  @doc """
  Advertises a new transit gateway route table.
  """
  @spec create_transit_gateway_route_table_announcement(
          map(),
          create_transit_gateway_route_table_announcement_request(),
          list()
        ) ::
          {:ok, create_transit_gateway_route_table_announcement_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_route_table_announcement(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "CreateTransitGatewayRouteTableAnnouncement",
      input,
      options
    )
  end

  @doc """
  Attaches the specified VPC to the specified transit gateway.

  If you attach a VPC with a CIDR range that overlaps the CIDR range of a VPC that
  is already attached,
  the new VPC CIDR range is not propagated to the default propagation route table.

  To send VPC traffic to an attached transit gateway, add a route to the VPC route
  table using `CreateRoute`.
  """
  @spec create_transit_gateway_vpc_attachment(
          map(),
          create_transit_gateway_vpc_attachment_request(),
          list()
        ) ::
          {:ok, create_transit_gateway_vpc_attachment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_transit_gateway_vpc_attachment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateTransitGatewayVpcAttachment", input, options)
  end

  @doc """
  An Amazon Web Services Verified Access endpoint is where you define your
  application along with an optional endpoint-level access policy.
  """
  @spec create_verified_access_endpoint(map(), create_verified_access_endpoint_request(), list()) ::
          {:ok, create_verified_access_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_verified_access_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVerifiedAccessEndpoint", input, options)
  end

  @doc """
  An Amazon Web Services Verified Access group is a collection of Amazon Web
  Services Verified Access endpoints who's associated applications have
  similar security requirements.

  Each instance within a Verified Access group shares an Verified Access policy.
  For
  example, you can group all Verified Access instances associated with "sales"
  applications together and
  use one common Verified Access policy.
  """
  @spec create_verified_access_group(map(), create_verified_access_group_request(), list()) ::
          {:ok, create_verified_access_group_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_verified_access_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVerifiedAccessGroup", input, options)
  end

  @doc """
  An Amazon Web Services Verified Access instance is a regional entity that
  evaluates application requests and grants
  access only when your security requirements are met.
  """
  @spec create_verified_access_instance(map(), create_verified_access_instance_request(), list()) ::
          {:ok, create_verified_access_instance_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_verified_access_instance(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVerifiedAccessInstance", input, options)
  end

  @doc """
  A trust provider is a third-party entity that creates, maintains, and manages
  identity
  information for users and devices.

  When an application request is made, the identity
  information sent by the trust provider is evaluated by Verified Access before
  allowing or
  denying the application request.
  """
  @spec create_verified_access_trust_provider(
          map(),
          create_verified_access_trust_provider_request(),
          list()
        ) ::
          {:ok, create_verified_access_trust_provider_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_verified_access_trust_provider(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVerifiedAccessTrustProvider", input, options)
  end

  @doc """
  Creates an EBS volume that can be attached to an instance in the same
  Availability Zone.

  You can create a new empty volume or restore a volume from an EBS snapshot.
  Any Amazon Web Services Marketplace product codes from the snapshot are
  propagated to the volume.

  You can create encrypted volumes. Encrypted volumes must be attached to
  instances that
  support Amazon EBS encryption. Volumes that are created from encrypted snapshots
  are also automatically
  encrypted. For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)
  in the *Amazon EBS User Guide*.

  You can tag your volumes during creation. For more information, see [Tag your Amazon EC2
  resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)
  in the *Amazon EC2 User Guide*.

  For more information, see [Create an Amazon EBS volume](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html)
  in the
  *Amazon EBS User Guide*.
  """
  @spec create_volume(map(), create_volume_request(), list()) ::
          {:ok, volume(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_volume(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVolume", input, options)
  end

  @doc """
  Creates a VPC with the specified CIDR blocks.

  For more information, see [IP addressing for your VPCs and subnets](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html)
  in the
  *Amazon VPC User Guide*.

  You can optionally request an IPv6 CIDR block for the VPC. You can request an
  Amazon-provided IPv6 CIDR block from Amazon's pool of IPv6 addresses or an IPv6
  CIDR
  block from an IPv6 address pool that you provisioned through bring your own IP
  addresses
  ([BYOIP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)).   By default, each instance that you launch in the VPC has the default DHCP
  options, which
  include only a default DNS server that we provide (AmazonProvidedDNS). For more
  information, see [DHCP option
  sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in
  the *Amazon VPC User Guide*.

  You can specify the instance tenancy value for the VPC when you create it. You
  can't change
  this value for the VPC after you create it. For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec create_vpc(map(), create_vpc_request(), list()) ::
          {:ok, create_vpc_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_vpc(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVpc", input, options)
  end

  @doc """
  Create a VPC Block Public Access (BPA) exclusion.

  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](https://docs.aws.amazon.com/vpc/latest/userguide/security-vpc-bpa.html)
  in the *Amazon VPC User Guide*.
  """
  @spec create_vpc_block_public_access_exclusion(
          map(),
          create_vpc_block_public_access_exclusion_request(),
          list()
        ) ::
          {:ok, create_vpc_block_public_access_exclusion_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_vpc_block_public_access_exclusion(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVpcBlockPublicAccessExclusion", input, options)
  end

  @doc """
  Creates a VPC endpoint.

  A VPC endpoint provides a private connection between the
  specified VPC and the specified endpoint service. You can use an endpoint
  service
  provided by Amazon Web Services, an Amazon Web Services Marketplace Partner, or
  another
  Amazon Web Services account. For more information, see the [Amazon Web Services PrivateLink User Guide](https://docs.aws.amazon.com/vpc/latest/privatelink/).
  """
  @spec create_vpc_endpoint(map(), create_vpc_endpoint_request(), list()) ::
          {:ok, create_vpc_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_vpc_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVpcEndpoint", input, options)
  end

  @doc """
  Creates a connection notification for a specified VPC endpoint or VPC endpoint
  service.

  A connection notification notifies you of specific endpoint events. You must
  create an SNS topic to receive notifications. For more information, see
  [Creating an Amazon SNS topic](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) in
  the *Amazon SNS Developer Guide*.

  You can create a connection notification for interface endpoints only.
  """
  @spec create_vpc_endpoint_connection_notification(
          map(),
          create_vpc_endpoint_connection_notification_request(),
          list()
        ) ::
          {:ok, create_vpc_endpoint_connection_notification_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_vpc_endpoint_connection_notification(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVpcEndpointConnectionNotification", input, options)
  end

  @doc """
  Creates a VPC endpoint service to which service consumers (Amazon Web Services
  accounts,
  users, and IAM roles) can connect.

  Before you create an endpoint service, you must create one of the following for
  your service:

    *
  A [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/).
  Service consumers connect to your service using an interface endpoint.

    *
  A [Gateway Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/).
  Service consumers connect to your service using a Gateway Load Balancer
  endpoint.

  If you set the private DNS name, you must prove that you own the private DNS
  domain
  name.

  For more information, see the [Amazon Web Services PrivateLink Guide](https://docs.aws.amazon.com/vpc/latest/privatelink/).
  """
  @spec create_vpc_endpoint_service_configuration(
          map(),
          create_vpc_endpoint_service_configuration_request(),
          list()
        ) ::
          {:ok, create_vpc_endpoint_service_configuration_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_vpc_endpoint_service_configuration(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVpcEndpointServiceConfiguration", input, options)
  end

  @doc """
  Requests a VPC peering connection between two VPCs: a requester VPC that you own
  and
  an accepter VPC with which to create the connection.

  The accepter VPC can belong to
  another Amazon Web Services account and can be in a different Region to the
  requester VPC.
  The requester VPC and accepter VPC cannot have overlapping CIDR blocks.

  Limitations and rules apply to a VPC peering connection. For more information,
  see
  the [VPC peering limitations](https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-basics.html#vpc-peering-limitations)
  in the *VPC Peering Guide*.

  The owner of the accepter VPC must accept the peering request to activate the
  peering
  connection. The VPC peering connection request expires after 7 days, after which
  it
  cannot be accepted or rejected.

  If you create a VPC peering connection request between VPCs with overlapping
  CIDR
  blocks, the VPC peering connection has a status of `failed`.
  """
  @spec create_vpc_peering_connection(map(), create_vpc_peering_connection_request(), list()) ::
          {:ok, create_vpc_peering_connection_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_vpc_peering_connection(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVpcPeeringConnection", input, options)
  end

  @doc """
  Creates a VPN connection between an existing virtual private gateway or transit
  gateway and a customer gateway.

  The supported connection type is
  `ipsec.1`.

  The response includes information that you need to give to your network
  administrator
  to configure your customer gateway.

  We strongly recommend that you use HTTPS when calling this operation because the
  response contains sensitive cryptographic information for configuring your
  customer
  gateway device.

  If you decide to shut down your VPN connection for any reason and later create a
  new
  VPN connection, you must reconfigure your customer gateway with the new
  information
  returned from this call.

  This is an idempotent operation. If you perform the operation more than once,
  Amazon
  EC2 doesn't return an error.

  For more information, see [Amazon Web Services Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) in the *Amazon
  Web Services Site-to-Site VPN
  User Guide*.
  """
  @spec create_vpn_connection(map(), create_vpn_connection_request(), list()) ::
          {:ok, create_vpn_connection_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_vpn_connection(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVpnConnection", input, options)
  end

  @doc """
  Creates a static route associated with a VPN connection between an existing
  virtual
  private gateway and a VPN customer gateway.

  The static route allows traffic to be routed
  from the virtual private gateway to the VPN customer gateway.

  For more information, see [Amazon Web Services Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) in the *Amazon
  Web Services Site-to-Site VPN
  User Guide*.
  """
  @spec create_vpn_connection_route(map(), create_vpn_connection_route_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_vpn_connection_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVpnConnectionRoute", input, options)
  end

  @doc """
  Creates a virtual private gateway.

  A virtual private gateway is the endpoint on the
  VPC side of your VPN connection. You can create a virtual private gateway before
  creating the VPC itself.

  For more information, see [Amazon Web Services Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) in the *Amazon
  Web Services Site-to-Site VPN
  User Guide*.
  """
  @spec create_vpn_gateway(map(), create_vpn_gateway_request(), list()) ::
          {:ok, create_vpn_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def create_vpn_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "CreateVpnGateway", input, options)
  end

  @doc """
  Deletes a carrier gateway.

  If you do not delete the route that contains the carrier gateway as the
  Target, the route is a blackhole route. For information about how to delete a
  route, see
  [DeleteRoute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteRoute.html).
  """
  @spec delete_carrier_gateway(map(), delete_carrier_gateway_request(), list()) ::
          {:ok, delete_carrier_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_carrier_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteCarrierGateway", input, options)
  end

  @doc """
  Deletes the specified Client VPN endpoint.

  You must disassociate all target networks before you
  can delete a Client VPN endpoint.
  """
  @spec delete_client_vpn_endpoint(map(), delete_client_vpn_endpoint_request(), list()) ::
          {:ok, delete_client_vpn_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_client_vpn_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteClientVpnEndpoint", input, options)
  end

  @doc """
  Deletes a route from a Client VPN endpoint.

  You can only delete routes that you manually added using
  the **CreateClientVpnRoute** action. You cannot delete routes that were
  automatically added when associating a subnet. To remove routes that have been
  automatically added,
  disassociate the target subnet from the Client VPN endpoint.
  """
  @spec delete_client_vpn_route(map(), delete_client_vpn_route_request(), list()) ::
          {:ok, delete_client_vpn_route_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_client_vpn_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteClientVpnRoute", input, options)
  end

  @doc """

  Deletes a range of customer-owned IP addresses.
  """
  @spec delete_coip_cidr(map(), delete_coip_cidr_request(), list()) ::
          {:ok, delete_coip_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_coip_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteCoipCidr", input, options)
  end

  @doc """
  Deletes a pool of customer-owned IP (CoIP) addresses.
  """
  @spec delete_coip_pool(map(), delete_coip_pool_request(), list()) ::
          {:ok, delete_coip_pool_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_coip_pool(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteCoipPool", input, options)
  end

  @doc """
  Deletes the specified customer gateway.

  You must delete the VPN connection before you
  can delete the customer gateway.
  """
  @spec delete_customer_gateway(map(), delete_customer_gateway_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_customer_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteCustomerGateway", input, options)
  end

  @doc """
  Deletes the specified set of DHCP options.

  You must disassociate the set of DHCP options before you can delete it. You can
  disassociate the set of DHCP options by associating either a new set of options
  or the default set of options with the VPC.
  """
  @spec delete_dhcp_options(map(), delete_dhcp_options_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_dhcp_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteDhcpOptions", input, options)
  end

  @doc """
  Deletes an egress-only internet gateway.
  """
  @spec delete_egress_only_internet_gateway(
          map(),
          delete_egress_only_internet_gateway_request(),
          list()
        ) ::
          {:ok, delete_egress_only_internet_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_egress_only_internet_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteEgressOnlyInternetGateway", input, options)
  end

  @doc """
  Deletes the specified EC2 Fleet request.

  After you delete an EC2 Fleet request, it launches no new instances.

  You must also specify whether a deleted EC2 Fleet request should terminate its
  instances. If
  you choose to terminate the instances, the EC2 Fleet request enters the
  `deleted_terminating` state. Otherwise, it enters the
  `deleted_running` state, and the instances continue to run until they are
  interrupted or you terminate them manually.

  A deleted `instant` fleet with running instances is not supported. When you
  delete an `instant` fleet, Amazon EC2 automatically terminates all its
  instances. For
  fleets with more than 1000 instances, the deletion request might fail. If your
  fleet has
  more than 1000 instances, first terminate most of the instances manually,
  leaving 1000 or
  fewer. Then delete the fleet, and the remaining instances will be terminated
  automatically.

  ## Restrictions

    *
  You can delete up to 25 fleets of type `instant` in a single
  request.

    *
  You can delete up to 100 fleets of type `maintain` or
  `request` in a single request.

    *
  You can delete up to 125 fleets in a single request, provided you do not exceed
  the quota for each fleet type, as specified above.

    *
  If you exceed the specified number of fleets to delete, no fleets are
  deleted.

  For more information, see [Delete an EC2 Fleet request and the instances in the
  fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/delete-fleet.html) in
  the *Amazon EC2 User Guide*.
  """
  @spec delete_fleets(map(), delete_fleets_request(), list()) ::
          {:ok, delete_fleets_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_fleets(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteFleets", input, options)
  end

  @doc """
  Deletes one or more flow logs.
  """
  @spec delete_flow_logs(map(), delete_flow_logs_request(), list()) ::
          {:ok, delete_flow_logs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_flow_logs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteFlowLogs", input, options)
  end

  @doc """
  Deletes the specified Amazon FPGA Image (AFI).
  """
  @spec delete_fpga_image(map(), delete_fpga_image_request(), list()) ::
          {:ok, delete_fpga_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_fpga_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteFpgaImage", input, options)
  end

  @doc """
  Deletes the specified image usage report.

  For more information, see [View your AMI usage](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/your-ec2-ami-usage.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec delete_image_usage_report(map(), delete_image_usage_report_request(), list()) ::
          {:ok, delete_image_usage_report_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_image_usage_report(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteImageUsageReport", input, options)
  end

  @doc """
  Deletes the specified EC2 Instance Connect Endpoint.
  """
  @spec delete_instance_connect_endpoint(
          map(),
          delete_instance_connect_endpoint_request(),
          list()
        ) ::
          {:ok, delete_instance_connect_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_instance_connect_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteInstanceConnectEndpoint", input, options)
  end

  @doc """
  Deletes the specified event window.

  For more information, see [Define event windows for scheduled events](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec delete_instance_event_window(map(), delete_instance_event_window_request(), list()) ::
          {:ok, delete_instance_event_window_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_instance_event_window(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteInstanceEventWindow", input, options)
  end

  @doc """
  Deletes the specified internet gateway.

  You must detach the internet gateway from the
  VPC before you can delete it.
  """
  @spec delete_internet_gateway(map(), delete_internet_gateway_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_internet_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteInternetGateway", input, options)
  end

  @doc """
  Delete an IPAM.

  Deleting an IPAM removes all monitored data associated with the IPAM including
  the historical data for CIDRs.

  For more information, see [Delete an IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/delete-ipam.html) in the
  *Amazon VPC IPAM User Guide*.
  """
  @spec delete_ipam(map(), delete_ipam_request(), list()) ::
          {:ok, delete_ipam_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_ipam(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteIpam", input, options)
  end

  @doc """
  Delete a verification token.

  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).
  """
  @spec delete_ipam_external_resource_verification_token(
          map(),
          delete_ipam_external_resource_verification_token_request(),
          list()
        ) ::
          {:ok, delete_ipam_external_resource_verification_token_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_ipam_external_resource_verification_token(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DeleteIpamExternalResourceVerificationToken",
      input,
      options
    )
  end

  @doc """
  Delete an IPAM pool.

  You cannot delete an IPAM pool if there are allocations in it or CIDRs
  provisioned to it. To release
  allocations, see
  [ReleaseIpamPoolAllocation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReleaseIpamPoolAllocation.html). To deprovision pool
  CIDRs, see
  [DeprovisionIpamPoolCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeprovisionIpamPoolCidr.html).

  For more information, see [Delete a pool](https://docs.aws.amazon.com/vpc/latest/ipam/delete-pool-ipam.html) in the
  *Amazon VPC IPAM User Guide*.
  """
  @spec delete_ipam_pool(map(), delete_ipam_pool_request(), list()) ::
          {:ok, delete_ipam_pool_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_ipam_pool(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteIpamPool", input, options)
  end

  @doc """
  Deletes an IPAM resource discovery.

  A resource discovery is an IPAM component that enables IPAM to manage and
  monitor resources that belong to the owning account.
  """
  @spec delete_ipam_resource_discovery(map(), delete_ipam_resource_discovery_request(), list()) ::
          {:ok, delete_ipam_resource_discovery_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_ipam_resource_discovery(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteIpamResourceDiscovery", input, options)
  end

  @doc """
  Delete the scope for an IPAM.

  You cannot delete the default scopes.

  For more information, see [Delete a scope](https://docs.aws.amazon.com/vpc/latest/ipam/delete-scope-ipam.html) in
  the *Amazon VPC IPAM User Guide*.
  """
  @spec delete_ipam_scope(map(), delete_ipam_scope_request(), list()) ::
          {:ok, delete_ipam_scope_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_ipam_scope(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteIpamScope", input, options)
  end

  @doc """
  Deletes the specified key pair, by removing the public key from Amazon EC2.
  """
  @spec delete_key_pair(map(), delete_key_pair_request(), list()) ::
          {:ok, delete_key_pair_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_key_pair(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteKeyPair", input, options)
  end

  @doc """
  Deletes a launch template.

  Deleting a launch template deletes all of its
  versions.
  """
  @spec delete_launch_template(map(), delete_launch_template_request(), list()) ::
          {:ok, delete_launch_template_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_launch_template(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteLaunchTemplate", input, options)
  end

  @doc """
  Deletes one or more versions of a launch template.

  You can't delete the default version of a launch template; you must first assign
  a
  different version as the default. If the default version is the only version for
  the
  launch template, you must delete the entire launch template using
  `DeleteLaunchTemplate`.

  You can delete up to 200 launch template versions in a single request. To delete
  more
  than 200 versions in a single request, use `DeleteLaunchTemplate`, which
  deletes the launch template and all of its versions.

  For more information, see [Delete a launch template version](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/delete-launch-template.html#delete-launch-template-version)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec delete_launch_template_versions(map(), delete_launch_template_versions_request(), list()) ::
          {:ok, delete_launch_template_versions_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_launch_template_versions(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteLaunchTemplateVersions", input, options)
  end

  @doc """
  Deletes the specified route from the specified local gateway route table.
  """
  @spec delete_local_gateway_route(map(), delete_local_gateway_route_request(), list()) ::
          {:ok, delete_local_gateway_route_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_local_gateway_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteLocalGatewayRoute", input, options)
  end

  @doc """

  Deletes a local gateway route table.
  """
  @spec delete_local_gateway_route_table(
          map(),
          delete_local_gateway_route_table_request(),
          list()
        ) ::
          {:ok, delete_local_gateway_route_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_local_gateway_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteLocalGatewayRouteTable", input, options)
  end

  @doc """

  Deletes a local gateway route table virtual interface group association.
  """
  @spec delete_local_gateway_route_table_virtual_interface_group_association(
          map(),
          delete_local_gateway_route_table_virtual_interface_group_association_request(),
          list()
        ) ::
          {:ok, delete_local_gateway_route_table_virtual_interface_group_association_result(),
           any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_local_gateway_route_table_virtual_interface_group_association(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation",
      input,
      options
    )
  end

  @doc """
  Deletes the specified association between a VPC and local gateway route table.
  """
  @spec delete_local_gateway_route_table_vpc_association(
          map(),
          delete_local_gateway_route_table_vpc_association_request(),
          list()
        ) ::
          {:ok, delete_local_gateway_route_table_vpc_association_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_local_gateway_route_table_vpc_association(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DeleteLocalGatewayRouteTableVpcAssociation",
      input,
      options
    )
  end

  @doc """
  Deletes the specified local gateway virtual interface.
  """
  @spec delete_local_gateway_virtual_interface(
          map(),
          delete_local_gateway_virtual_interface_request(),
          list()
        ) ::
          {:ok, delete_local_gateway_virtual_interface_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_local_gateway_virtual_interface(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteLocalGatewayVirtualInterface", input, options)
  end

  @doc """
  Delete the specified local gateway interface group.
  """
  @spec delete_local_gateway_virtual_interface_group(
          map(),
          delete_local_gateway_virtual_interface_group_request(),
          list()
        ) ::
          {:ok, delete_local_gateway_virtual_interface_group_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_local_gateway_virtual_interface_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteLocalGatewayVirtualInterfaceGroup", input, options)
  end

  @doc """
  Deletes the specified managed prefix list.

  You must first remove all references to the prefix list in your resources.
  """
  @spec delete_managed_prefix_list(map(), delete_managed_prefix_list_request(), list()) ::
          {:ok, delete_managed_prefix_list_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_managed_prefix_list(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteManagedPrefixList", input, options)
  end

  @doc """
  Deletes the specified NAT gateway.

  Deleting a public NAT gateway disassociates its Elastic IP address,
  but does not release the address from your account. Deleting a NAT gateway does
  not delete any NAT gateway
  routes in your route tables.
  """
  @spec delete_nat_gateway(map(), delete_nat_gateway_request(), list()) ::
          {:ok, delete_nat_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_nat_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteNatGateway", input, options)
  end

  @doc """
  Deletes the specified network ACL.

  You can't delete the ACL if it's associated with any subnets. You can't delete
  the default network ACL.
  """
  @spec delete_network_acl(map(), delete_network_acl_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_network_acl(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteNetworkAcl", input, options)
  end

  @doc """
  Deletes the specified ingress or egress entry (rule) from the specified network
  ACL.
  """
  @spec delete_network_acl_entry(map(), delete_network_acl_entry_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_network_acl_entry(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteNetworkAclEntry", input, options)
  end

  @doc """
  Deletes the specified Network Access Scope.
  """
  @spec delete_network_insights_access_scope(
          map(),
          delete_network_insights_access_scope_request(),
          list()
        ) ::
          {:ok, delete_network_insights_access_scope_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_network_insights_access_scope(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteNetworkInsightsAccessScope", input, options)
  end

  @doc """
  Deletes the specified Network Access Scope analysis.
  """
  @spec delete_network_insights_access_scope_analysis(
          map(),
          delete_network_insights_access_scope_analysis_request(),
          list()
        ) ::
          {:ok, delete_network_insights_access_scope_analysis_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_network_insights_access_scope_analysis(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteNetworkInsightsAccessScopeAnalysis", input, options)
  end

  @doc """
  Deletes the specified network insights analysis.
  """
  @spec delete_network_insights_analysis(
          map(),
          delete_network_insights_analysis_request(),
          list()
        ) ::
          {:ok, delete_network_insights_analysis_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_network_insights_analysis(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteNetworkInsightsAnalysis", input, options)
  end

  @doc """
  Deletes the specified path.
  """
  @spec delete_network_insights_path(map(), delete_network_insights_path_request(), list()) ::
          {:ok, delete_network_insights_path_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_network_insights_path(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteNetworkInsightsPath", input, options)
  end

  @doc """
  Deletes the specified network interface.

  You must detach the network interface before
  you can delete it.
  """
  @spec delete_network_interface(map(), delete_network_interface_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_network_interface(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteNetworkInterface", input, options)
  end

  @doc """
  Deletes a permission for a network interface.

  By default, you cannot delete the
  permission if the account for which you're removing the permission has attached
  the
  network interface to an instance. However, you can force delete the permission,
  regardless of any attachment.
  """
  @spec delete_network_interface_permission(
          map(),
          delete_network_interface_permission_request(),
          list()
        ) ::
          {:ok, delete_network_interface_permission_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_network_interface_permission(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteNetworkInterfacePermission", input, options)
  end

  @doc """
  Deletes the specified placement group.

  You must terminate all instances in the
  placement group before you can delete the placement group. For more information,
  see
  [Placement groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec delete_placement_group(map(), delete_placement_group_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_placement_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeletePlacementGroup", input, options)
  end

  @doc """
  Delete a public IPv4 pool.

  A public IPv4 pool is an EC2 IP address pool required for the public IPv4 CIDRs
  that you own and bring to Amazon Web Services to manage with IPAM. IPv6
  addresses you bring to Amazon Web Services, however, use IPAM pools only.
  """
  @spec delete_public_ipv4_pool(map(), delete_public_ipv4_pool_request(), list()) ::
          {:ok, delete_public_ipv4_pool_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_public_ipv4_pool(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeletePublicIpv4Pool", input, options)
  end

  @doc """
  Deletes the queued purchases for the specified Reserved Instances.
  """
  @spec delete_queued_reserved_instances(
          map(),
          delete_queued_reserved_instances_request(),
          list()
        ) ::
          {:ok, delete_queued_reserved_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_queued_reserved_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteQueuedReservedInstances", input, options)
  end

  @doc """
  Deletes the specified route from the specified route table.
  """
  @spec delete_route(map(), delete_route_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteRoute", input, options)
  end

  @doc """
  Deletes the specified route server.

  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](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html).

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec delete_route_server(map(), delete_route_server_request(), list()) ::
          {:ok, delete_route_server_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_route_server(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteRouteServer", input, options)
  end

  @doc """
  Deletes the specified route server endpoint.

  A route server endpoint is an Amazon Web Services-managed component inside a
  subnet that facilitates [BGP (Border Gateway Protocol)](https://en.wikipedia.org/wiki/Border_Gateway_Protocol) connections
  between your route server and your BGP peers.
  """
  @spec delete_route_server_endpoint(map(), delete_route_server_endpoint_request(), list()) ::
          {:ok, delete_route_server_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_route_server_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteRouteServerEndpoint", input, options)
  end

  @doc """
  Deletes the specified BGP peer from a route server.

  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
  """
  @spec delete_route_server_peer(map(), delete_route_server_peer_request(), list()) ::
          {:ok, delete_route_server_peer_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_route_server_peer(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteRouteServerPeer", input, options)
  end

  @doc """
  Deletes the specified route table.

  You must disassociate the route table from any subnets before you can delete it.
  You can't delete the main route table.
  """
  @spec delete_route_table(map(), delete_route_table_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteRouteTable", input, options)
  end

  @doc """
  Deletes a security group.

  If you attempt to delete a security group that is associated with an instance or
  network interface, is
  referenced by another security group in the same VPC, or has a VPC association,
  the operation fails with
  `DependencyViolation`.
  """
  @spec delete_security_group(map(), delete_security_group_request(), list()) ::
          {:ok, delete_security_group_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_security_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteSecurityGroup", input, options)
  end

  @doc """
  Deletes the specified snapshot.

  When you make periodic snapshots of a volume, the snapshots are incremental, and
  only the
  blocks on the device that have changed since your last snapshot are saved in the
  new snapshot.
  When you delete a snapshot, only the data not needed for any other snapshot is
  removed. So
  regardless of which prior snapshots have been deleted, all active snapshots will
  have access
  to all the information needed to restore the volume.

  You cannot delete a snapshot of the root device of an EBS volume used by a
  registered AMI.
  You must first deregister the AMI before you can delete the snapshot.

  For more information, see [Delete an Amazon EBS snapshot](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-deleting-snapshot.html)
  in the
  *Amazon EBS User Guide*.
  """
  @spec delete_snapshot(map(), delete_snapshot_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_snapshot(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteSnapshot", input, options)
  end

  @doc """
  Deletes the data feed for Spot Instances.
  """
  @spec delete_spot_datafeed_subscription(
          map(),
          delete_spot_datafeed_subscription_request(),
          list()
        ) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_spot_datafeed_subscription(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteSpotDatafeedSubscription", input, options)
  end

  @doc """
  Deletes the specified subnet.

  You must terminate all running instances in the subnet before you can delete the
  subnet.
  """
  @spec delete_subnet(map(), delete_subnet_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_subnet(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteSubnet", input, options)
  end

  @doc """
  Deletes a subnet CIDR reservation.
  """
  @spec delete_subnet_cidr_reservation(map(), delete_subnet_cidr_reservation_request(), list()) ::
          {:ok, delete_subnet_cidr_reservation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_subnet_cidr_reservation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteSubnetCidrReservation", input, options)
  end

  @doc """
  Deletes the specified set of tags from the specified set of resources.

  To list the current tags, use `DescribeTags`. For more information about
  tags, see [Tag your Amazon EC2
  resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)
  in the *Amazon Elastic Compute Cloud User
  Guide*.
  """
  @spec delete_tags(map(), delete_tags_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_tags(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTags", input, options)
  end

  @doc """
  Deletes the specified Traffic Mirror filter.

  You cannot delete a Traffic Mirror filter that is in use by a Traffic Mirror
  session.
  """
  @spec delete_traffic_mirror_filter(map(), delete_traffic_mirror_filter_request(), list()) ::
          {:ok, delete_traffic_mirror_filter_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_traffic_mirror_filter(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTrafficMirrorFilter", input, options)
  end

  @doc """
  Deletes the specified Traffic Mirror rule.
  """
  @spec delete_traffic_mirror_filter_rule(
          map(),
          delete_traffic_mirror_filter_rule_request(),
          list()
        ) ::
          {:ok, delete_traffic_mirror_filter_rule_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_traffic_mirror_filter_rule(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTrafficMirrorFilterRule", input, options)
  end

  @doc """
  Deletes the specified Traffic Mirror session.
  """
  @spec delete_traffic_mirror_session(map(), delete_traffic_mirror_session_request(), list()) ::
          {:ok, delete_traffic_mirror_session_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_traffic_mirror_session(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTrafficMirrorSession", input, options)
  end

  @doc """
  Deletes the specified Traffic Mirror target.

  You cannot delete a Traffic Mirror target that is in use by a Traffic Mirror
  session.
  """
  @spec delete_traffic_mirror_target(map(), delete_traffic_mirror_target_request(), list()) ::
          {:ok, delete_traffic_mirror_target_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_traffic_mirror_target(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTrafficMirrorTarget", input, options)
  end

  @doc """
  Deletes the specified transit gateway.
  """
  @spec delete_transit_gateway(map(), delete_transit_gateway_request(), list()) ::
          {:ok, delete_transit_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGateway", input, options)
  end

  @doc """
  Deletes the specified Connect attachment.

  You must first delete any Connect peers for
  the attachment.
  """
  @spec delete_transit_gateway_connect(map(), delete_transit_gateway_connect_request(), list()) ::
          {:ok, delete_transit_gateway_connect_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_connect(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGatewayConnect", input, options)
  end

  @doc """
  Deletes the specified Connect peer.
  """
  @spec delete_transit_gateway_connect_peer(
          map(),
          delete_transit_gateway_connect_peer_request(),
          list()
        ) ::
          {:ok, delete_transit_gateway_connect_peer_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_connect_peer(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGatewayConnectPeer", input, options)
  end

  @doc """
  Deletes the specified transit gateway multicast domain.
  """
  @spec delete_transit_gateway_multicast_domain(
          map(),
          delete_transit_gateway_multicast_domain_request(),
          list()
        ) ::
          {:ok, delete_transit_gateway_multicast_domain_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_multicast_domain(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGatewayMulticastDomain", input, options)
  end

  @doc """
  Deletes a transit gateway peering attachment.
  """
  @spec delete_transit_gateway_peering_attachment(
          map(),
          delete_transit_gateway_peering_attachment_request(),
          list()
        ) ::
          {:ok, delete_transit_gateway_peering_attachment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_peering_attachment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGatewayPeeringAttachment", input, options)
  end

  @doc """
  Deletes the specified transit gateway policy table.
  """
  @spec delete_transit_gateway_policy_table(
          map(),
          delete_transit_gateway_policy_table_request(),
          list()
        ) ::
          {:ok, delete_transit_gateway_policy_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_policy_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGatewayPolicyTable", input, options)
  end

  @doc """
  Deletes a reference (route) to a prefix list in a specified transit gateway
  route table.
  """
  @spec delete_transit_gateway_prefix_list_reference(
          map(),
          delete_transit_gateway_prefix_list_reference_request(),
          list()
        ) ::
          {:ok, delete_transit_gateway_prefix_list_reference_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_prefix_list_reference(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGatewayPrefixListReference", input, options)
  end

  @doc """
  Deletes the specified route from the specified transit gateway route table.
  """
  @spec delete_transit_gateway_route(map(), delete_transit_gateway_route_request(), list()) ::
          {:ok, delete_transit_gateway_route_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGatewayRoute", input, options)
  end

  @doc """
  Deletes the specified transit gateway route table.

  If there are any route tables associated with
  the transit gateway route table, you must first run `DisassociateRouteTable`
  before you can delete the transit gateway route table. This removes any route
  tables associated with the transit gateway route table.
  """
  @spec delete_transit_gateway_route_table(
          map(),
          delete_transit_gateway_route_table_request(),
          list()
        ) ::
          {:ok, delete_transit_gateway_route_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGatewayRouteTable", input, options)
  end

  @doc """
  Advertises to the transit gateway that a transit gateway route table is deleted.
  """
  @spec delete_transit_gateway_route_table_announcement(
          map(),
          delete_transit_gateway_route_table_announcement_request(),
          list()
        ) ::
          {:ok, delete_transit_gateway_route_table_announcement_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_route_table_announcement(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DeleteTransitGatewayRouteTableAnnouncement",
      input,
      options
    )
  end

  @doc """
  Deletes the specified VPC attachment.
  """
  @spec delete_transit_gateway_vpc_attachment(
          map(),
          delete_transit_gateway_vpc_attachment_request(),
          list()
        ) ::
          {:ok, delete_transit_gateway_vpc_attachment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_transit_gateway_vpc_attachment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteTransitGatewayVpcAttachment", input, options)
  end

  @doc """
  Delete an Amazon Web Services Verified Access endpoint.
  """
  @spec delete_verified_access_endpoint(map(), delete_verified_access_endpoint_request(), list()) ::
          {:ok, delete_verified_access_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_verified_access_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVerifiedAccessEndpoint", input, options)
  end

  @doc """
  Delete an Amazon Web Services Verified Access group.
  """
  @spec delete_verified_access_group(map(), delete_verified_access_group_request(), list()) ::
          {:ok, delete_verified_access_group_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_verified_access_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVerifiedAccessGroup", input, options)
  end

  @doc """
  Delete an Amazon Web Services Verified Access instance.
  """
  @spec delete_verified_access_instance(map(), delete_verified_access_instance_request(), list()) ::
          {:ok, delete_verified_access_instance_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_verified_access_instance(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVerifiedAccessInstance", input, options)
  end

  @doc """
  Delete an Amazon Web Services Verified Access trust provider.
  """
  @spec delete_verified_access_trust_provider(
          map(),
          delete_verified_access_trust_provider_request(),
          list()
        ) ::
          {:ok, delete_verified_access_trust_provider_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_verified_access_trust_provider(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVerifiedAccessTrustProvider", input, options)
  end

  @doc """
  Deletes the specified EBS volume.

  The volume must be in the `available` state
  (not attached to an instance).

  The volume can remain in the `deleting` state for several minutes.

  For more information, see [Delete an Amazon EBS volume](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-deleting-volume.html)
  in the
  *Amazon EBS User Guide*.
  """
  @spec delete_volume(map(), delete_volume_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_volume(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVolume", input, options)
  end

  @doc """
  Deletes the specified VPC.

  You must detach or delete all gateways and resources that are associated
  with the VPC before you can delete it. For example, you must terminate all
  instances running in the VPC,
  delete all security groups associated with the VPC (except the default one),
  delete all route tables
  associated with the VPC (except the default one), and so on. When you delete the
  VPC, it deletes the
  default security group, network ACL, and route table for the VPC.

  If you created a flow log for the VPC that you are deleting, note that flow logs
  for deleted
  VPCs are eventually automatically removed.
  """
  @spec delete_vpc(map(), delete_vpc_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_vpc(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVpc", input, options)
  end

  @doc """
  Delete a VPC Block Public Access (BPA) exclusion.

  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](https://docs.aws.amazon.com/vpc/latest/userguide/security-vpc-bpa.html)
  in the *Amazon VPC User Guide*.
  """
  @spec delete_vpc_block_public_access_exclusion(
          map(),
          delete_vpc_block_public_access_exclusion_request(),
          list()
        ) ::
          {:ok, delete_vpc_block_public_access_exclusion_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_vpc_block_public_access_exclusion(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVpcBlockPublicAccessExclusion", input, options)
  end

  @doc """
  Deletes the specified VPC endpoint connection notifications.
  """
  @spec delete_vpc_endpoint_connection_notifications(
          map(),
          delete_vpc_endpoint_connection_notifications_request(),
          list()
        ) ::
          {:ok, delete_vpc_endpoint_connection_notifications_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_vpc_endpoint_connection_notifications(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVpcEndpointConnectionNotifications", input, options)
  end

  @doc """
  Deletes the specified VPC endpoint service configurations.

  Before you can delete
  an endpoint service configuration, you must reject any `Available` or
  `PendingAcceptance` interface endpoint connections that are attached to
  the service.
  """
  @spec delete_vpc_endpoint_service_configurations(
          map(),
          delete_vpc_endpoint_service_configurations_request(),
          list()
        ) ::
          {:ok, delete_vpc_endpoint_service_configurations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_vpc_endpoint_service_configurations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVpcEndpointServiceConfigurations", input, options)
  end

  @doc """
  Deletes the specified VPC endpoints.

  When you delete a gateway endpoint, we delete the endpoint routes in the route
  tables for the endpoint.

  When you delete a Gateway Load Balancer endpoint, we delete its endpoint network
  interfaces.
  You can only delete Gateway Load Balancer endpoints when the routes that are
  associated with the endpoint are deleted.

  When you delete an interface endpoint, we delete its endpoint network
  interfaces.
  """
  @spec delete_vpc_endpoints(map(), delete_vpc_endpoints_request(), list()) ::
          {:ok, delete_vpc_endpoints_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_vpc_endpoints(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVpcEndpoints", input, options)
  end

  @doc """
  Deletes a VPC peering connection.

  Either the owner of the requester VPC or the owner
  of the accepter VPC can delete the VPC peering connection if it's in the
  `active` state. The owner of the requester VPC can delete a VPC peering
  connection in the `pending-acceptance` state. You cannot delete a VPC peering
  connection that's in the `failed` or `rejected` state.
  """
  @spec delete_vpc_peering_connection(map(), delete_vpc_peering_connection_request(), list()) ::
          {:ok, delete_vpc_peering_connection_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_vpc_peering_connection(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVpcPeeringConnection", input, options)
  end

  @doc """
  Deletes the specified VPN connection.

  If you're deleting the VPC and its associated components, we recommend that you
  detach
  the virtual private gateway from the VPC and delete the VPC before deleting the
  VPN
  connection. If you believe that the tunnel credentials for your VPN connection
  have been
  compromised, you can delete the VPN connection and create a new one that has new
  keys,
  without needing to delete the VPC or virtual private gateway. If you create a
  new VPN
  connection, you must reconfigure the customer gateway device using the new
  configuration
  information returned with the new VPN connection ID.

  For certificate-based authentication, delete all Certificate Manager (ACM)
  private
  certificates used for the Amazon Web Services-side tunnel endpoints for the VPN
  connection before deleting the VPN connection.
  """
  @spec delete_vpn_connection(map(), delete_vpn_connection_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_vpn_connection(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVpnConnection", input, options)
  end

  @doc """
  Deletes the specified static route associated with a VPN connection between an
  existing virtual private gateway and a VPN customer gateway.

  The static route allows
  traffic to be routed from the virtual private gateway to the VPN customer
  gateway.
  """
  @spec delete_vpn_connection_route(map(), delete_vpn_connection_route_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_vpn_connection_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVpnConnectionRoute", input, options)
  end

  @doc """
  Deletes the specified virtual private gateway.

  You must first detach the virtual
  private gateway from the VPC. Note that you don't need to delete the virtual
  private
  gateway if you plan to delete and recreate the VPN connection between your VPC
  and your
  network.
  """
  @spec delete_vpn_gateway(map(), delete_vpn_gateway_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def delete_vpn_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeleteVpnGateway", input, options)
  end

  @doc """
  Releases the specified address range that you provisioned for use with your
  Amazon Web Services resources
  through bring your own IP addresses (BYOIP) and deletes the corresponding
  address pool.

  Before you can release an address range, you must stop advertising it and you
  must not
  have any IP addresses allocated from its address range.
  """
  @spec deprovision_byoip_cidr(map(), deprovision_byoip_cidr_request(), list()) ::
          {:ok, deprovision_byoip_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def deprovision_byoip_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeprovisionByoipCidr", input, options)
  end

  @doc """
  Deprovisions your Autonomous System Number (ASN) from your Amazon Web Services
  account.

  This action can only be called after any BYOIP CIDR associations are removed
  from your Amazon Web Services account with
  [DisassociateIpamByoasn](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DisassociateIpamByoasn.html). For more information, see [Tutorial: Bring your ASN to
  IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoasn.html) in the
  *Amazon VPC IPAM guide*.
  """
  @spec deprovision_ipam_byoasn(map(), deprovision_ipam_byoasn_request(), list()) ::
          {:ok, deprovision_ipam_byoasn_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def deprovision_ipam_byoasn(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeprovisionIpamByoasn", input, options)
  end

  @doc """
  Deprovision a CIDR provisioned from an IPAM pool.

  If you deprovision a CIDR from a pool that has a source pool, the CIDR is
  recycled back into the source pool. For more information, see [Deprovision pool CIDRs](https://docs.aws.amazon.com/vpc/latest/ipam/depro-pool-cidr-ipam.html) in
  the *Amazon VPC IPAM User Guide*.
  """
  @spec deprovision_ipam_pool_cidr(map(), deprovision_ipam_pool_cidr_request(), list()) ::
          {:ok, deprovision_ipam_pool_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def deprovision_ipam_pool_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeprovisionIpamPoolCidr", input, options)
  end

  @doc """
  Deprovision a CIDR from a public IPv4 pool.
  """
  @spec deprovision_public_ipv4_pool_cidr(
          map(),
          deprovision_public_ipv4_pool_cidr_request(),
          list()
        ) ::
          {:ok, deprovision_public_ipv4_pool_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def deprovision_public_ipv4_pool_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeprovisionPublicIpv4PoolCidr", input, options)
  end

  @doc """
  Deregisters the specified AMI.

  A deregistered AMI can't be used to launch new
  instances.

  If a deregistered EBS-backed AMI matches a Recycle Bin retention rule, it moves
  to the
  Recycle Bin for the specified retention period. It can be restored before its
  retention period
  expires, after which it is permanently deleted. If the deregistered AMI doesn't
  match a
  retention rule, it is permanently deleted immediately. For more information, see
  [Recover deleted Amazon EBS snapshots and EBS-backed AMIs with Recycle
  Bin](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html) in
  the *Amazon EBS User
  Guide*.

  When deregistering an EBS-backed AMI, you can optionally delete its associated
  snapshots
  at the same time. However, if a snapshot is associated with multiple AMIs, it
  won't be deleted
  even if specified for deletion, although the AMI will still be deregistered.

  Deregistering an AMI does not delete the following:

    *
  Instances already launched from the AMI. You'll continue to incur usage costs
  for the
  instances until you terminate them.

    *
  For EBS-backed AMIs: Snapshots that are associated with multiple AMIs. You'll
  continue
  to incur snapshot storage costs.

    *
  For instance store-backed AMIs: The files uploaded to Amazon S3 during AMI
  creation. You'll
  continue to incur S3 storage costs.

  For more information, see [Deregister an Amazon EC2 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html) in
  the
  *Amazon EC2 User Guide*.
  """
  @spec deregister_image(map(), deregister_image_request(), list()) ::
          {:ok, deregister_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def deregister_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DeregisterImage", input, options)
  end

  @doc """
  Deregisters tag keys to prevent tags that have the specified tag keys from being
  included in scheduled event notifications for resources in the Region.
  """
  @spec deregister_instance_event_notification_attributes(
          map(),
          deregister_instance_event_notification_attributes_request(),
          list()
        ) ::
          {:ok, deregister_instance_event_notification_attributes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def deregister_instance_event_notification_attributes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DeregisterInstanceEventNotificationAttributes",
      input,
      options
    )
  end

  @doc """
  Deregisters the specified members (network interfaces) from the transit gateway
  multicast group.
  """
  @spec deregister_transit_gateway_multicast_group_members(
          map(),
          deregister_transit_gateway_multicast_group_members_request(),
          list()
        ) ::
          {:ok, deregister_transit_gateway_multicast_group_members_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def deregister_transit_gateway_multicast_group_members(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DeregisterTransitGatewayMulticastGroupMembers",
      input,
      options
    )
  end

  @doc """
  Deregisters the specified sources (network interfaces) from the transit gateway
  multicast group.
  """
  @spec deregister_transit_gateway_multicast_group_sources(
          map(),
          deregister_transit_gateway_multicast_group_sources_request(),
          list()
        ) ::
          {:ok, deregister_transit_gateway_multicast_group_sources_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def deregister_transit_gateway_multicast_group_sources(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DeregisterTransitGatewayMulticastGroupSources",
      input,
      options
    )
  end

  @doc """
  Describes attributes of your Amazon Web Services account.

  The following are the supported account attributes:

    *

  `default-vpc`: The ID of the default VPC for your account, or `none`.

    *

  `max-instances`: This attribute is no longer supported. The returned
  value does not reflect your actual vCPU limit for running On-Demand Instances.
  For more information, see [On-Demand Instance Limits](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-on-demand-instances.html#ec2-on-demand-instances-limits)
  in the
  *Amazon Elastic Compute Cloud User Guide*.

    *

  `max-elastic-ips`: The maximum number of Elastic IP addresses that you can
  allocate.

    *

  `supported-platforms`: This attribute is deprecated.

    *

  `vpc-max-elastic-ips`: The maximum number of Elastic IP addresses that you can
  allocate.

    *

  `vpc-max-security-groups-per-interface`: The maximum number of security groups
  that you can assign to a network interface.

  The order of the elements in the response, including those within nested
  structures, might vary. Applications should not assume the elements appear in a
  particular order.
  """
  @spec describe_account_attributes(map(), describe_account_attributes_request(), list()) ::
          {:ok, describe_account_attributes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_account_attributes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeAccountAttributes", input, options)
  end

  @doc """
  Describes an Elastic IP address transfer.

  For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro)
  in the *Amazon VPC User Guide*.

  When you transfer an Elastic IP address, there is a two-step handshake
  between the source and transfer Amazon Web Services accounts. When the source
  account starts the transfer,
  the transfer account has seven days to accept the Elastic IP address
  transfer. During those seven days, the source account can view the
  pending transfer by using this action. After seven days, the
  transfer expires and ownership of the Elastic IP
  address returns to the source
  account. Accepted transfers are visible to the source account for 14 days
  after the transfers have been accepted.
  """
  @spec describe_address_transfers(map(), describe_address_transfers_request(), list()) ::
          {:ok, describe_address_transfers_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_address_transfers(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeAddressTransfers", input, options)
  end

  @doc """
  Describes the specified Elastic IP addresses or all of your Elastic IP
  addresses.
  """
  @spec describe_addresses(map(), describe_addresses_request(), list()) ::
          {:ok, describe_addresses_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_addresses(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeAddresses", input, options)
  end

  @doc """
  Describes the attributes of the specified Elastic IP addresses.

  For requirements, see [Using reverse DNS for email applications](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS).
  """
  @spec describe_addresses_attribute(map(), describe_addresses_attribute_request(), list()) ::
          {:ok, describe_addresses_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_addresses_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeAddressesAttribute", input, options)
  end

  @doc """
  Describes the longer ID format settings for all resource types in a specific
  Region.

  This request is useful for performing a quick audit to determine whether a
  specific Region is fully opted in for longer IDs (17-character IDs).

  This request only returns information about resource types that support longer
  IDs.

  The following resource types support longer IDs: `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`.
  """
  @spec describe_aggregate_id_format(map(), describe_aggregate_id_format_request(), list()) ::
          {:ok, describe_aggregate_id_format_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_aggregate_id_format(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeAggregateIdFormat", input, options)
  end

  @doc """
  Describes the Availability Zones, Local Zones, and Wavelength Zones that are
  available to
  you.

  For more information about Availability Zones, Local Zones, and Wavelength
  Zones, see
  [Regions and zones](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)
  in the *Amazon EC2 User Guide*.

  The order of the elements in the response, including those within nested
  structures, might vary. Applications should not assume the elements appear in a
  particular order.
  """
  @spec describe_availability_zones(map(), describe_availability_zones_request(), list()) ::
          {:ok, describe_availability_zones_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_availability_zones(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeAvailabilityZones", input, options)
  end

  @doc """
  Describes the current Infrastructure Performance metric subscriptions.
  """
  @spec describe_aws_network_performance_metric_subscriptions(
          map(),
          describe_aws_network_performance_metric_subscriptions_request(),
          list()
        ) ::
          {:ok, describe_aws_network_performance_metric_subscriptions_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_aws_network_performance_metric_subscriptions(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeAwsNetworkPerformanceMetricSubscriptions",
      input,
      options
    )
  end

  @doc """
  Describes the specified bundle tasks or all of your bundle tasks.

  Completed bundle tasks are listed for only a limited time. If your bundle task
  is no
  longer in the list, you can still register an AMI from it. Just use
  `RegisterImage` with the Amazon S3 bucket name and image manifest name you
  provided
  to the bundle task.

  The order of the elements in the response, including those within nested
  structures,
  might vary. Applications should not assume the elements appear in a particular
  order.
  """
  @spec describe_bundle_tasks(map(), describe_bundle_tasks_request(), list()) ::
          {:ok, describe_bundle_tasks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_bundle_tasks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeBundleTasks", input, options)
  end

  @doc """
  Describes the IP address ranges that were provisioned for use with Amazon Web
  Services resources
  through through bring your own IP addresses (BYOIP).
  """
  @spec describe_byoip_cidrs(map(), describe_byoip_cidrs_request(), list()) ::
          {:ok, describe_byoip_cidrs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_byoip_cidrs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeByoipCidrs", input, options)
  end

  @doc """
  Describes the events for the specified Capacity Block extension during the
  specified
  time.
  """
  @spec describe_capacity_block_extension_history(
          map(),
          describe_capacity_block_extension_history_request(),
          list()
        ) ::
          {:ok, describe_capacity_block_extension_history_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_capacity_block_extension_history(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCapacityBlockExtensionHistory", input, options)
  end

  @doc """
  Describes Capacity Block extension offerings available for purchase in the
  Amazon Web Services
  Region that you're currently using.
  """
  @spec describe_capacity_block_extension_offerings(
          map(),
          describe_capacity_block_extension_offerings_request(),
          list()
        ) ::
          {:ok, describe_capacity_block_extension_offerings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_capacity_block_extension_offerings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCapacityBlockExtensionOfferings", input, options)
  end

  @doc """
  Describes Capacity Block offerings available for purchase in the Amazon Web
  Services Region that you're currently using.

  With Capacity Blocks, you can
  purchase a specific GPU instance type or EC2 UltraServer for a period of time.

  To search for an available Capacity Block offering, you specify a reservation
  duration
  and instance count.
  """
  @spec describe_capacity_block_offerings(
          map(),
          describe_capacity_block_offerings_request(),
          list()
        ) ::
          {:ok, describe_capacity_block_offerings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_capacity_block_offerings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCapacityBlockOfferings", input, options)
  end

  @doc """
  Describes the availability of capacity for the specified Capacity blocks, or all
  of your Capacity Blocks.
  """
  @spec describe_capacity_block_status(map(), describe_capacity_block_status_request(), list()) ::
          {:ok, describe_capacity_block_status_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_capacity_block_status(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCapacityBlockStatus", input, options)
  end

  @doc """
  Describes details about Capacity Blocks in the Amazon Web Services Region that
  you're currently using.
  """
  @spec describe_capacity_blocks(map(), describe_capacity_blocks_request(), list()) ::
          {:ok, describe_capacity_blocks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_capacity_blocks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCapacityBlocks", input, options)
  end

  @doc """
  Describes a request to assign the billing of the unused capacity of a Capacity
  Reservation.

  For more information, see [ Billing assignment for shared Amazon EC2 Capacity
  Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/transfer-billing.html).
  """
  @spec describe_capacity_reservation_billing_requests(
          map(),
          describe_capacity_reservation_billing_requests_request(),
          list()
        ) ::
          {:ok, describe_capacity_reservation_billing_requests_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_capacity_reservation_billing_requests(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeCapacityReservationBillingRequests",
      input,
      options
    )
  end

  @doc """
  Describes one or more Capacity Reservation Fleets.
  """
  @spec describe_capacity_reservation_fleets(
          map(),
          describe_capacity_reservation_fleets_request(),
          list()
        ) ::
          {:ok, describe_capacity_reservation_fleets_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_capacity_reservation_fleets(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCapacityReservationFleets", input, options)
  end

  @doc """
  Describes one or more of your Capacity Reservations.

  The results describe only the
  Capacity Reservations in the Amazon Web Services Region that you're currently
  using.
  """
  @spec describe_capacity_reservations(map(), describe_capacity_reservations_request(), list()) ::
          {:ok, describe_capacity_reservations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_capacity_reservations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCapacityReservations", input, options)
  end

  @doc """
  Describes one or more of your carrier gateways.
  """
  @spec describe_carrier_gateways(map(), describe_carrier_gateways_request(), list()) ::
          {:ok, describe_carrier_gateways_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_carrier_gateways(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCarrierGateways", input, options)
  end

  @doc """

  This action is deprecated.

  Describes your linked EC2-Classic instances. This request only returns
  information about EC2-Classic instances linked to a VPC through ClassicLink. You
  cannot
  use this request to return information about other instances.
  """
  @spec describe_classic_link_instances(map(), describe_classic_link_instances_request(), list()) ::
          {:ok, describe_classic_link_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_classic_link_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeClassicLinkInstances", input, options)
  end

  @doc """
  Describes the authorization rules for a specified Client VPN endpoint.
  """
  @spec describe_client_vpn_authorization_rules(
          map(),
          describe_client_vpn_authorization_rules_request(),
          list()
        ) ::
          {:ok, describe_client_vpn_authorization_rules_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_client_vpn_authorization_rules(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeClientVpnAuthorizationRules", input, options)
  end

  @doc """
  Describes active client connections and connections that have been terminated
  within the last 60
  minutes for the specified Client VPN endpoint.
  """
  @spec describe_client_vpn_connections(map(), describe_client_vpn_connections_request(), list()) ::
          {:ok, describe_client_vpn_connections_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_client_vpn_connections(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeClientVpnConnections", input, options)
  end

  @doc """
  Describes one or more Client VPN endpoints in the account.
  """
  @spec describe_client_vpn_endpoints(map(), describe_client_vpn_endpoints_request(), list()) ::
          {:ok, describe_client_vpn_endpoints_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_client_vpn_endpoints(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeClientVpnEndpoints", input, options)
  end

  @doc """
  Describes the routes for the specified Client VPN endpoint.
  """
  @spec describe_client_vpn_routes(map(), describe_client_vpn_routes_request(), list()) ::
          {:ok, describe_client_vpn_routes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_client_vpn_routes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeClientVpnRoutes", input, options)
  end

  @doc """
  Describes the target networks associated with the specified Client VPN endpoint.
  """
  @spec describe_client_vpn_target_networks(
          map(),
          describe_client_vpn_target_networks_request(),
          list()
        ) ::
          {:ok, describe_client_vpn_target_networks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_client_vpn_target_networks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeClientVpnTargetNetworks", input, options)
  end

  @doc """
  Describes the specified customer-owned address pools or all of your
  customer-owned address pools.
  """
  @spec describe_coip_pools(map(), describe_coip_pools_request(), list()) ::
          {:ok, describe_coip_pools_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_coip_pools(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCoipPools", input, options)
  end

  @doc """
  Describes the specified conversion tasks or all your conversion tasks.

  For more information, see the
  [VM Import/Export User Guide](https://docs.aws.amazon.com/vm-import/latest/userguide/).

  For information about the import manifest referenced by this API action, see [VM Import
  Manifest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html).
  """
  @spec describe_conversion_tasks(map(), describe_conversion_tasks_request(), list()) ::
          {:ok, describe_conversion_tasks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_conversion_tasks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeConversionTasks", input, options)
  end

  @doc """
  Describes one or more of your VPN customer gateways.

  For more information, see [Amazon Web Services Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) in the *Amazon
  Web Services Site-to-Site VPN
  User Guide*.
  """
  @spec describe_customer_gateways(map(), describe_customer_gateways_request(), list()) ::
          {:ok, describe_customer_gateways_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_customer_gateways(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeCustomerGateways", input, options)
  end

  @doc """
  Describes the metadata of an account status report, including the status of the
  report.

  To view the full report, download it from the Amazon S3 bucket where it was
  saved.
  Reports are accessible only when they have the `complete` status. Reports
  with other statuses (`running`, `cancelled`, or
  `error`) are not available in the S3 bucket. For more information about
  downloading objects from an S3 bucket, see [Downloading objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)
  in
  the *Amazon Simple Storage Service User Guide*.

  For more information, see [Generating the account status report for declarative policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_status-report.html)
  in the
  *Amazon Web Services Organizations User Guide*.
  """
  @spec describe_declarative_policies_reports(
          map(),
          describe_declarative_policies_reports_request(),
          list()
        ) ::
          {:ok, describe_declarative_policies_reports_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_declarative_policies_reports(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeDeclarativePoliciesReports", input, options)
  end

  @doc """
  Describes your DHCP option sets.

  The default is to describe all your DHCP option sets.
  Alternatively, you can specify specific DHCP option set IDs or filter the
  results to
  include only the DHCP option sets that match specific criteria.

  For more information, see [DHCP option sets](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html) in
  the
  *Amazon VPC User Guide*.
  """
  @spec describe_dhcp_options(map(), describe_dhcp_options_request(), list()) ::
          {:ok, describe_dhcp_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_dhcp_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeDhcpOptions", input, options)
  end

  @doc """
  Describes your egress-only internet gateways.

  The default is to describe all your egress-only internet gateways.
  Alternatively, you can specify specific egress-only internet gateway IDs or
  filter the results to
  include only the egress-only internet gateways that match specific criteria.
  """
  @spec describe_egress_only_internet_gateways(
          map(),
          describe_egress_only_internet_gateways_request(),
          list()
        ) ::
          {:ok, describe_egress_only_internet_gateways_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_egress_only_internet_gateways(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeEgressOnlyInternetGateways", input, options)
  end

  @doc """

  Amazon Elastic Graphics reached end of life on January 8, 2024.

  Describes the Elastic Graphics accelerator associated with your instances.
  """
  @spec describe_elastic_gpus(map(), describe_elastic_gpus_request(), list()) ::
          {:ok, describe_elastic_gpus_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_elastic_gpus(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeElasticGpus", input, options)
  end

  @doc """
  Describes the specified export image tasks or all of your export image tasks.
  """
  @spec describe_export_image_tasks(map(), describe_export_image_tasks_request(), list()) ::
          {:ok, describe_export_image_tasks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_export_image_tasks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeExportImageTasks", input, options)
  end

  @doc """
  Describes the specified export instance tasks or all of your export instance
  tasks.
  """
  @spec describe_export_tasks(map(), describe_export_tasks_request(), list()) ::
          {:ok, describe_export_tasks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_export_tasks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeExportTasks", input, options)
  end

  @doc """
  Describe details for Windows AMIs that are configured for Windows fast launch.
  """
  @spec describe_fast_launch_images(map(), describe_fast_launch_images_request(), list()) ::
          {:ok, describe_fast_launch_images_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_fast_launch_images(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeFastLaunchImages", input, options)
  end

  @doc """
  Describes the state of fast snapshot restores for your snapshots.
  """
  @spec describe_fast_snapshot_restores(map(), describe_fast_snapshot_restores_request(), list()) ::
          {:ok, describe_fast_snapshot_restores_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_fast_snapshot_restores(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeFastSnapshotRestores", input, options)
  end

  @doc """
  Describes the events for the specified EC2 Fleet during the specified time.

  EC2 Fleet events are delayed by up to 30 seconds before they can be described.
  This ensures
  that you can query by the last evaluated time and not miss a recorded event. EC2
  Fleet events
  are available for 48 hours.

  For more information, see [Monitor fleet events using Amazon EventBridge](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/fleet-monitor.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec describe_fleet_history(map(), describe_fleet_history_request(), list()) ::
          {:ok, describe_fleet_history_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_fleet_history(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeFleetHistory", input, options)
  end

  @doc """
  Describes the running instances for the specified EC2 Fleet.

  Currently, `DescribeFleetInstances` does not support fleets of type
  `instant`. Instead, use `DescribeFleets`, specifying the
  `instant` fleet ID in the request.

  For more information, see [Describe your EC2
  Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#monitor-ec2-fleet)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_fleet_instances(map(), describe_fleet_instances_request(), list()) ::
          {:ok, describe_fleet_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_fleet_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeFleetInstances", input, options)
  end

  @doc """
  Describes the specified EC2 Fleet or all of your EC2 Fleets.

  If a fleet is of type `instant`, you must specify the fleet ID in the
  request, otherwise the fleet does not appear in the response.

  For more information, see [Describe your EC2
  Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#monitor-ec2-fleet)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_fleets(map(), describe_fleets_request(), list()) ::
          {:ok, describe_fleets_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_fleets(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeFleets", input, options)
  end

  @doc """
  Describes one or more flow logs.

  To view the published flow log records, you must view the log destination. For
  example,
  the CloudWatch Logs log group, the Amazon S3 bucket, or the Kinesis Data
  Firehose delivery stream.
  """
  @spec describe_flow_logs(map(), describe_flow_logs_request(), list()) ::
          {:ok, describe_flow_logs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_flow_logs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeFlowLogs", input, options)
  end

  @doc """
  Describes the specified attribute of the specified Amazon FPGA Image (AFI).
  """
  @spec describe_fpga_image_attribute(map(), describe_fpga_image_attribute_request(), list()) ::
          {:ok, describe_fpga_image_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_fpga_image_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeFpgaImageAttribute", input, options)
  end

  @doc """
  Describes the Amazon FPGA Images (AFIs) available to you.

  These include public AFIs,
  private AFIs that you own, and AFIs owned by other Amazon Web Services accounts
  for which you have load
  permissions.
  """
  @spec describe_fpga_images(map(), describe_fpga_images_request(), list()) ::
          {:ok, describe_fpga_images_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_fpga_images(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeFpgaImages", input, options)
  end

  @doc """
  Describes the Dedicated Host reservations that are available to purchase.

  The results describe all of the Dedicated Host reservation offerings, including
  offerings that might not match the instance family and Region of your Dedicated
  Hosts.
  When purchasing an offering, ensure that the instance family and Region of the
  offering
  matches that of the Dedicated Hosts with which it is to be associated. For more
  information about supported instance types, see [Dedicated Hosts](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_host_reservation_offerings(
          map(),
          describe_host_reservation_offerings_request(),
          list()
        ) ::
          {:ok, describe_host_reservation_offerings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_host_reservation_offerings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeHostReservationOfferings", input, options)
  end

  @doc """
  Describes reservations that are associated with Dedicated Hosts in your
  account.
  """
  @spec describe_host_reservations(map(), describe_host_reservations_request(), list()) ::
          {:ok, describe_host_reservations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_host_reservations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeHostReservations", input, options)
  end

  @doc """
  Describes the specified Dedicated Hosts or all your Dedicated Hosts.

  The results describe only the Dedicated Hosts in the Region you're currently
  using.
  All listed instances consume capacity on your Dedicated Host. Dedicated Hosts
  that have
  recently been released are listed with the state `released`.
  """
  @spec describe_hosts(map(), describe_hosts_request(), list()) ::
          {:ok, describe_hosts_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_hosts(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeHosts", input, options)
  end

  @doc """
  Describes your IAM instance profile associations.
  """
  @spec describe_iam_instance_profile_associations(
          map(),
          describe_iam_instance_profile_associations_request(),
          list()
        ) ::
          {:ok, describe_iam_instance_profile_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_iam_instance_profile_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeIamInstanceProfileAssociations", input, options)
  end

  @doc """
  Describes the ID format settings for your resources on a per-Region basis, for
  example, to view which resource types are enabled for longer IDs.

  This request only returns information about resource types whose ID formats can
  be modified; it does not return information about other resource types.

  The following resource types support longer IDs: `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`.

  These settings apply to the IAM user who makes the request; they do not apply to
  the entire
  Amazon Web Services account. By default, an IAM user defaults to the same
  settings as the root user, unless
  they explicitly override the settings by running the `ModifyIdFormat` command.
  Resources
  created with longer IDs are visible to all IAM users, regardless of these
  settings and
  provided that they have permission to use the relevant `Describe` command for
  the
  resource type.
  """
  @spec describe_id_format(map(), describe_id_format_request(), list()) ::
          {:ok, describe_id_format_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_id_format(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeIdFormat", input, options)
  end

  @doc """
  Describes the ID format settings for resources for the specified IAM user, IAM
  role, or root
  user.

  For example, you can view the resource types that are enabled for longer IDs.
  This request only
  returns information about resource types whose ID formats can be modified; it
  does not return
  information about other resource types. For more information, see [Resource IDs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) in
  the *Amazon Elastic Compute Cloud User Guide*.

  The following resource types support longer IDs: `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`.

  These settings apply to the principal specified in the request. They do not
  apply to the
  principal that makes the request.
  """
  @spec describe_identity_id_format(map(), describe_identity_id_format_request(), list()) ::
          {:ok, describe_identity_id_format_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_identity_id_format(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeIdentityIdFormat", input, options)
  end

  @doc """
  Describes the specified attribute of the specified AMI.

  You can specify only one attribute
  at a time.

  The order of the elements in the response, including those within nested
  structures,
  might vary. Applications should not assume the elements appear in a particular
  order.
  """
  @spec describe_image_attribute(map(), describe_image_attribute_request(), list()) ::
          {:ok, image_attribute(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_image_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeImageAttribute", input, options)
  end

  @doc """
  Describes your Amazon Web Services resources that are referencing the specified
  images.

  For more information, see [Identify your resources referencing specified
  AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-ami-references.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_image_references(map(), describe_image_references_request(), list()) ::
          {:ok, describe_image_references_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_image_references(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeImageReferences", input, options)
  end

  @doc """
  Describes the entries in image usage reports, showing how your images are used
  across
  other Amazon Web Services accounts.

  For more information, see [View your AMI usage](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/your-ec2-ami-usage.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec describe_image_usage_report_entries(
          map(),
          describe_image_usage_report_entries_request(),
          list()
        ) ::
          {:ok, describe_image_usage_report_entries_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_image_usage_report_entries(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeImageUsageReportEntries", input, options)
  end

  @doc """
  Describes the configuration and status of image usage reports, filtered by
  report IDs or
  image IDs.

  For more information, see [View your AMI usage](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/your-ec2-ami-usage.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec describe_image_usage_reports(map(), describe_image_usage_reports_request(), list()) ::
          {:ok, describe_image_usage_reports_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_image_usage_reports(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeImageUsageReports", input, options)
  end

  @doc """
  Describes the specified images (AMIs, AKIs, and ARIs) available to you or all of
  the
  images available to you.

  The images available to you include public images, private images that you own,
  and
  private images owned by other Amazon Web Services accounts for which you have
  explicit launch
  permissions.

  Recently deregistered images appear in the returned results for a short interval
  and then
  return empty results. After all instances that reference a deregistered AMI are
  terminated,
  specifying the ID of the image will eventually return an error indicating that
  the AMI ID
  cannot be found.

  When Allowed AMIs is set to `enabled`, only allowed images are returned in the
  results, with the `imageAllowed` field set to `true` for each image. In
  `audit-mode`, the `imageAllowed` field is set to `true` for
  images that meet the account's Allowed AMIs criteria, and `false` for images
  that
  don't meet the criteria. For more information, see [Allowed AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html).

  The Amazon EC2 API follows an eventual consistency model. This means that the
  result of an API
  command you run that creates or modifies resources might not be immediately
  available to all
  subsequent commands you run. For guidance on how to manage eventual consistency,
  see [Eventual consistency in the Amazon EC2
  API](https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html)
  in the *Amazon EC2 Developer
  Guide*.

  We strongly recommend using only paginated requests. Unpaginated requests are
  susceptible to throttling and timeouts.

  The order of the elements in the response, including those within nested
  structures,
  might vary. Applications should not assume the elements appear in a particular
  order.
  """
  @spec describe_images(map(), describe_images_request(), list()) ::
          {:ok, describe_images_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_images(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeImages", input, options)
  end

  @doc """
  Displays details about an import virtual machine or import snapshot tasks that
  are already created.
  """
  @spec describe_import_image_tasks(map(), describe_import_image_tasks_request(), list()) ::
          {:ok, describe_import_image_tasks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_import_image_tasks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeImportImageTasks", input, options)
  end

  @doc """
  Describes your import snapshot tasks.
  """
  @spec describe_import_snapshot_tasks(map(), describe_import_snapshot_tasks_request(), list()) ::
          {:ok, describe_import_snapshot_tasks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_import_snapshot_tasks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeImportSnapshotTasks", input, options)
  end

  @doc """
  Describes the specified attribute of the specified instance.

  You can specify only one
  attribute at a time.
  """
  @spec describe_instance_attribute(map(), describe_instance_attribute_request(), list()) ::
          {:ok, instance_attribute(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstanceAttribute", input, options)
  end

  @doc """
  Describes the specified EC2 Instance Connect Endpoints or all EC2 Instance
  Connect Endpoints.
  """
  @spec describe_instance_connect_endpoints(
          map(),
          describe_instance_connect_endpoints_request(),
          list()
        ) ::
          {:ok, describe_instance_connect_endpoints_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_connect_endpoints(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstanceConnectEndpoints", input, options)
  end

  @doc """
  Describes the credit option for CPU usage of the specified burstable performance
  instances.

  The credit options are `standard` and
  `unlimited`.

  If you do not specify an instance ID, Amazon EC2 returns burstable performance
  instances with the `unlimited` credit option, as well as instances that were
  previously configured as T2, T3, and T3a with the `unlimited` credit option.
  For example, if you resize a T2 instance, while it is configured as
  `unlimited`, to an M4 instance, Amazon EC2 returns the M4
  instance.

  If you specify one or more instance IDs, Amazon EC2 returns the credit option
  (`standard` or `unlimited`) of those instances. If you specify
  an instance ID that is not valid, such as an instance that is not a burstable
  performance instance, an error is returned.

  Recently terminated instances might appear in the returned results. This
  interval is
  usually less than one hour.

  If an Availability Zone is experiencing a service disruption and you specify
  instance
  IDs in the affected zone, or do not specify any instance IDs at all, the call
  fails. If
  you specify only instance IDs in an unaffected zone, the call works normally.

  For more information, see [Burstable performance
  instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_instance_credit_specifications(
          map(),
          describe_instance_credit_specifications_request(),
          list()
        ) ::
          {:ok, describe_instance_credit_specifications_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_credit_specifications(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstanceCreditSpecifications", input, options)
  end

  @doc """
  Describes the tag keys that are registered to appear in scheduled event
  notifications
  for resources in the current Region.
  """
  @spec describe_instance_event_notification_attributes(
          map(),
          describe_instance_event_notification_attributes_request(),
          list()
        ) ::
          {:ok, describe_instance_event_notification_attributes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_event_notification_attributes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeInstanceEventNotificationAttributes",
      input,
      options
    )
  end

  @doc """
  Describes the specified event windows or all event windows.

  If you specify event window IDs, the output includes information for only the
  specified
  event windows. If you specify filters, the output includes information for only
  those event
  windows that meet the filter criteria. If you do not specify event windows IDs
  or filters,
  the output includes information for all event windows, which can affect
  performance. We
  recommend that you use pagination to ensure that the operation returns quickly
  and
  successfully.

  For more information, see [Define event windows for scheduled events](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_instance_event_windows(map(), describe_instance_event_windows_request(), list()) ::
          {:ok, describe_instance_event_windows_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_event_windows(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstanceEventWindows", input, options)
  end

  @doc """
  Describes the AMI that was used to launch an instance, even if the AMI is
  deprecated,
  deregistered, made private (no longer public or shared with your account), or
  not
  allowed.

  If you specify instance IDs, the output includes information for only the
  specified
  instances. If you specify filters, the output includes information for only
  those instances
  that meet the filter criteria. If you do not specify instance IDs or filters,
  the output
  includes information for all instances, which can affect performance.

  If you specify an instance ID that is not valid, an instance that doesn't exist,
  or an
  instance that you do not own, an error (`InvalidInstanceID.NotFound`) is
  returned.

  Recently terminated instances might appear in the returned results. This
  interval is
  usually less than one hour.

  In the rare case where an Availability Zone is experiencing a service disruption
  and you
  specify instance IDs that are in the affected Availability Zone, or do not
  specify any
  instance IDs at all, the call fails. If you specify only instance IDs that are
  in an
  unaffected Availability Zone, the call works normally.

  The order of the elements in the response, including those within nested
  structures,
  might vary. Applications should not assume the elements appear in a particular
  order.
  """
  @spec describe_instance_image_metadata(
          map(),
          describe_instance_image_metadata_request(),
          list()
        ) ::
          {:ok, describe_instance_image_metadata_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_image_metadata(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstanceImageMetadata", input, options)
  end

  @doc """
  Describes the status of the specified instances or all of your instances.

  By default,
  only running instances are described, unless you specifically indicate to return
  the
  status of all instances.

  Instance status includes the following components:

    *

  **Status checks** - Amazon EC2 performs status
  checks on running EC2 instances to identify hardware and software issues. For
  more information, see [Status checks for your instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html)
  and [Troubleshoot instances with failed status
  checks](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html)
  in the *Amazon EC2 User
  Guide*.

    *

  **Scheduled events** - Amazon EC2 can schedule
  events (such as reboot, stop, or terminate) for your instances related to
  hardware issues, software updates, or system maintenance. For more information,
  see [Scheduled events for your instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)
  in the *Amazon EC2 User
  Guide*.

    *

  **Instance state** - You can manage your instances
  from the moment you launch them through their termination. For more information,
  see [Instance lifecycle](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html)
  in the *Amazon EC2 User Guide*.

  The Amazon EC2 API follows an eventual consistency model. This means that the
  result of an
  API command you run that creates or modifies resources might not be immediately
  available to all subsequent commands you run. For guidance on how to manage
  eventual
  consistency, see [Eventual consistency in the Amazon EC2
  API](https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html)
  in the *Amazon EC2 Developer
  Guide*.

  The order of the elements in the response, including those within nested
  structures, might vary. Applications should not assume the elements appear in a
  particular order.
  """
  @spec describe_instance_status(map(), describe_instance_status_request(), list()) ::
          {:ok, describe_instance_status_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_status(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstanceStatus", input, options)
  end

  @doc """
  Describes a tree-based hierarchy that represents the physical host placement of
  your
  EC2 instances within an Availability Zone or Local Zone.

  You can use this information to
  determine the relative proximity of your EC2 instances within the Amazon Web
  Services network to
  support your tightly coupled workloads.

  Instance topology is supported for specific instance types only. For more
  information,
  see [
  Prerequisites for Amazon EC2 instance
  topology](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-topology-prerequisites.html)
  in the *Amazon EC2 User Guide*.

  The Amazon EC2 API follows an eventual consistency model due to the
  distributed nature of the system supporting it. As a result, when you call the
  DescribeInstanceTopology API command immediately after launching instances, the
  response might return a `null` value for `capacityBlockId`
  because the data might not have fully propagated across all subsystems. For more
  information, see [Eventual consistency in the Amazon EC2
  API](https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html)
  in the *Amazon EC2 Developer
  Guide*.

  For more information, see [Amazon EC2 instance topology](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-topology.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_instance_topology(map(), describe_instance_topology_request(), list()) ::
          {:ok, describe_instance_topology_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_topology(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstanceTopology", input, options)
  end

  @doc """
  Lists the instance types that are offered for the specified location.

  If no location is
  specified, the default is to list the instance types that are offered in the
  current
  Region.
  """
  @spec describe_instance_type_offerings(
          map(),
          describe_instance_type_offerings_request(),
          list()
        ) ::
          {:ok, describe_instance_type_offerings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_type_offerings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstanceTypeOfferings", input, options)
  end

  @doc """
  Describes the specified instance types.

  By default, all instance types for the current
  Region are described. Alternatively, you can filter the results.
  """
  @spec describe_instance_types(map(), describe_instance_types_request(), list()) ::
          {:ok, describe_instance_types_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instance_types(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstanceTypes", input, options)
  end

  @doc """
  Describes the specified instances or all instances.

  If you specify instance IDs, the output includes information for only the
  specified
  instances. If you specify filters, the output includes information for only
  those
  instances that meet the filter criteria. If you do not specify instance IDs or
  filters,
  the output includes information for all instances, which can affect performance.
  We
  recommend that you use pagination to ensure that the operation returns quickly
  and
  successfully.

  If you specify an instance ID that is not valid, an error is returned. If you
  specify
  an instance that you do not own, it is not included in the output.

  Recently terminated instances might appear in the returned results. This
  interval is
  usually less than one hour.

  If you describe instances in the rare case where an Availability Zone is
  experiencing
  a service disruption and you specify instance IDs that are in the affected zone,
  or do
  not specify any instance IDs at all, the call fails. If you describe instances
  and
  specify only instance IDs that are in an unaffected zone, the call works
  normally.

  The Amazon EC2 API follows an eventual consistency model. This means that the
  result of an
  API command you run that creates or modifies resources might not be immediately
  available to all subsequent commands you run. For guidance on how to manage
  eventual
  consistency, see [Eventual consistency in the Amazon EC2
  API](https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html)
  in the *Amazon EC2 Developer
  Guide*.

  We strongly recommend using only paginated requests. Unpaginated requests are
  susceptible to throttling and timeouts.

  The order of the elements in the response, including those within nested
  structures, might vary. Applications should not assume the elements appear in a
  particular order.
  """
  @spec describe_instances(map(), describe_instances_request(), list()) ::
          {:ok, describe_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInstances", input, options)
  end

  @doc """
  Describes your internet gateways.

  The default is to describe all your internet gateways.
  Alternatively, you can specify specific internet gateway IDs or filter the
  results to
  include only the internet gateways that match specific criteria.
  """
  @spec describe_internet_gateways(map(), describe_internet_gateways_request(), list()) ::
          {:ok, describe_internet_gateways_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_internet_gateways(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeInternetGateways", input, options)
  end

  @doc """
  Describes your Autonomous System Numbers (ASNs), their provisioning statuses,
  and the BYOIP CIDRs with which they are associated.

  For more information, see [Tutorial: Bring your ASN to IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoasn.html) in the
  *Amazon VPC IPAM guide*.
  """
  @spec describe_ipam_byoasn(map(), describe_ipam_byoasn_request(), list()) ::
          {:ok, describe_ipam_byoasn_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_ipam_byoasn(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeIpamByoasn", input, options)
  end

  @doc """
  Describe verification tokens.

  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).
  """
  @spec describe_ipam_external_resource_verification_tokens(
          map(),
          describe_ipam_external_resource_verification_tokens_request(),
          list()
        ) ::
          {:ok, describe_ipam_external_resource_verification_tokens_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_ipam_external_resource_verification_tokens(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeIpamExternalResourceVerificationTokens",
      input,
      options
    )
  end

  @doc """
  Get information about your IPAM pools.
  """
  @spec describe_ipam_pools(map(), describe_ipam_pools_request(), list()) ::
          {:ok, describe_ipam_pools_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_ipam_pools(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeIpamPools", input, options)
  end

  @doc """
  Describes IPAM resource discoveries.

  A resource discovery is an IPAM component that enables IPAM to manage and
  monitor resources that belong to the owning account.
  """
  @spec describe_ipam_resource_discoveries(
          map(),
          describe_ipam_resource_discoveries_request(),
          list()
        ) ::
          {:ok, describe_ipam_resource_discoveries_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_ipam_resource_discoveries(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeIpamResourceDiscoveries", input, options)
  end

  @doc """
  Describes resource discovery association with an Amazon VPC IPAM.

  An associated resource discovery is a resource discovery that has been
  associated with an IPAM..
  """
  @spec describe_ipam_resource_discovery_associations(
          map(),
          describe_ipam_resource_discovery_associations_request(),
          list()
        ) ::
          {:ok, describe_ipam_resource_discovery_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_ipam_resource_discovery_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeIpamResourceDiscoveryAssociations",
      input,
      options
    )
  end

  @doc """
  Get information about your IPAM scopes.
  """
  @spec describe_ipam_scopes(map(), describe_ipam_scopes_request(), list()) ::
          {:ok, describe_ipam_scopes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_ipam_scopes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeIpamScopes", input, options)
  end

  @doc """
  Get information about your IPAM pools.

  For more information, see [What is IPAM?](https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html) in the
  *Amazon VPC IPAM User Guide*.
  """
  @spec describe_ipams(map(), describe_ipams_request(), list()) ::
          {:ok, describe_ipams_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_ipams(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeIpams", input, options)
  end

  @doc """
  Describes your IPv6 address pools.
  """
  @spec describe_ipv6_pools(map(), describe_ipv6_pools_request(), list()) ::
          {:ok, describe_ipv6_pools_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_ipv6_pools(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeIpv6Pools", input, options)
  end

  @doc """
  Describes the specified key pairs or all of your key pairs.

  For more information about key pairs, see [Amazon EC2 key pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_key_pairs(map(), describe_key_pairs_request(), list()) ::
          {:ok, describe_key_pairs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_key_pairs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeKeyPairs", input, options)
  end

  @doc """
  Describes one or more versions of a specified launch template.

  You can describe all
  versions, individual versions, or a range of versions. You can also describe all
  the
  latest versions or all the default versions of all the launch templates in your
  account.
  """
  @spec describe_launch_template_versions(
          map(),
          describe_launch_template_versions_request(),
          list()
        ) ::
          {:ok, describe_launch_template_versions_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_launch_template_versions(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeLaunchTemplateVersions", input, options)
  end

  @doc """
  Describes one or more launch templates.
  """
  @spec describe_launch_templates(map(), describe_launch_templates_request(), list()) ::
          {:ok, describe_launch_templates_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_launch_templates(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeLaunchTemplates", input, options)
  end

  @doc """
  Describes the associations between virtual interface groups and local gateway
  route tables.
  """
  @spec describe_local_gateway_route_table_virtual_interface_group_associations(
          map(),
          describe_local_gateway_route_table_virtual_interface_group_associations_request(),
          list()
        ) ::
          {:ok, describe_local_gateway_route_table_virtual_interface_group_associations_result(),
           any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_local_gateway_route_table_virtual_interface_group_associations(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations",
      input,
      options
    )
  end

  @doc """
  Describes the specified associations between VPCs and local gateway route
  tables.
  """
  @spec describe_local_gateway_route_table_vpc_associations(
          map(),
          describe_local_gateway_route_table_vpc_associations_request(),
          list()
        ) ::
          {:ok, describe_local_gateway_route_table_vpc_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_local_gateway_route_table_vpc_associations(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeLocalGatewayRouteTableVpcAssociations",
      input,
      options
    )
  end

  @doc """
  Describes one or more local gateway route tables.

  By default, all local gateway route tables are described.
  Alternatively, you can filter the results.
  """
  @spec describe_local_gateway_route_tables(
          map(),
          describe_local_gateway_route_tables_request(),
          list()
        ) ::
          {:ok, describe_local_gateway_route_tables_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_local_gateway_route_tables(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeLocalGatewayRouteTables", input, options)
  end

  @doc """
  Describes the specified local gateway virtual interface groups.
  """
  @spec describe_local_gateway_virtual_interface_groups(
          map(),
          describe_local_gateway_virtual_interface_groups_request(),
          list()
        ) ::
          {:ok, describe_local_gateway_virtual_interface_groups_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_local_gateway_virtual_interface_groups(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeLocalGatewayVirtualInterfaceGroups",
      input,
      options
    )
  end

  @doc """
  Describes the specified local gateway virtual interfaces.
  """
  @spec describe_local_gateway_virtual_interfaces(
          map(),
          describe_local_gateway_virtual_interfaces_request(),
          list()
        ) ::
          {:ok, describe_local_gateway_virtual_interfaces_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_local_gateway_virtual_interfaces(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeLocalGatewayVirtualInterfaces", input, options)
  end

  @doc """
  Describes one or more local gateways.

  By default, all local gateways are described.
  Alternatively, you can filter the results.
  """
  @spec describe_local_gateways(map(), describe_local_gateways_request(), list()) ::
          {:ok, describe_local_gateways_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_local_gateways(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeLocalGateways", input, options)
  end

  @doc """
  Describes the lock status for a snapshot.
  """
  @spec describe_locked_snapshots(map(), describe_locked_snapshots_request(), list()) ::
          {:ok, describe_locked_snapshots_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_locked_snapshots(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeLockedSnapshots", input, options)
  end

  @doc """
  Describes the specified EC2 Mac Dedicated Host or all of your EC2 Mac Dedicated
  Hosts.
  """
  @spec describe_mac_hosts(map(), describe_mac_hosts_request(), list()) ::
          {:ok, describe_mac_hosts_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_mac_hosts(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeMacHosts", input, options)
  end

  @doc """
  Describes a System Integrity Protection (SIP) modification task or volume
  ownership delegation
  task for an Amazon EC2 Mac instance.

  For more information, see [Configure SIP for Amazon EC2
  instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mac-sip-settings.html#mac-sip-configure)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_mac_modification_tasks(map(), describe_mac_modification_tasks_request(), list()) ::
          {:ok, describe_mac_modification_tasks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_mac_modification_tasks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeMacModificationTasks", input, options)
  end

  @doc """
  Describes your managed prefix lists and any Amazon Web Services-managed prefix
  lists.
  """
  @spec describe_managed_prefix_lists(map(), describe_managed_prefix_lists_request(), list()) ::
          {:ok, describe_managed_prefix_lists_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_managed_prefix_lists(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeManagedPrefixLists", input, options)
  end

  @doc """

  This action is deprecated.

  Describes your Elastic IP addresses that are being moved from or being restored
  to the EC2-Classic platform.
  This request does not return information about any other Elastic IP addresses in
  your account.
  """
  @spec describe_moving_addresses(map(), describe_moving_addresses_request(), list()) ::
          {:ok, describe_moving_addresses_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_moving_addresses(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeMovingAddresses", input, options)
  end

  @doc """
  Describes your NAT gateways.

  The default is to describe all your NAT gateways.
  Alternatively, you can specify specific NAT gateway IDs or filter the results to
  include only the NAT gateways that match specific criteria.
  """
  @spec describe_nat_gateways(map(), describe_nat_gateways_request(), list()) ::
          {:ok, describe_nat_gateways_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_nat_gateways(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeNatGateways", input, options)
  end

  @doc """
  Describes your network ACLs.

  The default is to describe all your network ACLs.
  Alternatively, you can specify specific network ACL IDs or filter the results to
  include only the network ACLs that match specific criteria.

  For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in
  the
  *Amazon VPC User Guide*.
  """
  @spec describe_network_acls(map(), describe_network_acls_request(), list()) ::
          {:ok, describe_network_acls_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_network_acls(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeNetworkAcls", input, options)
  end

  @doc """
  Describes the specified Network Access Scope analyses.
  """
  @spec describe_network_insights_access_scope_analyses(
          map(),
          describe_network_insights_access_scope_analyses_request(),
          list()
        ) ::
          {:ok, describe_network_insights_access_scope_analyses_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_network_insights_access_scope_analyses(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeNetworkInsightsAccessScopeAnalyses",
      input,
      options
    )
  end

  @doc """
  Describes the specified Network Access Scopes.
  """
  @spec describe_network_insights_access_scopes(
          map(),
          describe_network_insights_access_scopes_request(),
          list()
        ) ::
          {:ok, describe_network_insights_access_scopes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_network_insights_access_scopes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeNetworkInsightsAccessScopes", input, options)
  end

  @doc """
  Describes one or more of your network insights analyses.
  """
  @spec describe_network_insights_analyses(
          map(),
          describe_network_insights_analyses_request(),
          list()
        ) ::
          {:ok, describe_network_insights_analyses_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_network_insights_analyses(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeNetworkInsightsAnalyses", input, options)
  end

  @doc """
  Describes one or more of your paths.
  """
  @spec describe_network_insights_paths(map(), describe_network_insights_paths_request(), list()) ::
          {:ok, describe_network_insights_paths_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_network_insights_paths(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeNetworkInsightsPaths", input, options)
  end

  @doc """
  Describes a network interface attribute.

  You can specify only one attribute at a
  time.
  """
  @spec describe_network_interface_attribute(
          map(),
          describe_network_interface_attribute_request(),
          list()
        ) ::
          {:ok, describe_network_interface_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_network_interface_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeNetworkInterfaceAttribute", input, options)
  end

  @doc """
  Describes the permissions for your network interfaces.
  """
  @spec describe_network_interface_permissions(
          map(),
          describe_network_interface_permissions_request(),
          list()
        ) ::
          {:ok, describe_network_interface_permissions_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_network_interface_permissions(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeNetworkInterfacePermissions", input, options)
  end

  @doc """
  Describes the specified network interfaces or all your network interfaces.

  If you have a large number of network interfaces, the operation fails unless you
  use
  pagination or one of the following filters: `group-id`,
  `mac-address`, `private-dns-name`,
  `private-ip-address`, `subnet-id`, or
  `vpc-id`.

  We strongly recommend using only paginated requests. Unpaginated requests are
  susceptible to throttling and timeouts.
  """
  @spec describe_network_interfaces(map(), describe_network_interfaces_request(), list()) ::
          {:ok, describe_network_interfaces_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_network_interfaces(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeNetworkInterfaces", input, options)
  end

  @doc """
  Describes the Outposts link aggregation groups (LAGs).

  LAGs are only available for second-generation Outposts racks at this time.
  """
  @spec describe_outpost_lags(map(), describe_outpost_lags_request(), list()) ::
          {:ok, describe_outpost_lags_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_outpost_lags(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeOutpostLags", input, options)
  end

  @doc """
  Describes the specified placement groups or all of your placement groups.

  To describe a specific placement group that is *shared* with
  your account, you must specify the ID of the placement group using the
  `GroupId` parameter. Specifying the name of a
  *shared* placement group using the `GroupNames`
  parameter will result in an error.

  For more information, see [Placement groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec describe_placement_groups(map(), describe_placement_groups_request(), list()) ::
          {:ok, describe_placement_groups_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_placement_groups(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribePlacementGroups", input, options)
  end

  @doc """
  Describes available Amazon Web Services services in a prefix list format, which
  includes the prefix list
  name and prefix list ID of the service and the IP address range for the service.
  """
  @spec describe_prefix_lists(map(), describe_prefix_lists_request(), list()) ::
          {:ok, describe_prefix_lists_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_prefix_lists(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribePrefixLists", input, options)
  end

  @doc """
  Describes the ID format settings for the root user and all IAM roles and IAM
  users
  that have explicitly specified a longer ID (17-character ID) preference.

  By default, all IAM roles and IAM users default to the same ID settings as the
  root user, unless they
  explicitly override the settings. This request is useful for identifying those
  IAM users and IAM roles
  that have overridden the default ID settings.

  The following resource types support longer IDs: `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`.
  """
  @spec describe_principal_id_format(map(), describe_principal_id_format_request(), list()) ::
          {:ok, describe_principal_id_format_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_principal_id_format(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribePrincipalIdFormat", input, options)
  end

  @doc """
  Describes the specified IPv4 address pools.
  """
  @spec describe_public_ipv4_pools(map(), describe_public_ipv4_pools_request(), list()) ::
          {:ok, describe_public_ipv4_pools_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_public_ipv4_pools(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribePublicIpv4Pools", input, options)
  end

  @doc """
  Describes the Regions that are enabled for your account, or all Regions.

  For a list of the Regions supported by Amazon EC2, see [Amazon EC2 service endpoints](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-endpoints.html).

  For information about enabling and disabling Regions for your account, see
  [Specify which Amazon Web Services Regions your account can
  use](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-regions.html)
  in the *Amazon Web Services Account Management Reference Guide*.

  The order of the elements in the response, including those within nested
  structures,
  might vary. Applications should not assume the elements appear in a particular
  order.
  """
  @spec describe_regions(map(), describe_regions_request(), list()) ::
          {:ok, describe_regions_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_regions(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeRegions", input, options)
  end

  @doc """
  Describes a root volume replacement task.

  For more information, see
  [Replace a root volume](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_replace_root_volume_tasks(
          map(),
          describe_replace_root_volume_tasks_request(),
          list()
        ) ::
          {:ok, describe_replace_root_volume_tasks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_replace_root_volume_tasks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeReplaceRootVolumeTasks", input, options)
  end

  @doc """
  Describes one or more of the Reserved Instances that you purchased.

  For more information about Reserved Instances, see [Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html)
  in the *Amazon EC2 User Guide*.

  The order of the elements in the response, including those within nested
  structures,
  might vary. Applications should not assume the elements appear in a particular
  order.
  """
  @spec describe_reserved_instances(map(), describe_reserved_instances_request(), list()) ::
          {:ok, describe_reserved_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_reserved_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeReservedInstances", input, options)
  end

  @doc """
  Describes your account's Reserved Instance listings in the Reserved Instance
  Marketplace.

  The Reserved Instance Marketplace matches sellers who want to resell Reserved
  Instance
  capacity that they no longer need with buyers who want to purchase additional
  capacity.
  Reserved Instances bought and sold through the Reserved Instance Marketplace
  work like any
  other Reserved Instances.

  As a seller, you choose to list some or all of your Reserved Instances, and you
  specify
  the upfront price to receive for them. Your Reserved Instances are then listed
  in the Reserved
  Instance Marketplace and are available for purchase.

  As a buyer, you specify the configuration of the Reserved Instance to purchase,
  and the
  Marketplace matches what you're searching for with what's available. The
  Marketplace first
  sells the lowest priced Reserved Instances to you, and continues to sell
  available Reserved
  Instance listings to you until your demand is met. You are charged based on the
  total price of
  all of the listings that you purchase.

  For more information, see [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html)
  in the *Amazon EC2 User Guide*.

  The order of the elements in the response, including those within nested
  structures,
  might vary. Applications should not assume the elements appear in a particular
  order.
  """
  @spec describe_reserved_instances_listings(
          map(),
          describe_reserved_instances_listings_request(),
          list()
        ) ::
          {:ok, describe_reserved_instances_listings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_reserved_instances_listings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeReservedInstancesListings", input, options)
  end

  @doc """
  Describes the modifications made to your Reserved Instances.

  If no parameter is specified,
  information about all your Reserved Instances modification requests is returned.
  If a
  modification ID is specified, only information about the specific modification
  is
  returned.

  For more information, see [Modify Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html)
  in the
  *Amazon EC2 User Guide*.

  The order of the elements in the response, including those within nested
  structures,
  might vary. Applications should not assume the elements appear in a particular
  order.
  """
  @spec describe_reserved_instances_modifications(
          map(),
          describe_reserved_instances_modifications_request(),
          list()
        ) ::
          {:ok, describe_reserved_instances_modifications_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_reserved_instances_modifications(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeReservedInstancesModifications", input, options)
  end

  @doc """
  Describes Reserved Instance offerings that are available for purchase.

  With Reserved
  Instances, you purchase the right to launch instances for a period of time.
  During that time
  period, you do not receive insufficient capacity errors, and you pay a lower
  usage rate than
  the rate charged for On-Demand instances for the actual time used.

  If you have listed your own Reserved Instances for sale in the Reserved Instance
  Marketplace, they will be excluded from these results. This is to ensure that
  you do not
  purchase your own Reserved Instances.

  For more information, see [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html)
  in the *Amazon EC2 User Guide*.

  The order of the elements in the response, including those within nested
  structures,
  might vary. Applications should not assume the elements appear in a particular
  order.
  """
  @spec describe_reserved_instances_offerings(
          map(),
          describe_reserved_instances_offerings_request(),
          list()
        ) ::
          {:ok, describe_reserved_instances_offerings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_reserved_instances_offerings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeReservedInstancesOfferings", input, options)
  end

  @doc """
  Describes one or more route server endpoints.

  A route server endpoint is an Amazon Web Services-managed component inside a
  subnet that facilitates [BGP (Border Gateway Protocol)](https://en.wikipedia.org/wiki/Border_Gateway_Protocol) connections
  between your route server and your BGP peers.

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec describe_route_server_endpoints(map(), describe_route_server_endpoints_request(), list()) ::
          {:ok, describe_route_server_endpoints_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_route_server_endpoints(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeRouteServerEndpoints", input, options)
  end

  @doc """
  Describes one or more route server peers.

  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

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec describe_route_server_peers(map(), describe_route_server_peers_request(), list()) ::
          {:ok, describe_route_server_peers_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_route_server_peers(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeRouteServerPeers", input, options)
  end

  @doc """
  Describes one or more route servers.

  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](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html).

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec describe_route_servers(map(), describe_route_servers_request(), list()) ::
          {:ok, describe_route_servers_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_route_servers(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeRouteServers", input, options)
  end

  @doc """
  Describes your route tables.

  The default is to describe all your route tables.
  Alternatively, you can specify specific route table IDs or filter the results to
  include only the route tables that match specific criteria.

  Each subnet in your VPC must be associated with a route table. If a subnet is
  not explicitly associated with any route table, it is implicitly associated with
  the main route table. This command does not return the subnet ID for implicit
  associations.

  For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)
  in the
  *Amazon VPC User Guide*.
  """
  @spec describe_route_tables(map(), describe_route_tables_request(), list()) ::
          {:ok, describe_route_tables_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_route_tables(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeRouteTables", input, options)
  end

  @doc """
  Finds available schedules that meet the specified criteria.

  You can search for an available schedule no more than 3 months in advance. You
  must meet the minimum required duration of 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.

  After you find a schedule that meets your needs, call
  `PurchaseScheduledInstances`
  to purchase Scheduled Instances with that schedule.
  """
  @spec describe_scheduled_instance_availability(
          map(),
          describe_scheduled_instance_availability_request(),
          list()
        ) ::
          {:ok, describe_scheduled_instance_availability_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_scheduled_instance_availability(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeScheduledInstanceAvailability", input, options)
  end

  @doc """
  Describes the specified Scheduled Instances or all your Scheduled Instances.
  """
  @spec describe_scheduled_instances(map(), describe_scheduled_instances_request(), list()) ::
          {:ok, describe_scheduled_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_scheduled_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeScheduledInstances", input, options)
  end

  @doc """
  Describes the VPCs on the other side of a VPC peering or Transit Gateway
  connection that are referencing the security groups you've specified in this
  request.
  """
  @spec describe_security_group_references(
          map(),
          describe_security_group_references_request(),
          list()
        ) ::
          {:ok, describe_security_group_references_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_security_group_references(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSecurityGroupReferences", input, options)
  end

  @doc """
  Describes one or more of your security group rules.
  """
  @spec describe_security_group_rules(map(), describe_security_group_rules_request(), list()) ::
          {:ok, describe_security_group_rules_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_security_group_rules(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSecurityGroupRules", input, options)
  end

  @doc """
  Describes security group VPC associations made with
  [AssociateSecurityGroupVpc](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AssociateSecurityGroupVpc.html).
  """
  @spec describe_security_group_vpc_associations(
          map(),
          describe_security_group_vpc_associations_request(),
          list()
        ) ::
          {:ok, describe_security_group_vpc_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_security_group_vpc_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSecurityGroupVpcAssociations", input, options)
  end

  @doc """
  Describes the specified security groups or all of your security groups.
  """
  @spec describe_security_groups(map(), describe_security_groups_request(), list()) ::
          {:ok, describe_security_groups_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_security_groups(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSecurityGroups", input, options)
  end

  @doc """
  Describes the Outpost service link virtual interfaces.
  """
  @spec describe_service_link_virtual_interfaces(
          map(),
          describe_service_link_virtual_interfaces_request(),
          list()
        ) ::
          {:ok, describe_service_link_virtual_interfaces_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_service_link_virtual_interfaces(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeServiceLinkVirtualInterfaces", input, options)
  end

  @doc """
  Describes the specified attribute of the specified snapshot.

  You can specify only one
  attribute at a time.

  For more information about EBS snapshots, see [Amazon EBS snapshots](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html)
  in the *Amazon EBS User Guide*.
  """
  @spec describe_snapshot_attribute(map(), describe_snapshot_attribute_request(), list()) ::
          {:ok, describe_snapshot_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_snapshot_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSnapshotAttribute", input, options)
  end

  @doc """
  Describes the storage tier status of one or more Amazon EBS snapshots.
  """
  @spec describe_snapshot_tier_status(map(), describe_snapshot_tier_status_request(), list()) ::
          {:ok, describe_snapshot_tier_status_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_snapshot_tier_status(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSnapshotTierStatus", input, options)
  end

  @doc """
  Describes the specified EBS snapshots available to you or all of the EBS
  snapshots
  available to you.

  The snapshots available to you include public snapshots, private snapshots that
  you own,
  and private snapshots owned by other Amazon Web Services accounts for which you
  have explicit create volume
  permissions.

  The create volume permissions fall into the following categories:

    *

  *public*: The owner of the snapshot granted create volume
  permissions for the snapshot to the `all` group. All Amazon Web Services
  accounts have create
  volume permissions for these snapshots.

    *

  *explicit*: The owner of the snapshot granted create volume
  permissions to a specific Amazon Web Services account.

    *

  *implicit*: An Amazon Web Services account has implicit create volume
  permissions
  for all snapshots it owns.

  The list of snapshots returned can be filtered by specifying snapshot IDs,
  snapshot
  owners, or Amazon Web Services accounts with create volume permissions. If no
  options are specified,
  Amazon EC2 returns all snapshots for which you have create volume permissions.

  If you specify one or more snapshot IDs, only snapshots that have the specified
  IDs are
  returned. If you specify an invalid snapshot ID, an error is returned. If you
  specify a
  snapshot ID for which you do not have access, it is not included in the returned
  results.

  If you specify one or more snapshot owners using the `OwnerIds` option, only
  snapshots from the specified owners and for which you have access are returned.
  The results
  can include the Amazon Web Services account IDs of the specified owners,
  `amazon` for snapshots
  owned by Amazon, or `self` for snapshots that you own.

  If you specify a list of restorable users, only snapshots with create snapshot
  permissions
  for those users are returned. You can specify Amazon Web Services account IDs
  (if you own the snapshots),
  `self` for snapshots for which you own or have explicit permissions, or
  `all` for public snapshots.

  If you are describing a long list of snapshots, we recommend that you paginate
  the output to make the
  list more manageable. For more information, see
  [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination).   For more information about EBS snapshots, see [Amazon EBS
  snapshots](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html)
  in the *Amazon EBS User Guide*.

  We strongly recommend using only paginated requests. Unpaginated requests are
  susceptible to throttling and timeouts.
  """
  @spec describe_snapshots(map(), describe_snapshots_request(), list()) ::
          {:ok, describe_snapshots_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_snapshots(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSnapshots", input, options)
  end

  @doc """
  Describes the data feed for Spot Instances.

  For more information, see [Spot Instance data
  feed](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_spot_datafeed_subscription(
          map(),
          describe_spot_datafeed_subscription_request(),
          list()
        ) ::
          {:ok, describe_spot_datafeed_subscription_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_spot_datafeed_subscription(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSpotDatafeedSubscription", input, options)
  end

  @doc """
  Describes the running instances for the specified Spot Fleet.
  """
  @spec describe_spot_fleet_instances(map(), describe_spot_fleet_instances_request(), list()) ::
          {:ok, describe_spot_fleet_instances_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_spot_fleet_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSpotFleetInstances", input, options)
  end

  @doc """
  Describes the events for the specified Spot Fleet request during the specified
  time.

  Spot Fleet events are delayed by up to 30 seconds before they can be described.
  This
  ensures that you can query by the last evaluated time and not miss a recorded
  event.
  Spot Fleet events are available for 48 hours.

  For more information, see [Monitor fleet events using Amazon EventBridge](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/fleet-monitor.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_spot_fleet_request_history(
          map(),
          describe_spot_fleet_request_history_request(),
          list()
        ) ::
          {:ok, describe_spot_fleet_request_history_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_spot_fleet_request_history(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSpotFleetRequestHistory", input, options)
  end

  @doc """
  Describes your Spot Fleet requests.

  Spot Fleet requests are deleted 48 hours after they are canceled and their
  instances
  are terminated.
  """
  @spec describe_spot_fleet_requests(map(), describe_spot_fleet_requests_request(), list()) ::
          {:ok, describe_spot_fleet_requests_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_spot_fleet_requests(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSpotFleetRequests", input, options)
  end

  @doc """
  Describes the specified Spot Instance requests.

  You can use `DescribeSpotInstanceRequests` to find a running Spot Instance by
  examining the response. If the status of the Spot Instance is `fulfilled`, the
  instance ID appears in the response and contains the identifier of the instance.
  Alternatively, you can use
  [DescribeInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances)
  with a filter to look for instances where the instance lifecycle is
  `spot`.

  We recommend that you set `MaxResults` to a value between 5 and 1000 to
  limit the number of items returned. This paginates the output, which makes the
  list
  more manageable and returns the items faster. If the list of items exceeds your
  `MaxResults` value, then that number of items is returned along with a
  `NextToken` value that can be passed to a subsequent
  `DescribeSpotInstanceRequests` request to retrieve the remaining
  items.

  Spot Instance requests are deleted four hours after they are canceled and their
  instances are
  terminated.
  """
  @spec describe_spot_instance_requests(map(), describe_spot_instance_requests_request(), list()) ::
          {:ok, describe_spot_instance_requests_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_spot_instance_requests(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSpotInstanceRequests", input, options)
  end

  @doc """
  Describes the Spot price history.

  For more information, see [Spot Instance pricing history](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html)
  in the
  *Amazon EC2 User Guide*.

  When you specify a start and end time, the operation returns the prices of the
  instance types within that time range. It also returns the last price change
  before the
  start time, which is the effective price as of the start time.
  """
  @spec describe_spot_price_history(map(), describe_spot_price_history_request(), list()) ::
          {:ok, describe_spot_price_history_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_spot_price_history(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSpotPriceHistory", input, options)
  end

  @doc """
  Describes the stale security group rules for security groups referenced across a
  VPC
  peering connection, transit gateway connection, or with a security group VPC
  association.

  Rules are stale when they reference a deleted security group. Rules can
  also be stale if they reference a security group in a peer VPC for which the VPC
  peering
  connection has been deleted, across a transit gateway where the transit gateway
  has been
  deleted (or [the transit gateway security group referencing
  feature](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#vpc-attachment-security)
  has been disabled), or if a
  security group VPC association has been disassociated.
  """
  @spec describe_stale_security_groups(map(), describe_stale_security_groups_request(), list()) ::
          {:ok, describe_stale_security_groups_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_stale_security_groups(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeStaleSecurityGroups", input, options)
  end

  @doc """
  Describes the progress of the AMI store tasks.

  You can describe the store tasks for
  specified AMIs. If you don't specify the AMIs, you get a paginated list of store
  tasks from
  the last 31 days.

  For each AMI task, the response indicates if the task is `InProgress`,
  `Completed`, or `Failed`. For tasks `InProgress`, the
  response shows the estimated progress as a percentage.

  Tasks are listed in reverse chronological order. Currently, only tasks from the
  past 31
  days can be viewed.

  To use this API, you must have the required permissions. For more information,
  see [Permissions for storing and restoring AMIs using S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-ami-store-restore.html#ami-s3-permissions)
  in the
  *Amazon EC2 User Guide*.

  For more information, see [Store and restore an AMI using S3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec describe_store_image_tasks(map(), describe_store_image_tasks_request(), list()) ::
          {:ok, describe_store_image_tasks_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_store_image_tasks(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeStoreImageTasks", input, options)
  end

  @doc """
  Describes your subnets.

  The default is to describe all your subnets.
  Alternatively, you can specify specific subnet IDs or filter the results to
  include only the subnets that match specific criteria.

  For more information, see
  [Subnets](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html)
  in the
  *Amazon VPC User Guide*.
  """
  @spec describe_subnets(map(), describe_subnets_request(), list()) ::
          {:ok, describe_subnets_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_subnets(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeSubnets", input, options)
  end

  @doc """
  Describes the specified tags for your EC2 resources.

  For more information about tags, see [Tag your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)
  in the
  *Amazon Elastic Compute Cloud User Guide*.

  We strongly recommend using only paginated requests. Unpaginated requests are
  susceptible to throttling and timeouts.

  The order of the elements in the response, including those within nested
  structures, might vary. Applications should not assume the elements appear in a
  particular order.
  """
  @spec describe_tags(map(), describe_tags_request(), list()) ::
          {:ok, describe_tags_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_tags(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTags", input, options)
  end

  @doc """
  Describe traffic mirror filters that determine the traffic that is mirrored.
  """
  @spec describe_traffic_mirror_filter_rules(
          map(),
          describe_traffic_mirror_filter_rules_request(),
          list()
        ) ::
          {:ok, describe_traffic_mirror_filter_rules_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_traffic_mirror_filter_rules(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTrafficMirrorFilterRules", input, options)
  end

  @doc """
  Describes one or more Traffic Mirror filters.
  """
  @spec describe_traffic_mirror_filters(map(), describe_traffic_mirror_filters_request(), list()) ::
          {:ok, describe_traffic_mirror_filters_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_traffic_mirror_filters(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTrafficMirrorFilters", input, options)
  end

  @doc """
  Describes one or more Traffic Mirror sessions.

  By default, all Traffic Mirror sessions are described. Alternatively, you can
  filter the results.
  """
  @spec describe_traffic_mirror_sessions(
          map(),
          describe_traffic_mirror_sessions_request(),
          list()
        ) ::
          {:ok, describe_traffic_mirror_sessions_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_traffic_mirror_sessions(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTrafficMirrorSessions", input, options)
  end

  @doc """
  Information about one or more Traffic Mirror targets.
  """
  @spec describe_traffic_mirror_targets(map(), describe_traffic_mirror_targets_request(), list()) ::
          {:ok, describe_traffic_mirror_targets_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_traffic_mirror_targets(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTrafficMirrorTargets", input, options)
  end

  @doc """
  Describes one or more attachments between resources and transit gateways.

  By default, all attachments are described.
  Alternatively, you can filter the results by attachment ID, attachment state,
  resource ID, or resource owner.
  """
  @spec describe_transit_gateway_attachments(
          map(),
          describe_transit_gateway_attachments_request(),
          list()
        ) ::
          {:ok, describe_transit_gateway_attachments_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateway_attachments(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTransitGatewayAttachments", input, options)
  end

  @doc """
  Describes one or more Connect peers.
  """
  @spec describe_transit_gateway_connect_peers(
          map(),
          describe_transit_gateway_connect_peers_request(),
          list()
        ) ::
          {:ok, describe_transit_gateway_connect_peers_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateway_connect_peers(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTransitGatewayConnectPeers", input, options)
  end

  @doc """
  Describes one or more Connect attachments.
  """
  @spec describe_transit_gateway_connects(
          map(),
          describe_transit_gateway_connects_request(),
          list()
        ) ::
          {:ok, describe_transit_gateway_connects_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateway_connects(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTransitGatewayConnects", input, options)
  end

  @doc """
  Describes one or more transit gateway multicast domains.
  """
  @spec describe_transit_gateway_multicast_domains(
          map(),
          describe_transit_gateway_multicast_domains_request(),
          list()
        ) ::
          {:ok, describe_transit_gateway_multicast_domains_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateway_multicast_domains(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTransitGatewayMulticastDomains", input, options)
  end

  @doc """
  Describes your transit gateway peering attachments.
  """
  @spec describe_transit_gateway_peering_attachments(
          map(),
          describe_transit_gateway_peering_attachments_request(),
          list()
        ) ::
          {:ok, describe_transit_gateway_peering_attachments_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateway_peering_attachments(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTransitGatewayPeeringAttachments", input, options)
  end

  @doc """
  Describes one or more transit gateway route policy tables.
  """
  @spec describe_transit_gateway_policy_tables(
          map(),
          describe_transit_gateway_policy_tables_request(),
          list()
        ) ::
          {:ok, describe_transit_gateway_policy_tables_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateway_policy_tables(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTransitGatewayPolicyTables", input, options)
  end

  @doc """
  Describes one or more transit gateway route table advertisements.
  """
  @spec describe_transit_gateway_route_table_announcements(
          map(),
          describe_transit_gateway_route_table_announcements_request(),
          list()
        ) ::
          {:ok, describe_transit_gateway_route_table_announcements_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateway_route_table_announcements(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeTransitGatewayRouteTableAnnouncements",
      input,
      options
    )
  end

  @doc """
  Describes one or more transit gateway route tables.

  By default, all transit gateway route tables are described.
  Alternatively, you can filter the results.
  """
  @spec describe_transit_gateway_route_tables(
          map(),
          describe_transit_gateway_route_tables_request(),
          list()
        ) ::
          {:ok, describe_transit_gateway_route_tables_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateway_route_tables(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTransitGatewayRouteTables", input, options)
  end

  @doc """
  Describes one or more VPC attachments.

  By default, all VPC attachments are described.
  Alternatively, you can filter the results.
  """
  @spec describe_transit_gateway_vpc_attachments(
          map(),
          describe_transit_gateway_vpc_attachments_request(),
          list()
        ) ::
          {:ok, describe_transit_gateway_vpc_attachments_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateway_vpc_attachments(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTransitGatewayVpcAttachments", input, options)
  end

  @doc """
  Describes one or more transit gateways.

  By default, all transit gateways are described. Alternatively, you can
  filter the results.
  """
  @spec describe_transit_gateways(map(), describe_transit_gateways_request(), list()) ::
          {:ok, describe_transit_gateways_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_transit_gateways(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTransitGateways", input, options)
  end

  @doc """
  Describes one or more network interface trunk associations.
  """
  @spec describe_trunk_interface_associations(
          map(),
          describe_trunk_interface_associations_request(),
          list()
        ) ::
          {:ok, describe_trunk_interface_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_trunk_interface_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeTrunkInterfaceAssociations", input, options)
  end

  @doc """
  Describes the specified Amazon Web Services Verified Access endpoints.
  """
  @spec describe_verified_access_endpoints(
          map(),
          describe_verified_access_endpoints_request(),
          list()
        ) ::
          {:ok, describe_verified_access_endpoints_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_verified_access_endpoints(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVerifiedAccessEndpoints", input, options)
  end

  @doc """
  Describes the specified Verified Access groups.
  """
  @spec describe_verified_access_groups(map(), describe_verified_access_groups_request(), list()) ::
          {:ok, describe_verified_access_groups_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_verified_access_groups(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVerifiedAccessGroups", input, options)
  end

  @doc """
  Describes the specified Amazon Web Services Verified Access instances.
  """
  @spec describe_verified_access_instance_logging_configurations(
          map(),
          describe_verified_access_instance_logging_configurations_request(),
          list()
        ) ::
          {:ok, describe_verified_access_instance_logging_configurations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_verified_access_instance_logging_configurations(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeVerifiedAccessInstanceLoggingConfigurations",
      input,
      options
    )
  end

  @doc """
  Describes the specified Amazon Web Services Verified Access instances.
  """
  @spec describe_verified_access_instances(
          map(),
          describe_verified_access_instances_request(),
          list()
        ) ::
          {:ok, describe_verified_access_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_verified_access_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVerifiedAccessInstances", input, options)
  end

  @doc """
  Describes the specified Amazon Web Services Verified Access trust providers.
  """
  @spec describe_verified_access_trust_providers(
          map(),
          describe_verified_access_trust_providers_request(),
          list()
        ) ::
          {:ok, describe_verified_access_trust_providers_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_verified_access_trust_providers(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVerifiedAccessTrustProviders", input, options)
  end

  @doc """
  Describes the specified attribute of the specified volume.

  You can specify only one
  attribute at a time.

  For more information about EBS volumes, see [Amazon EBS volumes](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes.html) in
  the *Amazon EBS User Guide*.
  """
  @spec describe_volume_attribute(map(), describe_volume_attribute_request(), list()) ::
          {:ok, describe_volume_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_volume_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVolumeAttribute", input, options)
  end

  @doc """
  Describes the status of the specified volumes.

  Volume status provides the result of the
  checks performed on your volumes to determine events that can impair the
  performance of your
  volumes. The performance of a volume can be affected if an issue occurs on the
  volume's
  underlying host. If the volume's underlying host experiences a power outage or
  system issue,
  after the system is restored, there could be data inconsistencies on the volume.
  Volume events
  notify you if this occurs. Volume actions notify you if any action needs to be
  taken in
  response to the event.

  The `DescribeVolumeStatus` operation provides the following information about
  the specified volumes:

  *Status*: Reflects the current status of the volume. The possible
  values are `ok`, `impaired` , `warning`, or
  `insufficient-data`. If all checks pass, the overall status of the volume is
  `ok`. If the check fails, the overall status is `impaired`. If the
  status is `insufficient-data`, then the checks might still be taking place on
  your
  volume at the time. We recommend that you retry the request. For more
  information about volume
  status, see [Monitor the status of your volumes](https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-status.html)
  in the *Amazon EBS User Guide*.

  *Events*: Reflect the cause of a volume status and might require you to
  take action. For example, if your volume returns an `impaired` status, then the
  volume event might be `potential-data-inconsistency`. This means that your
  volume
  has been affected by an issue with the underlying host, has all I/O operations
  disabled, and
  might have inconsistent data.

  *Actions*: Reflect the actions you might have to take in response to an
  event. For example, if the status of the volume is `impaired` and the volume
  event
  shows `potential-data-inconsistency`, then the action shows
  `enable-volume-io`. This means that you may want to enable the I/O operations
  for
  the volume and then check the volume for data consistency. For more information,
  see
  [Work with an impaired EBS
  volume](https://docs.aws.amazon.com/ebs/latest/userguide/work_volumes_impaired.html).

  Volume status is based on the volume status checks, and does not reflect the
  volume state.
  Therefore, volume status does not indicate volumes in the `error` state (for
  example, when a volume is incapable of accepting I/O.)

  The order of the elements in the response, including those within nested
  structures, might vary. Applications should not assume the elements appear in a
  particular order.
  """
  @spec describe_volume_status(map(), describe_volume_status_request(), list()) ::
          {:ok, describe_volume_status_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_volume_status(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVolumeStatus", input, options)
  end

  @doc """
  Describes the specified EBS volumes or all of your EBS volumes.

  If you are describing a long list of volumes, we recommend that you paginate the
  output to make the list
  more manageable. For more information, see
  [Pagination](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination).   For more information about EBS volumes, see [Amazon EBS
  volumes](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-volumes.html) in
  the *Amazon EBS User Guide*.

  We strongly recommend using only paginated requests. Unpaginated requests are
  susceptible to throttling and timeouts.

  The order of the elements in the response, including those within nested
  structures, might vary. Applications should not assume the elements appear in a
  particular order.
  """
  @spec describe_volumes(map(), describe_volumes_request(), list()) ::
          {:ok, describe_volumes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_volumes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVolumes", input, options)
  end

  @doc """
  Describes the most recent volume modification request for the specified EBS
  volumes.

  For more information, see [
  Monitor the progress of volume
  modifications](https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-modifications.html)
  in the *Amazon EBS User Guide*.
  """
  @spec describe_volumes_modifications(map(), describe_volumes_modifications_request(), list()) ::
          {:ok, describe_volumes_modifications_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_volumes_modifications(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVolumesModifications", input, options)
  end

  @doc """
  Describes the specified attribute of the specified VPC.

  You can specify only one attribute at a time.
  """
  @spec describe_vpc_attribute(map(), describe_vpc_attribute_request(), list()) ::
          {:ok, describe_vpc_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcAttribute", input, options)
  end

  @doc """
  Describe VPC Block Public Access (BPA) exclusions.

  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](https://docs.aws.amazon.com/vpc/latest/userguide/security-vpc-bpa.html)
  in the *Amazon VPC User Guide*.
  """
  @spec describe_vpc_block_public_access_exclusions(
          map(),
          describe_vpc_block_public_access_exclusions_request(),
          list()
        ) ::
          {:ok, describe_vpc_block_public_access_exclusions_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_block_public_access_exclusions(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcBlockPublicAccessExclusions", input, options)
  end

  @doc """
  Describe VPC Block Public Access (BPA) options.

  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](https://docs.aws.amazon.com/vpc/latest/userguide/security-vpc-bpa.html)
  in the *Amazon VPC User Guide*.
  """
  @spec describe_vpc_block_public_access_options(
          map(),
          describe_vpc_block_public_access_options_request(),
          list()
        ) ::
          {:ok, describe_vpc_block_public_access_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_block_public_access_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcBlockPublicAccessOptions", input, options)
  end

  @doc """

  This action is deprecated.

  Describes the ClassicLink status of the specified VPCs.
  """
  @spec describe_vpc_classic_link(map(), describe_vpc_classic_link_request(), list()) ::
          {:ok, describe_vpc_classic_link_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_classic_link(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcClassicLink", input, options)
  end

  @doc """

  This action is deprecated.

  Describes the ClassicLink DNS support status of one or more VPCs. If enabled,
  the DNS
  hostname of a linked EC2-Classic instance resolves to its private IP address
  when
  addressed from an instance in the VPC to which it's linked. Similarly, the DNS
  hostname
  of an instance in a VPC resolves to its private IP address when addressed from a
  linked
  EC2-Classic instance.
  """
  @spec describe_vpc_classic_link_dns_support(
          map(),
          describe_vpc_classic_link_dns_support_request(),
          list()
        ) ::
          {:ok, describe_vpc_classic_link_dns_support_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_classic_link_dns_support(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcClassicLinkDnsSupport", input, options)
  end

  @doc """
  Describes the VPC resources, VPC endpoint services, Amazon Lattice services, or
  service networks
  associated with the VPC endpoint.
  """
  @spec describe_vpc_endpoint_associations(
          map(),
          describe_vpc_endpoint_associations_request(),
          list()
        ) ::
          {:ok, describe_vpc_endpoint_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_endpoint_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcEndpointAssociations", input, options)
  end

  @doc """
  Describes the connection notifications for VPC endpoints and VPC endpoint
  services.
  """
  @spec describe_vpc_endpoint_connection_notifications(
          map(),
          describe_vpc_endpoint_connection_notifications_request(),
          list()
        ) ::
          {:ok, describe_vpc_endpoint_connection_notifications_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_endpoint_connection_notifications(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DescribeVpcEndpointConnectionNotifications",
      input,
      options
    )
  end

  @doc """
  Describes the VPC endpoint connections to your VPC endpoint services, including
  any
  endpoints that are pending your acceptance.
  """
  @spec describe_vpc_endpoint_connections(
          map(),
          describe_vpc_endpoint_connections_request(),
          list()
        ) ::
          {:ok, describe_vpc_endpoint_connections_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_endpoint_connections(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcEndpointConnections", input, options)
  end

  @doc """
  Describes the VPC endpoint service configurations in your account (your
  services).
  """
  @spec describe_vpc_endpoint_service_configurations(
          map(),
          describe_vpc_endpoint_service_configurations_request(),
          list()
        ) ::
          {:ok, describe_vpc_endpoint_service_configurations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_endpoint_service_configurations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcEndpointServiceConfigurations", input, options)
  end

  @doc """
  Describes the principals (service consumers) that are permitted to discover your
  VPC
  endpoint service.

  Principal ARNs with path components aren't supported.
  """
  @spec describe_vpc_endpoint_service_permissions(
          map(),
          describe_vpc_endpoint_service_permissions_request(),
          list()
        ) ::
          {:ok, describe_vpc_endpoint_service_permissions_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_endpoint_service_permissions(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcEndpointServicePermissions", input, options)
  end

  @doc """
  Describes available services to which you can create a VPC endpoint.

  When the service provider and the consumer have different accounts in multiple
  Availability Zones, and the consumer views the VPC endpoint service information,
  the
  response only includes the common Availability Zones. For example, when the
  service
  provider account uses `us-east-1a` and `us-east-1c` and the
  consumer uses `us-east-1a` and `us-east-1b`, the response includes
  the VPC endpoint services in the common Availability Zone,
  `us-east-1a`.
  """
  @spec describe_vpc_endpoint_services(map(), describe_vpc_endpoint_services_request(), list()) ::
          {:ok, describe_vpc_endpoint_services_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_endpoint_services(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcEndpointServices", input, options)
  end

  @doc """
  Describes your VPC endpoints.

  The default is to describe all your VPC endpoints.
  Alternatively, you can specify specific VPC endpoint IDs or filter the results
  to
  include only the VPC endpoints that match specific criteria.
  """
  @spec describe_vpc_endpoints(map(), describe_vpc_endpoints_request(), list()) ::
          {:ok, describe_vpc_endpoints_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_endpoints(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcEndpoints", input, options)
  end

  @doc """
  Describes your VPC peering connections.

  The default is to describe all your VPC peering connections.
  Alternatively, you can specify specific VPC peering connection IDs or filter the
  results to
  include only the VPC peering connections that match specific criteria.
  """
  @spec describe_vpc_peering_connections(
          map(),
          describe_vpc_peering_connections_request(),
          list()
        ) ::
          {:ok, describe_vpc_peering_connections_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpc_peering_connections(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcPeeringConnections", input, options)
  end

  @doc """
  Describes your VPCs.

  The default is to describe all your VPCs.
  Alternatively, you can specify specific VPC IDs or filter the results to
  include only the VPCs that match specific criteria.
  """
  @spec describe_vpcs(map(), describe_vpcs_request(), list()) ::
          {:ok, describe_vpcs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpcs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpcs", input, options)
  end

  @doc """
  Describes one or more of your VPN connections.

  For more information, see [Amazon Web Services Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) in the *Amazon
  Web Services Site-to-Site VPN
  User Guide*.
  """
  @spec describe_vpn_connections(map(), describe_vpn_connections_request(), list()) ::
          {:ok, describe_vpn_connections_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpn_connections(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpnConnections", input, options)
  end

  @doc """
  Describes one or more of your virtual private gateways.

  For more information, see [Amazon Web Services Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) in the *Amazon
  Web Services Site-to-Site VPN
  User Guide*.
  """
  @spec describe_vpn_gateways(map(), describe_vpn_gateways_request(), list()) ::
          {:ok, describe_vpn_gateways_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def describe_vpn_gateways(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DescribeVpnGateways", input, options)
  end

  @doc """

  This action is deprecated.

  Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance
  has been unlinked,
  the VPC security groups are no longer associated with it. An instance is
  automatically unlinked from
  a VPC when it's stopped.
  """
  @spec detach_classic_link_vpc(map(), detach_classic_link_vpc_request(), list()) ::
          {:ok, detach_classic_link_vpc_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def detach_classic_link_vpc(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DetachClassicLinkVpc", input, options)
  end

  @doc """
  Detaches an internet gateway from a VPC, disabling connectivity between the
  internet
  and the VPC.

  The VPC must not contain any running instances with Elastic IP addresses or
  public IPv4 addresses.
  """
  @spec detach_internet_gateway(map(), detach_internet_gateway_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def detach_internet_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DetachInternetGateway", input, options)
  end

  @doc """
  Detaches a network interface from an instance.
  """
  @spec detach_network_interface(map(), detach_network_interface_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def detach_network_interface(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DetachNetworkInterface", input, options)
  end

  @doc """
  Detaches the specified Amazon Web Services Verified Access trust provider from
  the specified Amazon Web Services Verified Access instance.
  """
  @spec detach_verified_access_trust_provider(
          map(),
          detach_verified_access_trust_provider_request(),
          list()
        ) ::
          {:ok, detach_verified_access_trust_provider_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def detach_verified_access_trust_provider(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DetachVerifiedAccessTrustProvider", input, options)
  end

  @doc """
  Detaches an EBS volume from an instance.

  Make sure to unmount any file systems on the
  device within your operating system before detaching the volume. Failure to do
  so can result
  in the volume becoming stuck in the `busy` state while detaching. If this
  happens,
  detachment can be delayed indefinitely until you unmount the volume, force
  detachment, reboot
  the instance, or all three. If an EBS volume is the root device of an instance,
  it can't be
  detached while the instance is running. To detach the root volume, stop the
  instance
  first.

  When a volume with an Amazon Web Services Marketplace product code is detached
  from an instance, the
  product code is no longer associated with the instance.

  You can't detach or force detach volumes that are attached to Amazon Web
  Services-managed resources.
  Attempting to do this results in the `UnsupportedOperationException`
  exception.

  For more information, see [Detach an Amazon EBS volume](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-detaching-volume.html)
  in the
  *Amazon EBS User Guide*.
  """
  @spec detach_volume(map(), detach_volume_request(), list()) ::
          {:ok, volume_attachment(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def detach_volume(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DetachVolume", input, options)
  end

  @doc """
  Detaches a virtual private gateway from a VPC.

  You do this if you're planning to turn
  off the VPC and not use it anymore. You can confirm a virtual private gateway
  has been
  completely detached from a VPC by describing the virtual private gateway (any
  attachments to the virtual private gateway are also described).

  You must wait for the attachment's state to switch to `detached` before you
  can delete the VPC or attach a different VPC to the virtual private gateway.
  """
  @spec detach_vpn_gateway(map(), detach_vpn_gateway_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def detach_vpn_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DetachVpnGateway", input, options)
  end

  @doc """
  Disables Elastic IP address transfer.

  For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro)
  in the *Amazon VPC User Guide*.
  """
  @spec disable_address_transfer(map(), disable_address_transfer_request(), list()) ::
          {:ok, disable_address_transfer_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_address_transfer(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableAddressTransfer", input, options)
  end

  @doc """
  Disables Allowed AMIs for your account in the specified Amazon Web Services
  Region.

  When set to
  `disabled`, the image criteria in your Allowed AMIs settings do not apply, and
  no
  restrictions are placed on AMI discoverability or usage. Users in your account
  can launch
  instances using any public AMI or AMI shared with your account.

  The Allowed AMIs feature does not restrict the AMIs owned by your account.
  Regardless of
  the criteria you set, the AMIs created by your account will always be
  discoverable and
  usable by users in your account.

  For more information, see [Control the discovery and use of AMIs in Amazon EC2 with Allowed
  AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html)
  in
  *Amazon EC2 User Guide*.
  """
  @spec disable_allowed_images_settings(map(), disable_allowed_images_settings_request(), list()) ::
          {:ok, disable_allowed_images_settings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_allowed_images_settings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableAllowedImagesSettings", input, options)
  end

  @doc """
  Disables Infrastructure Performance metric subscriptions.
  """
  @spec disable_aws_network_performance_metric_subscription(
          map(),
          disable_aws_network_performance_metric_subscription_request(),
          list()
        ) ::
          {:ok, disable_aws_network_performance_metric_subscription_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_aws_network_performance_metric_subscription(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DisableAwsNetworkPerformanceMetricSubscription",
      input,
      options
    )
  end

  @doc """
  Disables EBS encryption by default for your account in the current Region.

  After you disable encryption by default, you can still create encrypted volumes
  by
  enabling encryption when you create each volume.

  Disabling encryption by default does not change the encryption status of your
  existing volumes.

  For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)
  in the
  *Amazon EBS User Guide*.
  """
  @spec disable_ebs_encryption_by_default(
          map(),
          disable_ebs_encryption_by_default_request(),
          list()
        ) ::
          {:ok, disable_ebs_encryption_by_default_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_ebs_encryption_by_default(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableEbsEncryptionByDefault", input, options)
  end

  @doc """
  Discontinue Windows fast launch for a Windows AMI, and clean up existing
  pre-provisioned
  snapshots.

  After you disable Windows fast launch, the AMI uses the standard launch process
  for
  each new instance. Amazon EC2 must remove all pre-provisioned snapshots before
  you can enable
  Windows fast launch again.

  You can only change these settings for Windows AMIs that you own or that have
  been
  shared with you.
  """
  @spec disable_fast_launch(map(), disable_fast_launch_request(), list()) ::
          {:ok, disable_fast_launch_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_fast_launch(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableFastLaunch", input, options)
  end

  @doc """
  Disables fast snapshot restores for the specified snapshots in the specified
  Availability Zones.
  """
  @spec disable_fast_snapshot_restores(map(), disable_fast_snapshot_restores_request(), list()) ::
          {:ok, disable_fast_snapshot_restores_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_fast_snapshot_restores(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableFastSnapshotRestores", input, options)
  end

  @doc """
  Sets the AMI state to `disabled` and removes all launch permissions from the
  AMI.

  A disabled AMI can't be used for instance launches.

  A disabled AMI can't be shared. If an AMI was public or previously shared, it is
  made
  private. If an AMI was shared with an Amazon Web Services account, organization,
  or Organizational Unit,
  they lose access to the disabled AMI.

  A disabled AMI does not appear in
  [DescribeImages](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html) API calls by
  default.

  Only the AMI owner can disable an AMI.

  You can re-enable a disabled AMI using
  [EnableImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EnableImage.html).

  For more information, see [Disable an AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disable-an-ami.html) in
  the
  *Amazon EC2 User Guide*.
  """
  @spec disable_image(map(), disable_image_request(), list()) ::
          {:ok, disable_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableImage", input, options)
  end

  @doc """
  Disables *block public access for AMIs* at the account level in the
  specified Amazon Web Services Region.

  This removes the *block public access* restriction
  from your account. With the restriction removed, you can publicly share your
  AMIs in the
  specified Amazon Web Services Region.

  For more information, see [Block public access to your
  AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-public-access-to-amis.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec disable_image_block_public_access(
          map(),
          disable_image_block_public_access_request(),
          list()
        ) ::
          {:ok, disable_image_block_public_access_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_image_block_public_access(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableImageBlockPublicAccess", input, options)
  end

  @doc """
  Cancels the deprecation of the specified AMI.

  For more information, see [Deprecate an Amazon EC2 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html) in
  the
  *Amazon EC2 User Guide*.
  """
  @spec disable_image_deprecation(map(), disable_image_deprecation_request(), list()) ::
          {:ok, disable_image_deprecation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_image_deprecation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableImageDeprecation", input, options)
  end

  @doc """
  Disables deregistration protection for an AMI.

  When deregistration protection is disabled,
  the AMI can be deregistered.

  If you chose to include a 24-hour cooldown period when you enabled
  deregistration
  protection for the AMI, then, when you disable deregistration protection, you
  won’t
  immediately be able to deregister the AMI.

  For more information, see [Protect an Amazon EC2 AMI from deregistration](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deregistration-protection.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec disable_image_deregistration_protection(
          map(),
          disable_image_deregistration_protection_request(),
          list()
        ) ::
          {:ok, disable_image_deregistration_protection_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_image_deregistration_protection(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableImageDeregistrationProtection", input, options)
  end

  @doc """
  Disable the IPAM account.

  For more information, see [Enable integration with Organizations](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html)
  in the *Amazon VPC IPAM User Guide*.
  """
  @spec disable_ipam_organization_admin_account(
          map(),
          disable_ipam_organization_admin_account_request(),
          list()
        ) ::
          {:ok, disable_ipam_organization_admin_account_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_ipam_organization_admin_account(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableIpamOrganizationAdminAccount", input, options)
  end

  @doc """
  Disables route propagation from a route server to a specified 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.

  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](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html).

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec disable_route_server_propagation(
          map(),
          disable_route_server_propagation_request(),
          list()
        ) ::
          {:ok, disable_route_server_propagation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_route_server_propagation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableRouteServerPropagation", input, options)
  end

  @doc """
  Disables access to the EC2 serial console of all instances for your account.

  By default,
  access to the EC2 serial console is disabled for your account. For more
  information, see
  [Manage account access to the EC2 serial console](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access)
  in the *Amazon EC2
  User Guide*.
  """
  @spec disable_serial_console_access(map(), disable_serial_console_access_request(), list()) ::
          {:ok, disable_serial_console_access_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_serial_console_access(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableSerialConsoleAccess", input, options)
  end

  @doc """
  Disables the *block public access for snapshots* setting at
  the account level for the specified Amazon Web Services Region.

  After you disable block public
  access for snapshots in a Region, users can publicly share snapshots in that
  Region.

  Enabling block public access for snapshots in *block-all-sharing*
  mode does not change the permissions for snapshots that are already publicly
  shared.
  Instead, it prevents these snapshots from be publicly visible and publicly
  accessible.
  Therefore, the attributes for these snapshots still indicate that they are
  publicly
  shared, even though they are not publicly available.

  If you disable block public access , these snapshots will become publicly
  available
  again.

  For more information, see [
  Block public access for
  snapshots](https://docs.aws.amazon.com/ebs/latest/userguide/block-public-access-snapshots.html)
  in the *Amazon EBS User Guide* .
  """
  @spec disable_snapshot_block_public_access(
          map(),
          disable_snapshot_block_public_access_request(),
          list()
        ) ::
          {:ok, disable_snapshot_block_public_access_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_snapshot_block_public_access(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableSnapshotBlockPublicAccess", input, options)
  end

  @doc """
  Disables the specified resource attachment from propagating routes to the
  specified
  propagation route table.
  """
  @spec disable_transit_gateway_route_table_propagation(
          map(),
          disable_transit_gateway_route_table_propagation_request(),
          list()
        ) ::
          {:ok, disable_transit_gateway_route_table_propagation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_transit_gateway_route_table_propagation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DisableTransitGatewayRouteTablePropagation",
      input,
      options
    )
  end

  @doc """
  Disables a virtual private gateway (VGW) from propagating routes to a specified
  route
  table of a VPC.
  """
  @spec disable_vgw_route_propagation(map(), disable_vgw_route_propagation_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_vgw_route_propagation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableVgwRoutePropagation", input, options)
  end

  @doc """

  This action is deprecated.

  Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC that
  has EC2-Classic instances
  linked to it.
  """
  @spec disable_vpc_classic_link(map(), disable_vpc_classic_link_request(), list()) ::
          {:ok, disable_vpc_classic_link_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_vpc_classic_link(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableVpcClassicLink", input, options)
  end

  @doc """

  This action is deprecated.

  Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve
  to
  public IP addresses when addressed between a linked EC2-Classic instance and
  instances
  in the VPC to which it's linked.

  You must specify a VPC ID in the request.
  """
  @spec disable_vpc_classic_link_dns_support(
          map(),
          disable_vpc_classic_link_dns_support_request(),
          list()
        ) ::
          {:ok, disable_vpc_classic_link_dns_support_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disable_vpc_classic_link_dns_support(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisableVpcClassicLinkDnsSupport", input, options)
  end

  @doc """
  Disassociates an Elastic IP address from the instance or network interface it's
  associated with.

  This is an idempotent operation. If you perform the operation more than once,
  Amazon EC2 doesn't return an error.

  An address cannot be disassociated if the all of the following conditions are
  met:

    *
  Network interface has a `publicDualStackDnsName` publicDnsName

    *
  Public IPv4 address is the primary public IPv4 address

    *
  Network interface only has one remaining public IPv4 address
  """
  @spec disassociate_address(map(), disassociate_address_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_address(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateAddress", input, options)
  end

  @doc """
  Cancels a pending request to assign billing of the unused capacity of a Capacity
  Reservation to a consumer account, or revokes a request that has already been
  accepted.

  For more information, see [Billing assignment for shared Amazon EC2 Capacity
  Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/assign-billing.html).
  """
  @spec disassociate_capacity_reservation_billing_owner(
          map(),
          disassociate_capacity_reservation_billing_owner_request(),
          list()
        ) ::
          {:ok, disassociate_capacity_reservation_billing_owner_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_capacity_reservation_billing_owner(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DisassociateCapacityReservationBillingOwner",
      input,
      options
    )
  end

  @doc """
  Disassociates a target network from the specified Client VPN endpoint.

  When you disassociate the
  last target network from a Client VPN, the following happens:

    *
  The route that was automatically added for the VPC is deleted

    *
  All active client connections are terminated

    *
  New client connections are disallowed

    *
  The Client VPN endpoint's status changes to `pending-associate`
  """
  @spec disassociate_client_vpn_target_network(
          map(),
          disassociate_client_vpn_target_network_request(),
          list()
        ) ::
          {:ok, disassociate_client_vpn_target_network_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_client_vpn_target_network(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateClientVpnTargetNetwork", input, options)
  end

  @doc """
  Disassociates an IAM role from an Certificate Manager (ACM) certificate.

  Disassociating an IAM role
  from an ACM certificate removes the Amazon S3 object that contains the
  certificate, certificate chain, and
  encrypted private key from the Amazon S3 bucket. It also revokes the IAM role's
  permission to use the
  KMS key used to encrypt the private key. This effectively revokes the role's
  permission
  to use the certificate.
  """
  @spec disassociate_enclave_certificate_iam_role(
          map(),
          disassociate_enclave_certificate_iam_role_request(),
          list()
        ) ::
          {:ok, disassociate_enclave_certificate_iam_role_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_enclave_certificate_iam_role(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateEnclaveCertificateIamRole", input, options)
  end

  @doc """
  Disassociates an IAM instance profile from a running or stopped instance.

  Use `DescribeIamInstanceProfileAssociations` to get the association
  ID.
  """
  @spec disassociate_iam_instance_profile(
          map(),
          disassociate_iam_instance_profile_request(),
          list()
        ) ::
          {:ok, disassociate_iam_instance_profile_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_iam_instance_profile(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateIamInstanceProfile", input, options)
  end

  @doc """
  Disassociates one or more targets from an event window.

  For more information, see [Define event windows for scheduled events](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec disassociate_instance_event_window(
          map(),
          disassociate_instance_event_window_request(),
          list()
        ) ::
          {:ok, disassociate_instance_event_window_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_instance_event_window(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateInstanceEventWindow", input, options)
  end

  @doc """
  Remove the association between your Autonomous System Number (ASN) and your
  BYOIP CIDR.

  You may want to use this action to disassociate an ASN from a CIDR or if you
  want to swap ASNs.
  For more information, see [Tutorial: Bring your ASN to IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoasn.html) in the
  *Amazon VPC IPAM guide*.
  """
  @spec disassociate_ipam_byoasn(map(), disassociate_ipam_byoasn_request(), list()) ::
          {:ok, disassociate_ipam_byoasn_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_ipam_byoasn(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateIpamByoasn", input, options)
  end

  @doc """
  Disassociates a resource discovery from an Amazon VPC IPAM.

  A resource discovery is an IPAM component that enables IPAM to manage and
  monitor resources that belong to the owning account.
  """
  @spec disassociate_ipam_resource_discovery(
          map(),
          disassociate_ipam_resource_discovery_request(),
          list()
        ) ::
          {:ok, disassociate_ipam_resource_discovery_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_ipam_resource_discovery(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateIpamResourceDiscovery", input, options)
  end

  @doc """
  Disassociates secondary Elastic IP addresses (EIPs) from a public NAT gateway.

  You cannot disassociate your primary EIP. For more information, see [Edit secondary IP address
  associations](https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-working-with.html#nat-gateway-edit-secondary)
  in the *Amazon VPC User Guide*.

  While disassociating is in progress, you cannot associate/disassociate
  additional EIPs while the connections are being drained. You are, however,
  allowed to delete the NAT gateway.

  An EIP is released only at the end of MaxDrainDurationSeconds. It stays
  associated and supports the existing connections but does not support any new
  connections
  (new connections are distributed across the remaining associated EIPs). As the
  existing
  connections drain out, the EIPs (and the corresponding private IP addresses
  mapped to them)
  are released.
  """
  @spec disassociate_nat_gateway_address(
          map(),
          disassociate_nat_gateway_address_request(),
          list()
        ) ::
          {:ok, disassociate_nat_gateway_address_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_nat_gateway_address(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateNatGatewayAddress", input, options)
  end

  @doc """
  Disassociates a route server from a VPC.

  A route server association is the connection established between a route server
  and a VPC.

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec disassociate_route_server(map(), disassociate_route_server_request(), list()) ::
          {:ok, disassociate_route_server_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_route_server(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateRouteServer", input, options)
  end

  @doc """
  Disassociates a subnet or gateway from a route table.

  After you perform this action, the subnet no longer uses the routes in the route
  table.
  Instead, it uses the routes in the VPC's main route table. For more information
  about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)
  in the *Amazon VPC User Guide*.
  """
  @spec disassociate_route_table(map(), disassociate_route_table_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateRouteTable", input, options)
  end

  @doc """
  Disassociates a security group from a VPC.

  You cannot disassociate the security group if any Elastic network interfaces in
  the associated VPC are still associated with the security group.

  Note that the disassociation is asynchronous and you can check the status of the
  request with
  [DescribeSecurityGroupVpcAssociations](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroupVpcAssociations.html).
  """
  @spec disassociate_security_group_vpc(map(), disassociate_security_group_vpc_request(), list()) ::
          {:ok, disassociate_security_group_vpc_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_security_group_vpc(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateSecurityGroupVpc", input, options)
  end

  @doc """
  Disassociates a CIDR block from a subnet.

  Currently, you can disassociate an IPv6 CIDR block only. You must detach or
  delete all gateways and resources that are associated with the CIDR block before
  you can disassociate it.
  """
  @spec disassociate_subnet_cidr_block(map(), disassociate_subnet_cidr_block_request(), list()) ::
          {:ok, disassociate_subnet_cidr_block_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_subnet_cidr_block(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateSubnetCidrBlock", input, options)
  end

  @doc """
  Disassociates the specified subnets from the transit gateway multicast domain.
  """
  @spec disassociate_transit_gateway_multicast_domain(
          map(),
          disassociate_transit_gateway_multicast_domain_request(),
          list()
        ) ::
          {:ok, disassociate_transit_gateway_multicast_domain_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_transit_gateway_multicast_domain(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "DisassociateTransitGatewayMulticastDomain",
      input,
      options
    )
  end

  @doc """
  Removes the association between an an attachment and a policy table.
  """
  @spec disassociate_transit_gateway_policy_table(
          map(),
          disassociate_transit_gateway_policy_table_request(),
          list()
        ) ::
          {:ok, disassociate_transit_gateway_policy_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_transit_gateway_policy_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateTransitGatewayPolicyTable", input, options)
  end

  @doc """
  Disassociates a resource attachment from a transit gateway route table.
  """
  @spec disassociate_transit_gateway_route_table(
          map(),
          disassociate_transit_gateway_route_table_request(),
          list()
        ) ::
          {:ok, disassociate_transit_gateway_route_table_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_transit_gateway_route_table(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateTransitGatewayRouteTable", input, options)
  end

  @doc """
  Removes an association between a branch network interface with a trunk network
  interface.
  """
  @spec disassociate_trunk_interface(map(), disassociate_trunk_interface_request(), list()) ::
          {:ok, disassociate_trunk_interface_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_trunk_interface(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateTrunkInterface", input, options)
  end

  @doc """
  Disassociates a CIDR block from a VPC.

  To disassociate the CIDR block, you must
  specify its association ID. You can get the association ID by using
  `DescribeVpcs`. You must detach or delete all gateways and resources that
  are associated with the CIDR block before you can disassociate it.

  You cannot disassociate the CIDR block with which you originally created the VPC
  (the
  primary CIDR block).
  """
  @spec disassociate_vpc_cidr_block(map(), disassociate_vpc_cidr_block_request(), list()) ::
          {:ok, disassociate_vpc_cidr_block_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def disassociate_vpc_cidr_block(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "DisassociateVpcCidrBlock", input, options)
  end

  @doc """
  Enables Elastic IP address transfer.

  For more information, see [Transfer Elastic IP addresses](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro)
  in the *Amazon VPC User Guide*.
  """
  @spec enable_address_transfer(map(), enable_address_transfer_request(), list()) ::
          {:ok, enable_address_transfer_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_address_transfer(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableAddressTransfer", input, options)
  end

  @doc """
  Enables Allowed AMIs for your account in the specified Amazon Web Services
  Region.

  Two values are
  accepted:

    *

  `enabled`: The image criteria in your Allowed AMIs settings are applied. As
  a result, only AMIs matching these criteria are discoverable and can be used by
  your
  account to launch instances.

    *

  `audit-mode`: The image criteria in your Allowed AMIs settings are not
  applied. No restrictions are placed on AMI discoverability or usage. Users in
  your account
  can launch instances using any public AMI or AMI shared with your account.

  The purpose of `audit-mode` is to indicate which AMIs will be affected when
  Allowed AMIs is `enabled`. In `audit-mode`, each AMI displays either
  `"ImageAllowed": true` or `"ImageAllowed": false` to indicate
  whether the AMI will be discoverable and available to users in the account when
  Allowed
  AMIs is enabled.

  The Allowed AMIs feature does not restrict the AMIs owned by your account.
  Regardless of
  the criteria you set, the AMIs created by your account will always be
  discoverable and
  usable by users in your account.

  For more information, see [Control the discovery and use of AMIs in Amazon EC2 with Allowed
  AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html)
  in
  *Amazon EC2 User Guide*.
  """
  @spec enable_allowed_images_settings(map(), enable_allowed_images_settings_request(), list()) ::
          {:ok, enable_allowed_images_settings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_allowed_images_settings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableAllowedImagesSettings", input, options)
  end

  @doc """
  Enables Infrastructure Performance subscriptions.
  """
  @spec enable_aws_network_performance_metric_subscription(
          map(),
          enable_aws_network_performance_metric_subscription_request(),
          list()
        ) ::
          {:ok, enable_aws_network_performance_metric_subscription_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_aws_network_performance_metric_subscription(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "EnableAwsNetworkPerformanceMetricSubscription",
      input,
      options
    )
  end

  @doc """
  Enables EBS encryption by default for your account in the current Region.

  After you enable encryption by default, the EBS volumes that you create are
  always encrypted, either using the default KMS key or the KMS key that you
  specified
  when you created each volume. For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)
  in the
  *Amazon EBS User Guide*.

  Enabling encryption by default has no effect on the encryption status of your
  existing volumes.

  After you enable encryption by default, you can no longer launch instances
  using instance types that do not support encryption. For more information, see
  [Supported instance
  types](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption-requirements.html#ebs-encryption_supported_instances).
  """
  @spec enable_ebs_encryption_by_default(
          map(),
          enable_ebs_encryption_by_default_request(),
          list()
        ) ::
          {:ok, enable_ebs_encryption_by_default_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_ebs_encryption_by_default(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableEbsEncryptionByDefault", input, options)
  end

  @doc """
  When you enable Windows fast launch for a Windows AMI, images are
  pre-provisioned, using
  snapshots to launch instances up to 65% faster.

  To create the optimized Windows image, Amazon EC2
  launches an instance and runs through Sysprep steps, rebooting as required. Then
  it creates a
  set of reserved snapshots that are used for subsequent launches. The reserved
  snapshots are
  automatically replenished as they are used, depending on your settings for
  launch
  frequency.

  You can only change these settings for Windows AMIs that you own or that have
  been
  shared with you.
  """
  @spec enable_fast_launch(map(), enable_fast_launch_request(), list()) ::
          {:ok, enable_fast_launch_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_fast_launch(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableFastLaunch", input, options)
  end

  @doc """
  Enables fast snapshot restores for the specified snapshots in the specified
  Availability Zones.

  You get the full benefit of fast snapshot restores after they enter the
  `enabled` state.

  For more information, see [Amazon EBS fast snapshot restore](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-fast-snapshot-restore.html)
  in the *Amazon EBS User Guide*.
  """
  @spec enable_fast_snapshot_restores(map(), enable_fast_snapshot_restores_request(), list()) ::
          {:ok, enable_fast_snapshot_restores_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_fast_snapshot_restores(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableFastSnapshotRestores", input, options)
  end

  @doc """
  Re-enables a disabled AMI.

  The re-enabled AMI is marked as `available` and can
  be used for instance launches, appears in describe operations, and can be
  shared. Amazon Web Services
  accounts, organizations, and Organizational Units that lost access to the AMI
  when it was
  disabled do not regain access automatically. Once the AMI is available, it can
  be shared with
  them again.

  Only the AMI owner can re-enable a disabled AMI.

  For more information, see [Disable an Amazon EC2 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/disable-an-ami.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec enable_image(map(), enable_image_request(), list()) ::
          {:ok, enable_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableImage", input, options)
  end

  @doc """
  Enables *block public access for AMIs* at the account level in the
  specified Amazon Web Services Region.

  This prevents the public sharing of your AMIs. However, if you already
  have public AMIs, they will remain publicly available.

  The API can take up to 10 minutes to configure this setting. During this time,
  if you run
  [GetImageBlockPublicAccessState](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetImageBlockPublicAccessState.html), the response will be `unblocked`. When
  the API has completed the configuration, the response will be
  `block-new-sharing`.

  For more information, see [Block
  public access to your
  AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-public-access-to-amis.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec enable_image_block_public_access(
          map(),
          enable_image_block_public_access_request(),
          list()
        ) ::
          {:ok, enable_image_block_public_access_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_image_block_public_access(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableImageBlockPublicAccess", input, options)
  end

  @doc """
  Enables deprecation of the specified AMI at the specified date and time.

  For more information, see [Deprecate an AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html) in
  the
  *Amazon EC2 User Guide*.
  """
  @spec enable_image_deprecation(map(), enable_image_deprecation_request(), list()) ::
          {:ok, enable_image_deprecation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_image_deprecation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableImageDeprecation", input, options)
  end

  @doc """
  Enables deregistration protection for an AMI.

  When deregistration protection is enabled,
  the AMI can't be deregistered.

  To allow the AMI to be deregistered, you must first disable deregistration
  protection.

  For more information, see [Protect an Amazon EC2 AMI from
  deregistration](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deregistration-protection.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec enable_image_deregistration_protection(
          map(),
          enable_image_deregistration_protection_request(),
          list()
        ) ::
          {:ok, enable_image_deregistration_protection_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_image_deregistration_protection(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableImageDeregistrationProtection", input, options)
  end

  @doc """
  Enable an Organizations member account as the IPAM admin account.

  You cannot select the Organizations management account as the IPAM admin
  account. For more information, see [Enable integration with Organizations](https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html)
  in the *Amazon VPC IPAM User Guide*.
  """
  @spec enable_ipam_organization_admin_account(
          map(),
          enable_ipam_organization_admin_account_request(),
          list()
        ) ::
          {:ok, enable_ipam_organization_admin_account_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_ipam_organization_admin_account(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableIpamOrganizationAdminAccount", input, options)
  end

  @doc """
  Establishes a trust relationship between Reachability Analyzer and
  Organizations.

  This operation must be performed by the management account for the organization.

  After you establish a trust relationship, a user in the management account or
  a delegated administrator account can run a cross-account analysis using
  resources
  from the member accounts.
  """
  @spec enable_reachability_analyzer_organization_sharing(
          map(),
          enable_reachability_analyzer_organization_sharing_request(),
          list()
        ) ::
          {:ok, enable_reachability_analyzer_organization_sharing_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_reachability_analyzer_organization_sharing(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "EnableReachabilityAnalyzerOrganizationSharing",
      input,
      options
    )
  end

  @doc """
  Defines which route tables the route server can update with routes.

  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.

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec enable_route_server_propagation(map(), enable_route_server_propagation_request(), list()) ::
          {:ok, enable_route_server_propagation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_route_server_propagation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableRouteServerPropagation", input, options)
  end

  @doc """
  Enables access to the EC2 serial console of all instances for your account.

  By default,
  access to the EC2 serial console is disabled for your account. For more
  information, see [Manage account access to the EC2 serial console](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access)
  in the *Amazon EC2 User Guide*.
  """
  @spec enable_serial_console_access(map(), enable_serial_console_access_request(), list()) ::
          {:ok, enable_serial_console_access_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_serial_console_access(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableSerialConsoleAccess", input, options)
  end

  @doc """
  Enables or modifies the *block public access for snapshots*
  setting at the account level for the specified Amazon Web Services Region.

  After you enable block
  public access for snapshots in a Region, users can no longer request public
  sharing
  for snapshots in that Region. Snapshots that are already publicly shared are
  either
  treated as private or they remain publicly shared, depending on the
  **State** that you specify.

  Enabling block public access for snapshots in *block all sharing*
  mode does not change the permissions for snapshots that are already publicly
  shared.
  Instead, it prevents these snapshots from be publicly visible and publicly
  accessible.
  Therefore, the attributes for these snapshots still indicate that they are
  publicly
  shared, even though they are not publicly available.

  If you later disable block public access or change the mode to *block new
  sharing*, these snapshots will become publicly available again.

  For more information, see [
  Block public access for
  snapshots](https://docs.aws.amazon.com/ebs/latest/userguide/block-public-access-snapshots.html)
  in the *Amazon EBS User Guide*.
  """
  @spec enable_snapshot_block_public_access(
          map(),
          enable_snapshot_block_public_access_request(),
          list()
        ) ::
          {:ok, enable_snapshot_block_public_access_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_snapshot_block_public_access(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableSnapshotBlockPublicAccess", input, options)
  end

  @doc """
  Enables the specified attachment to propagate routes to the specified
  propagation route table.
  """
  @spec enable_transit_gateway_route_table_propagation(
          map(),
          enable_transit_gateway_route_table_propagation_request(),
          list()
        ) ::
          {:ok, enable_transit_gateway_route_table_propagation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_transit_gateway_route_table_propagation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "EnableTransitGatewayRouteTablePropagation",
      input,
      options
    )
  end

  @doc """
  Enables a virtual private gateway (VGW) to propagate routes to the specified
  route
  table of a VPC.
  """
  @spec enable_vgw_route_propagation(map(), enable_vgw_route_propagation_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_vgw_route_propagation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableVgwRoutePropagation", input, options)
  end

  @doc """
  Enables I/O operations for a volume that had I/O operations disabled because the
  data on
  the volume was potentially inconsistent.
  """
  @spec enable_volume_i_o(map(), enable_volume_i_o_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_volume_i_o(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableVolumeIO", input, options)
  end

  @doc """

  This action is deprecated.

  Enables a VPC for ClassicLink. You can then link EC2-Classic instances to your
  ClassicLink-enabled VPC to allow communication over private IP addresses. You
  cannot
  enable your VPC for ClassicLink if any of your VPC route tables have existing
  routes for
  address ranges within the `10.0.0.0/8` IP address range, excluding local
  routes for VPCs in the `10.0.0.0/16` and `10.1.0.0/16` IP address
  ranges.
  """
  @spec enable_vpc_classic_link(map(), enable_vpc_classic_link_request(), list()) ::
          {:ok, enable_vpc_classic_link_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_vpc_classic_link(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableVpcClassicLink", input, options)
  end

  @doc """

  This action is deprecated.

  Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled,
  the DNS
  hostname of a linked EC2-Classic instance resolves to its private IP address
  when
  addressed from an instance in the VPC to which it's linked. Similarly, the DNS
  hostname
  of an instance in a VPC resolves to its private IP address when addressed from a
  linked
  EC2-Classic instance.

  You must specify a VPC ID in the request.
  """
  @spec enable_vpc_classic_link_dns_support(
          map(),
          enable_vpc_classic_link_dns_support_request(),
          list()
        ) ::
          {:ok, enable_vpc_classic_link_dns_support_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def enable_vpc_classic_link_dns_support(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "EnableVpcClassicLinkDnsSupport", input, options)
  end

  @doc """
  Downloads the client certificate revocation list for the specified Client VPN
  endpoint.
  """
  @spec export_client_vpn_client_certificate_revocation_list(
          map(),
          export_client_vpn_client_certificate_revocation_list_request(),
          list()
        ) ::
          {:ok, export_client_vpn_client_certificate_revocation_list_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def export_client_vpn_client_certificate_revocation_list(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "ExportClientVpnClientCertificateRevocationList",
      input,
      options
    )
  end

  @doc """
  Downloads the contents of the Client VPN endpoint configuration file for the
  specified Client VPN endpoint.

  The Client VPN endpoint configuration
  file includes the Client VPN endpoint and certificate information clients need
  to establish a connection
  with the Client VPN endpoint.
  """
  @spec export_client_vpn_client_configuration(
          map(),
          export_client_vpn_client_configuration_request(),
          list()
        ) ::
          {:ok, export_client_vpn_client_configuration_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def export_client_vpn_client_configuration(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ExportClientVpnClientConfiguration", input, options)
  end

  @doc """
  Exports an Amazon Machine Image (AMI) to a VM file.

  For more information, see [Exporting a VM directly from an Amazon Machine Image
  (AMI)](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport_image.html)
  in the
  *VM Import/Export User Guide*.
  """
  @spec export_image(map(), export_image_request(), list()) ::
          {:ok, export_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def export_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ExportImage", input, options)
  end

  @doc """
  Exports routes from the specified transit gateway route table to the specified
  S3 bucket.

  By default, all routes are exported. Alternatively, you can filter by CIDR
  range.

  The routes are saved to the specified bucket in a JSON file. For more
  information, see
  [Export route tables to Amazon
  S3](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-export-route-tables)
  in the *Amazon Web Services Transit Gateways Guide*.
  """
  @spec export_transit_gateway_routes(map(), export_transit_gateway_routes_request(), list()) ::
          {:ok, export_transit_gateway_routes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def export_transit_gateway_routes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ExportTransitGatewayRoutes", input, options)
  end

  @doc """
  Exports the client configuration for a Verified Access instance.
  """
  @spec export_verified_access_instance_client_configuration(
          map(),
          export_verified_access_instance_client_configuration_request(),
          list()
        ) ::
          {:ok, export_verified_access_instance_client_configuration_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def export_verified_access_instance_client_configuration(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "ExportVerifiedAccessInstanceClientConfiguration",
      input,
      options
    )
  end

  @doc """
  Returns the currently negotiated security parameters for an active VPN tunnel,
  including IKE version, DH groups, encryption algorithms, and integrity
  algorithms.
  """
  @spec get_active_vpn_tunnel_status(map(), get_active_vpn_tunnel_status_request(), list()) ::
          {:ok, get_active_vpn_tunnel_status_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_active_vpn_tunnel_status(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetActiveVpnTunnelStatus", input, options)
  end

  @doc """
  Gets the current state of the Allowed AMIs setting and the list of Allowed AMIs
  criteria
  at the account level in the specified Region.

  The Allowed AMIs feature does not restrict the AMIs owned by your account.
  Regardless of
  the criteria you set, the AMIs created by your account will always be
  discoverable and
  usable by users in your account.

  For more information, see [Control the discovery and use of AMIs in Amazon EC2 with Allowed
  AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html)
  in
  *Amazon EC2 User Guide*.
  """
  @spec get_allowed_images_settings(map(), get_allowed_images_settings_request(), list()) ::
          {:ok, get_allowed_images_settings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_allowed_images_settings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetAllowedImagesSettings", input, options)
  end

  @doc """
  Returns the IAM roles that are associated with the specified ACM (ACM)
  certificate.

  It also returns the name of the Amazon S3 bucket and the Amazon S3 object key
  where the certificate,
  certificate chain, and encrypted private key bundle are stored, and the ARN of
  the KMS key
  that's used to encrypt the private key.
  """
  @spec get_associated_enclave_certificate_iam_roles(
          map(),
          get_associated_enclave_certificate_iam_roles_request(),
          list()
        ) ::
          {:ok, get_associated_enclave_certificate_iam_roles_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_associated_enclave_certificate_iam_roles(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetAssociatedEnclaveCertificateIamRoles", input, options)
  end

  @doc """
  Gets information about the IPv6 CIDR block associations for a specified IPv6
  address pool.
  """
  @spec get_associated_ipv6_pool_cidrs(map(), get_associated_ipv6_pool_cidrs_request(), list()) ::
          {:ok, get_associated_ipv6_pool_cidrs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_associated_ipv6_pool_cidrs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetAssociatedIpv6PoolCidrs", input, options)
  end

  @doc """
  Gets network performance data.
  """
  @spec get_aws_network_performance_data(
          map(),
          get_aws_network_performance_data_request(),
          list()
        ) ::
          {:ok, get_aws_network_performance_data_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_aws_network_performance_data(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetAwsNetworkPerformanceData", input, options)
  end

  @doc """
  Gets usage information about a Capacity Reservation.

  If the Capacity Reservation is
  shared, it shows usage information for the Capacity Reservation owner and each
  Amazon Web Services account that is currently using the shared capacity. If the
  Capacity
  Reservation is not shared, it shows only the Capacity Reservation owner's usage.
  """
  @spec get_capacity_reservation_usage(map(), get_capacity_reservation_usage_request(), list()) ::
          {:ok, get_capacity_reservation_usage_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_capacity_reservation_usage(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetCapacityReservationUsage", input, options)
  end

  @doc """
  Describes the allocations from the specified customer-owned address pool.
  """
  @spec get_coip_pool_usage(map(), get_coip_pool_usage_request(), list()) ::
          {:ok, get_coip_pool_usage_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_coip_pool_usage(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetCoipPoolUsage", input, options)
  end

  @doc """
  Gets the console output for the specified instance.

  For Linux instances, the instance
  console output displays the exact console output that would normally be
  displayed on a
  physical monitor attached to a computer. For Windows instances, the instance
  console
  output includes the last three system event log errors.

  For more information, see [Instance console
  output](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html#instance-console-console-output)
  in the *Amazon EC2 User Guide*.
  """
  @spec get_console_output(map(), get_console_output_request(), list()) ::
          {:ok, get_console_output_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_console_output(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetConsoleOutput", input, options)
  end

  @doc """
  Retrieve a JPG-format screenshot of a running instance to help with
  troubleshooting.

  The returned content is Base64-encoded.

  For more information, see [Instance console output](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/troubleshoot-unreachable-instance.html#instance-console-console-output)
  in the *Amazon EC2 User Guide*.
  """
  @spec get_console_screenshot(map(), get_console_screenshot_request(), list()) ::
          {:ok, get_console_screenshot_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_console_screenshot(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetConsoleScreenshot", input, options)
  end

  @doc """
  Retrieves a summary of the account status report.

  To view the full report, download it from the Amazon S3 bucket where it was
  saved.
  Reports are accessible only when they have the `complete` status. Reports
  with other statuses (`running`, `cancelled`, or
  `error`) are not available in the S3 bucket. For more information about
  downloading objects from an S3 bucket, see [Downloading objects](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)
  in
  the *Amazon Simple Storage Service User Guide*.

  For more information, see [Generating the account status report for declarative policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_status-report.html)
  in the
  *Amazon Web Services Organizations User Guide*.
  """
  @spec get_declarative_policies_report_summary(
          map(),
          get_declarative_policies_report_summary_request(),
          list()
        ) ::
          {:ok, get_declarative_policies_report_summary_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_declarative_policies_report_summary(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetDeclarativePoliciesReportSummary", input, options)
  end

  @doc """
  Describes the default credit option for CPU usage of a burstable performance
  instance
  family.

  For more information, see [Burstable performance
  instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec get_default_credit_specification(
          map(),
          get_default_credit_specification_request(),
          list()
        ) ::
          {:ok, get_default_credit_specification_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_default_credit_specification(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetDefaultCreditSpecification", input, options)
  end

  @doc """
  Describes the default KMS key for EBS encryption by default for your account in
  this Region.

  For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)
  in the *Amazon EBS User Guide*.
  """
  @spec get_ebs_default_kms_key_id(map(), get_ebs_default_kms_key_id_request(), list()) ::
          {:ok, get_ebs_default_kms_key_id_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_ebs_default_kms_key_id(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetEbsDefaultKmsKeyId", input, options)
  end

  @doc """
  Describes whether EBS encryption by default is enabled for your account in the
  current
  Region.

  For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)
  in the *Amazon EBS User Guide*.
  """
  @spec get_ebs_encryption_by_default(map(), get_ebs_encryption_by_default_request(), list()) ::
          {:ok, get_ebs_encryption_by_default_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_ebs_encryption_by_default(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetEbsEncryptionByDefault", input, options)
  end

  @doc """
  Generates a CloudFormation template that streamlines and automates the
  integration of VPC flow logs
  with Amazon Athena.

  This make it easier for you to query and gain insights from VPC flow logs data.
  Based on the information that you provide, we configure resources in the
  template to do the following:

    *
  Create a table in Athena that maps fields to a custom log format

    *
  Create a Lambda function that updates the table with new partitions on a daily,
  weekly, or
  monthly basis

    *
  Create a table partitioned between two timestamps in the past

    *
  Create a set of named queries in Athena that you can use to get started quickly

  `GetFlowLogsIntegrationTemplate` does not support integration between
  Amazon Web Services Transit Gateway Flow Logs and Amazon Athena.
  """
  @spec get_flow_logs_integration_template(
          map(),
          get_flow_logs_integration_template_request(),
          list()
        ) ::
          {:ok, get_flow_logs_integration_template_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_flow_logs_integration_template(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetFlowLogsIntegrationTemplate", input, options)
  end

  @doc """
  Lists the resource groups to which a Capacity Reservation has been added.
  """
  @spec get_groups_for_capacity_reservation(
          map(),
          get_groups_for_capacity_reservation_request(),
          list()
        ) ::
          {:ok, get_groups_for_capacity_reservation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_groups_for_capacity_reservation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetGroupsForCapacityReservation", input, options)
  end

  @doc """
  Preview a reservation purchase with configurations that match those of your
  Dedicated
  Host.

  You must have active Dedicated Hosts in your account before you purchase a
  reservation.

  This is a preview of the `PurchaseHostReservation` action and does not
  result in the offering being purchased.
  """
  @spec get_host_reservation_purchase_preview(
          map(),
          get_host_reservation_purchase_preview_request(),
          list()
        ) ::
          {:ok, get_host_reservation_purchase_preview_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_host_reservation_purchase_preview(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetHostReservationPurchasePreview", input, options)
  end

  @doc """
  Gets the current state of *block public access for AMIs* at the account
  level in the specified Amazon Web Services Region.

  For more information, see [Block public access to your
  AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-public-access-to-amis.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec get_image_block_public_access_state(
          map(),
          get_image_block_public_access_state_request(),
          list()
        ) ::
          {:ok, get_image_block_public_access_state_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_image_block_public_access_state(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetImageBlockPublicAccessState", input, options)
  end

  @doc """
  Gets the default instance metadata service (IMDS) settings that are set at the
  account
  level in the specified Amazon Web Services Region.

  For more information, see [Order of precedence for instance metadata options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html#instance-metadata-options-order-of-precedence)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec get_instance_metadata_defaults(map(), get_instance_metadata_defaults_request(), list()) ::
          {:ok, get_instance_metadata_defaults_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_instance_metadata_defaults(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetInstanceMetadataDefaults", input, options)
  end

  @doc """
  Gets the public endorsement key associated with the Nitro Trusted
  Platform Module (NitroTPM) for the specified instance.
  """
  @spec get_instance_tpm_ek_pub(map(), get_instance_tpm_ek_pub_request(), list()) ::
          {:ok, get_instance_tpm_ek_pub_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_instance_tpm_ek_pub(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetInstanceTpmEkPub", input, options)
  end

  @doc """
  Returns a list of instance types with the specified instance attributes.

  You can
  use the response to preview the instance types without launching instances. Note
  that the response does not consider capacity.

  When you specify multiple parameters, you get instance types that satisfy all of
  the
  specified parameters. If you specify multiple values for a parameter, you get
  instance
  types that satisfy any of the specified values.

  For more information, see [Preview instance types with specified attributes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements),
  [Specify attributes for instance type selection for EC2 Fleet or Spot Fleet](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html),
  and [Spot placement
  score](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html)
  in the *Amazon EC2 User Guide*, and [Creating mixed instance groups using attribute-based instance type
  selection](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html)
  in the
  *Amazon EC2 Auto Scaling User Guide*.
  """
  @spec get_instance_types_from_instance_requirements(
          map(),
          get_instance_types_from_instance_requirements_request(),
          list()
        ) ::
          {:ok, get_instance_types_from_instance_requirements_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_instance_types_from_instance_requirements(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetInstanceTypesFromInstanceRequirements", input, options)
  end

  @doc """
  A binary representation of the UEFI variable store.

  Only non-volatile variables are
  stored. This is a base64 encoded and zlib compressed binary value that must be
  properly
  encoded.

  When you use
  [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) to create
  an AMI, you can create an exact copy of your variable store by passing the UEFI
  data in
  the `UefiData` parameter. You can modify the UEFI data by using the
  [python-uefivars tool](https://github.com/awslabs/python-uefivars) on
  GitHub. You can use the tool to convert the UEFI data into a human-readable
  format
  (JSON), which you can inspect and modify, and then convert back into the binary
  format
  to use with register-image.

  For more information, see [UEFI Secure Boot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec get_instance_uefi_data(map(), get_instance_uefi_data_request(), list()) ::
          {:ok, get_instance_uefi_data_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_instance_uefi_data(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetInstanceUefiData", input, options)
  end

  @doc """
  Retrieve historical information about a CIDR within an IPAM scope.

  For more information, see [View the history of IP addresses](https://docs.aws.amazon.com/vpc/latest/ipam/view-history-cidr-ipam.html)
  in the *Amazon VPC IPAM User Guide*.
  """
  @spec get_ipam_address_history(map(), get_ipam_address_history_request(), list()) ::
          {:ok, get_ipam_address_history_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_ipam_address_history(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetIpamAddressHistory", input, options)
  end

  @doc """
  Gets IPAM discovered accounts.

  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. Only
  the IPAM account can get all discovered accounts in the organization.
  """
  @spec get_ipam_discovered_accounts(map(), get_ipam_discovered_accounts_request(), list()) ::
          {:ok, get_ipam_discovered_accounts_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_ipam_discovered_accounts(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetIpamDiscoveredAccounts", input, options)
  end

  @doc """
  Gets the public IP addresses that have been discovered by IPAM.
  """
  @spec get_ipam_discovered_public_addresses(
          map(),
          get_ipam_discovered_public_addresses_request(),
          list()
        ) ::
          {:ok, get_ipam_discovered_public_addresses_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_ipam_discovered_public_addresses(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetIpamDiscoveredPublicAddresses", input, options)
  end

  @doc """
  Returns the resource CIDRs that are monitored as part of a resource discovery.

  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.
  """
  @spec get_ipam_discovered_resource_cidrs(
          map(),
          get_ipam_discovered_resource_cidrs_request(),
          list()
        ) ::
          {:ok, get_ipam_discovered_resource_cidrs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_ipam_discovered_resource_cidrs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetIpamDiscoveredResourceCidrs", input, options)
  end

  @doc """
  Get a list of all the CIDR allocations in an IPAM pool.

  The Region you use should be the IPAM pool locale. The locale is the Amazon Web
  Services Region where this IPAM pool is available for allocations.

  If you use this action after
  [AllocateIpamPoolCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_AllocateIpamPoolCidr.html) or
  [ReleaseIpamPoolAllocation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReleaseIpamPoolAllocation.html),
  note that all EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html)
  model.
  """
  @spec get_ipam_pool_allocations(map(), get_ipam_pool_allocations_request(), list()) ::
          {:ok, get_ipam_pool_allocations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_ipam_pool_allocations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetIpamPoolAllocations", input, options)
  end

  @doc """
  Get the CIDRs provisioned to an IPAM pool.
  """
  @spec get_ipam_pool_cidrs(map(), get_ipam_pool_cidrs_request(), list()) ::
          {:ok, get_ipam_pool_cidrs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_ipam_pool_cidrs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetIpamPoolCidrs", input, options)
  end

  @doc """
  Returns resource CIDRs managed by IPAM in a given scope.

  If an IPAM is associated with more than one resource discovery, the resource
  CIDRs across all of the resource discoveries is returned. A resource discovery
  is an IPAM component that enables IPAM to manage and monitor resources that
  belong to the owning account.
  """
  @spec get_ipam_resource_cidrs(map(), get_ipam_resource_cidrs_request(), list()) ::
          {:ok, get_ipam_resource_cidrs_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_ipam_resource_cidrs(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetIpamResourceCidrs", input, options)
  end

  @doc """
  Retrieves the configuration data of the specified instance.

  You can use this data to
  create a launch template.

  This action calls on other describe actions to get instance information.
  Depending on
  your instance configuration, you may need to allow the following actions in your
  IAM
  policy: `DescribeSpotInstanceRequests`,
  `DescribeInstanceCreditSpecifications`, `DescribeVolumes`, and
  `DescribeInstanceAttribute`.
  Or, you can allow `describe*` depending on your instance requirements.
  """
  @spec get_launch_template_data(map(), get_launch_template_data_request(), list()) ::
          {:ok, get_launch_template_data_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_launch_template_data(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetLaunchTemplateData", input, options)
  end

  @doc """
  Gets information about the resources that are associated with the specified
  managed prefix list.
  """
  @spec get_managed_prefix_list_associations(
          map(),
          get_managed_prefix_list_associations_request(),
          list()
        ) ::
          {:ok, get_managed_prefix_list_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_managed_prefix_list_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetManagedPrefixListAssociations", input, options)
  end

  @doc """
  Gets information about the entries for a specified managed prefix list.
  """
  @spec get_managed_prefix_list_entries(map(), get_managed_prefix_list_entries_request(), list()) ::
          {:ok, get_managed_prefix_list_entries_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_managed_prefix_list_entries(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetManagedPrefixListEntries", input, options)
  end

  @doc """
  Gets the findings for the specified Network Access Scope analysis.
  """
  @spec get_network_insights_access_scope_analysis_findings(
          map(),
          get_network_insights_access_scope_analysis_findings_request(),
          list()
        ) ::
          {:ok, get_network_insights_access_scope_analysis_findings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_network_insights_access_scope_analysis_findings(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "GetNetworkInsightsAccessScopeAnalysisFindings",
      input,
      options
    )
  end

  @doc """
  Gets the content for the specified Network Access Scope.
  """
  @spec get_network_insights_access_scope_content(
          map(),
          get_network_insights_access_scope_content_request(),
          list()
        ) ::
          {:ok, get_network_insights_access_scope_content_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_network_insights_access_scope_content(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetNetworkInsightsAccessScopeContent", input, options)
  end

  @doc """
  Retrieves the encrypted administrator password for a running Windows instance.

  The Windows password is generated at boot by the `EC2Config` service or
  `EC2Launch` scripts (Windows Server 2016 and later). This usually only
  happens the first time an instance is launched. For more information, see
  [EC2Config](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingConfig_WinAMI.html) and
  [EC2Launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2launch.html)
  in the
  *Amazon EC2 User Guide*.

  For the `EC2Config` service, the password is not generated for rebundled
  AMIs unless `Ec2SetPassword` is enabled before bundling.

  The password is encrypted using the key pair that you specified when you
  launched the
  instance. You must provide the corresponding key pair file.

  When you launch an instance, password generation and encryption may take a few
  minutes. If you try to retrieve the password before it's available, the output
  returns
  an empty string. We recommend that you wait up to 15 minutes after launching an
  instance
  before trying to retrieve the generated password.
  """
  @spec get_password_data(map(), get_password_data_request(), list()) ::
          {:ok, get_password_data_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_password_data(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetPasswordData", input, options)
  end

  @doc """
  Returns a quote and exchange information for exchanging one or more specified
  Convertible
  Reserved Instances for a new Convertible Reserved Instance.

  If the exchange cannot be
  performed, the reason is returned in the response. Use
  `AcceptReservedInstancesExchangeQuote` to perform the exchange.
  """
  @spec get_reserved_instances_exchange_quote(
          map(),
          get_reserved_instances_exchange_quote_request(),
          list()
        ) ::
          {:ok, get_reserved_instances_exchange_quote_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_reserved_instances_exchange_quote(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetReservedInstancesExchangeQuote", input, options)
  end

  @doc """
  Gets information about the associations for the specified route server.

  A route server association is the connection established between a route server
  and a VPC.

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec get_route_server_associations(map(), get_route_server_associations_request(), list()) ::
          {:ok, get_route_server_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_route_server_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetRouteServerAssociations", input, options)
  end

  @doc """
  Gets information about the route propagations for the specified route server.

  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.

  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](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html).
  """
  @spec get_route_server_propagations(map(), get_route_server_propagations_request(), list()) ::
          {:ok, get_route_server_propagations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_route_server_propagations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetRouteServerPropagations", input, options)
  end

  @doc """
  Gets the routing database for the specified route server.

  The [Routing Information Base (RIB)](https://en.wikipedia.org/wiki/Routing_table) 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.

  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](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html).
  """
  @spec get_route_server_routing_database(
          map(),
          get_route_server_routing_database_request(),
          list()
        ) ::
          {:ok, get_route_server_routing_database_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_route_server_routing_database(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetRouteServerRoutingDatabase", input, options)
  end

  @doc """
  Gets security groups that can be associated by the Amazon Web Services account
  making the request with network interfaces in the specified VPC.
  """
  @spec get_security_groups_for_vpc(map(), get_security_groups_for_vpc_request(), list()) ::
          {:ok, get_security_groups_for_vpc_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_security_groups_for_vpc(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetSecurityGroupsForVpc", input, options)
  end

  @doc """
  Retrieves the access status of your account to the EC2 serial console of all
  instances.

  By
  default, access to the EC2 serial console is disabled for your account. For more
  information, see [Manage account access to the EC2 serial console](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access)
  in the *Amazon EC2
  User Guide*.
  """
  @spec get_serial_console_access_status(
          map(),
          get_serial_console_access_status_request(),
          list()
        ) ::
          {:ok, get_serial_console_access_status_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_serial_console_access_status(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetSerialConsoleAccessStatus", input, options)
  end

  @doc """
  Gets the current state of *block public access for snapshots* setting
  for the account and Region.

  For more information, see [
  Block public access for
  snapshots](https://docs.aws.amazon.com/ebs/latest/userguide/block-public-access-snapshots.html)
  in the *Amazon EBS User Guide*.
  """
  @spec get_snapshot_block_public_access_state(
          map(),
          get_snapshot_block_public_access_state_request(),
          list()
        ) ::
          {:ok, get_snapshot_block_public_access_state_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_snapshot_block_public_access_state(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetSnapshotBlockPublicAccessState", input, options)
  end

  @doc """
  Calculates the Spot placement score for a Region or Availability Zone based on
  the
  specified target capacity and compute requirements.

  You can specify your compute requirements either by using
  `InstanceRequirementsWithMetadata` and letting Amazon EC2 choose the optimal
  instance types to fulfill your Spot request, or you can specify the instance
  types by using
  `InstanceTypes`.

  For more information, see [Spot placement score](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html)
  in
  the *Amazon EC2 User Guide*.
  """
  @spec get_spot_placement_scores(map(), get_spot_placement_scores_request(), list()) ::
          {:ok, get_spot_placement_scores_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_spot_placement_scores(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetSpotPlacementScores", input, options)
  end

  @doc """
  Gets information about the subnet CIDR reservations.
  """
  @spec get_subnet_cidr_reservations(map(), get_subnet_cidr_reservations_request(), list()) ::
          {:ok, get_subnet_cidr_reservations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_subnet_cidr_reservations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetSubnetCidrReservations", input, options)
  end

  @doc """
  Lists the route tables to which the specified resource attachment propagates
  routes.
  """
  @spec get_transit_gateway_attachment_propagations(
          map(),
          get_transit_gateway_attachment_propagations_request(),
          list()
        ) ::
          {:ok, get_transit_gateway_attachment_propagations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_transit_gateway_attachment_propagations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetTransitGatewayAttachmentPropagations", input, options)
  end

  @doc """
  Gets information about the associations for the transit gateway multicast
  domain.
  """
  @spec get_transit_gateway_multicast_domain_associations(
          map(),
          get_transit_gateway_multicast_domain_associations_request(),
          list()
        ) ::
          {:ok, get_transit_gateway_multicast_domain_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_transit_gateway_multicast_domain_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "GetTransitGatewayMulticastDomainAssociations",
      input,
      options
    )
  end

  @doc """
  Gets a list of the transit gateway policy table associations.
  """
  @spec get_transit_gateway_policy_table_associations(
          map(),
          get_transit_gateway_policy_table_associations_request(),
          list()
        ) ::
          {:ok, get_transit_gateway_policy_table_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_transit_gateway_policy_table_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetTransitGatewayPolicyTableAssociations", input, options)
  end

  @doc """
  Returns a list of transit gateway policy table entries.
  """
  @spec get_transit_gateway_policy_table_entries(
          map(),
          get_transit_gateway_policy_table_entries_request(),
          list()
        ) ::
          {:ok, get_transit_gateway_policy_table_entries_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_transit_gateway_policy_table_entries(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetTransitGatewayPolicyTableEntries", input, options)
  end

  @doc """
  Gets information about the prefix list references in a specified transit gateway
  route table.
  """
  @spec get_transit_gateway_prefix_list_references(
          map(),
          get_transit_gateway_prefix_list_references_request(),
          list()
        ) ::
          {:ok, get_transit_gateway_prefix_list_references_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_transit_gateway_prefix_list_references(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetTransitGatewayPrefixListReferences", input, options)
  end

  @doc """
  Gets information about the associations for the specified transit gateway route
  table.
  """
  @spec get_transit_gateway_route_table_associations(
          map(),
          get_transit_gateway_route_table_associations_request(),
          list()
        ) ::
          {:ok, get_transit_gateway_route_table_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_transit_gateway_route_table_associations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetTransitGatewayRouteTableAssociations", input, options)
  end

  @doc """
  Gets information about the route table propagations for the specified transit
  gateway route table.
  """
  @spec get_transit_gateway_route_table_propagations(
          map(),
          get_transit_gateway_route_table_propagations_request(),
          list()
        ) ::
          {:ok, get_transit_gateway_route_table_propagations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_transit_gateway_route_table_propagations(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetTransitGatewayRouteTablePropagations", input, options)
  end

  @doc """
  Get the Verified Access policy associated with the endpoint.
  """
  @spec get_verified_access_endpoint_policy(
          map(),
          get_verified_access_endpoint_policy_request(),
          list()
        ) ::
          {:ok, get_verified_access_endpoint_policy_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_verified_access_endpoint_policy(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetVerifiedAccessEndpointPolicy", input, options)
  end

  @doc """
  Gets the targets for the specified network CIDR endpoint for Verified Access.
  """
  @spec get_verified_access_endpoint_targets(
          map(),
          get_verified_access_endpoint_targets_request(),
          list()
        ) ::
          {:ok, get_verified_access_endpoint_targets_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_verified_access_endpoint_targets(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetVerifiedAccessEndpointTargets", input, options)
  end

  @doc """
  Shows the contents of the Verified Access policy associated with the group.
  """
  @spec get_verified_access_group_policy(
          map(),
          get_verified_access_group_policy_request(),
          list()
        ) ::
          {:ok, get_verified_access_group_policy_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_verified_access_group_policy(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetVerifiedAccessGroupPolicy", input, options)
  end

  @doc """
  Download an Amazon Web Services-provided sample configuration file to be used
  with the customer
  gateway device specified for your Site-to-Site VPN connection.
  """
  @spec get_vpn_connection_device_sample_configuration(
          map(),
          get_vpn_connection_device_sample_configuration_request(),
          list()
        ) ::
          {:ok, get_vpn_connection_device_sample_configuration_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_vpn_connection_device_sample_configuration(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "GetVpnConnectionDeviceSampleConfiguration",
      input,
      options
    )
  end

  @doc """
  Obtain a list of customer gateway devices for which sample configuration
  files can be provided.

  The request has no additional parameters. You can also see the
  list of device types with sample configuration files available under [Your customer gateway
  device](https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html) in the
  *Amazon Web Services Site-to-Site VPN User Guide*.
  """
  @spec get_vpn_connection_device_types(map(), get_vpn_connection_device_types_request(), list()) ::
          {:ok, get_vpn_connection_device_types_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_vpn_connection_device_types(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetVpnConnectionDeviceTypes", input, options)
  end

  @doc """
  Get details of available tunnel endpoint maintenance.
  """
  @spec get_vpn_tunnel_replacement_status(
          map(),
          get_vpn_tunnel_replacement_status_request(),
          list()
        ) ::
          {:ok, get_vpn_tunnel_replacement_status_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def get_vpn_tunnel_replacement_status(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "GetVpnTunnelReplacementStatus", input, options)
  end

  @doc """
  Uploads a client certificate revocation list to the specified Client VPN
  endpoint.

  Uploading a client certificate revocation list overwrites the existing client
  certificate revocation list.

  Uploading a client certificate revocation list resets existing client
  connections.
  """
  @spec import_client_vpn_client_certificate_revocation_list(
          map(),
          import_client_vpn_client_certificate_revocation_list_request(),
          list()
        ) ::
          {:ok, import_client_vpn_client_certificate_revocation_list_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def import_client_vpn_client_certificate_revocation_list(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "ImportClientVpnClientCertificateRevocationList",
      input,
      options
    )
  end

  @doc """

  To import your virtual machines (VMs) with a console-based experience, you can
  use the
  *Import virtual machine images to Amazon Web Services* template in the
  [Migration Hub Orchestrator console](https://console.aws.amazon.com/migrationhub/orchestrator).

  For more
  information, see the [
  *Migration Hub Orchestrator User Guide*
  ](https://docs.aws.amazon.com/migrationhub-orchestrator/latest/userguide/import-vm-images.html).

  Import single or multi-volume disk images or EBS snapshots into an Amazon
  Machine Image (AMI).

  Amazon Web Services VM Import/Export strongly recommends specifying a value for
  either the
  `--license-type` or `--usage-operation` parameter when you create a new
  VM Import task. This ensures your operating system is licensed appropriately and
  your billing is
  optimized.

  For more information, see [Importing a VM as an image using VM
  Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html)
  in the *VM Import/Export User Guide*.
  """
  @spec import_image(map(), import_image_request(), list()) ::
          {:ok, import_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def import_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ImportImage", input, options)
  end

  @doc """

  We recommend that you use the [
  `ImportImage`
  ](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportImage.html)
  API instead.

  For more information, see [Importing a VM as an image using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html)
  in the *VM Import/Export User Guide*.

  Creates an import instance task using metadata from the specified disk image.

  This API action supports only single-volume VMs. To import multi-volume VMs, use
  `ImportImage`
  instead.

  For information about the import manifest referenced by this API action, see [VM Import
  Manifest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html).

  This API action is not supported by the Command Line Interface (CLI).
  """
  @spec import_instance(map(), import_instance_request(), list()) ::
          {:ok, import_instance_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def import_instance(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ImportInstance", input, options)
  end

  @doc """
  Imports the public key from an RSA or ED25519 key pair that you created using a
  third-party tool.

  You give Amazon Web Services only the public key. The private key is never
  transferred between you and Amazon Web Services.

  For more information about the requirements for importing a key pair, see
  [Create a key pair and import the public key to Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-key-pairs.html#how-to-generate-your-own-key-and-import-it-to-aws)
  in the *Amazon EC2 User Guide*.
  """
  @spec import_key_pair(map(), import_key_pair_request(), list()) ::
          {:ok, import_key_pair_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def import_key_pair(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ImportKeyPair", input, options)
  end

  @doc """
  Imports a disk into an EBS snapshot.

  For more information, see [Importing a disk as a snapshot using VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-import-snapshot.html)
  in the
  *VM Import/Export User Guide*.
  """
  @spec import_snapshot(map(), import_snapshot_request(), list()) ::
          {:ok, import_snapshot_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def import_snapshot(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ImportSnapshot", input, options)
  end

  @doc """

  This API action supports only single-volume VMs.

  To import multi-volume VMs, use
  `ImportImage` instead. To import a disk to a snapshot, use
  `ImportSnapshot` instead.

  Creates an import volume task using metadata from the specified disk image.

  For information about the import manifest referenced by this API action, see [VM Import
  Manifest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html).

  This API action is not supported by the Command Line Interface (CLI).
  """
  @spec import_volume(map(), import_volume_request(), list()) ::
          {:ok, import_volume_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def import_volume(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ImportVolume", input, options)
  end

  @doc """
  Lists one or more AMIs that are currently in the Recycle Bin.

  For more information, see
  [Recycle Bin](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html) in
  the *Amazon EC2 User Guide*.
  """
  @spec list_images_in_recycle_bin(map(), list_images_in_recycle_bin_request(), list()) ::
          {:ok, list_images_in_recycle_bin_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def list_images_in_recycle_bin(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ListImagesInRecycleBin", input, options)
  end

  @doc """
  Lists one or more snapshots that are currently in the Recycle Bin.
  """
  @spec list_snapshots_in_recycle_bin(map(), list_snapshots_in_recycle_bin_request(), list()) ::
          {:ok, list_snapshots_in_recycle_bin_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def list_snapshots_in_recycle_bin(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ListSnapshotsInRecycleBin", input, options)
  end

  @doc """
  Locks an Amazon EBS snapshot in either *governance* or *compliance*
  mode to protect it against accidental or malicious deletions for a specific
  duration.

  A locked snapshot
  can't be deleted.

  You can also use this action to modify the lock settings for a snapshot that is
  already locked. The
  allowed modifications depend on the lock mode and lock state:

    *
  If the snapshot is locked in governance mode, you can modify the lock mode and
  the lock duration
  or lock expiration date.

    *
  If the snapshot is locked in compliance mode and it is in the cooling-off
  period, you can modify
  the lock mode and the lock duration or lock expiration date.

    *
  If the snapshot is locked in compliance mode and the cooling-off period has
  lapsed, you can
  only increase the lock duration or extend the lock expiration date.
  """
  @spec lock_snapshot(map(), lock_snapshot_request(), list()) ::
          {:ok, lock_snapshot_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def lock_snapshot(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "LockSnapshot", input, options)
  end

  @doc """
  Modifies an attribute of the specified Elastic IP address.

  For requirements, see [Using reverse DNS for email applications](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS).
  """
  @spec modify_address_attribute(map(), modify_address_attribute_request(), list()) ::
          {:ok, modify_address_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_address_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyAddressAttribute", input, options)
  end

  @doc """
  Changes the opt-in status of the specified zone group for your account.
  """
  @spec modify_availability_zone_group(map(), modify_availability_zone_group_request(), list()) ::
          {:ok, modify_availability_zone_group_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_availability_zone_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyAvailabilityZoneGroup", input, options)
  end

  @doc """
  Modifies a Capacity Reservation's capacity, instance eligibility, and the
  conditions
  under which it is to be released.

  You can't modify a Capacity Reservation's instance
  type, EBS optimization, platform, instance store settings, Availability Zone, or
  tenancy. If you need to modify any of these attributes, we recommend that you
  cancel the
  Capacity Reservation, and then create a new one with the required attributes.
  For more
  information, see [ Modify an active Capacity
  Reservation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservations-modify.html).

  The allowed modifications depend on the state of the Capacity Reservation:

    *

  `assessing` or `scheduled` state - You can modify the
  tags only.

    *

  `pending` state - You can't modify the Capacity Reservation in any
  way.

    *

  `active` state but still within the commitment duration - You can't
  decrease the instance count or set an end date that is within the commitment
  duration. All other modifications are allowed.

    *

  `active` state with no commitment duration or elapsed commitment
  duration - All modifications are allowed.

    *

  `expired`, `cancelled`, `unsupported`, or
  `failed` state - You can't modify the Capacity Reservation in any
  way.
  """
  @spec modify_capacity_reservation(map(), modify_capacity_reservation_request(), list()) ::
          {:ok, modify_capacity_reservation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_capacity_reservation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyCapacityReservation", input, options)
  end

  @doc """
  Modifies a Capacity Reservation Fleet.

  When you modify the total target capacity of a Capacity Reservation Fleet, the
  Fleet
  automatically creates new Capacity Reservations, or modifies or cancels existing
  Capacity Reservations in the Fleet to meet the new total target capacity. When
  you
  modify the end date for the Fleet, the end dates for all of the individual
  Capacity
  Reservations in the Fleet are updated accordingly.
  """
  @spec modify_capacity_reservation_fleet(
          map(),
          modify_capacity_reservation_fleet_request(),
          list()
        ) ::
          {:ok, modify_capacity_reservation_fleet_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_capacity_reservation_fleet(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyCapacityReservationFleet", input, options)
  end

  @doc """
  Modifies the specified Client VPN endpoint.

  Modifying the DNS server resets existing client connections.
  """
  @spec modify_client_vpn_endpoint(map(), modify_client_vpn_endpoint_request(), list()) ::
          {:ok, modify_client_vpn_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_client_vpn_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyClientVpnEndpoint", input, options)
  end

  @doc """
  Modifies the default credit option for CPU usage of burstable performance
  instances.

  The default credit option is set at the account level per Amazon Web Services
  Region, and
  is specified per instance family. All new burstable performance instances in the
  account
  launch using the default credit option.

  `ModifyDefaultCreditSpecification` is an asynchronous operation, which
  works at an Amazon Web Services Region level and modifies the credit option for
  each
  Availability Zone. All zones in a Region are updated within five minutes. But if
  instances are launched during this operation, they might not get the new credit
  option
  until the zone is updated. To verify whether the update has occurred, you can
  call
  `GetDefaultCreditSpecification` and check
  `DefaultCreditSpecification` for updates.

  For more information, see [Burstable performance
  instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec modify_default_credit_specification(
          map(),
          modify_default_credit_specification_request(),
          list()
        ) ::
          {:ok, modify_default_credit_specification_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_default_credit_specification(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyDefaultCreditSpecification", input, options)
  end

  @doc """
  Changes the default KMS key for EBS encryption by default for your account in
  this Region.

  Amazon Web Services creates a unique Amazon Web Services managed KMS key in each
  Region for use with encryption by default. If
  you change the default KMS key to a symmetric customer managed KMS key, it is
  used instead of the Amazon Web Services
  managed KMS key. Amazon EBS does not support asymmetric KMS keys.

  If you delete or disable the customer managed KMS key that you specified for use
  with
  encryption by default, your instances will fail to launch.

  For more information, see [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)
  in the *Amazon EBS User Guide*.
  """
  @spec modify_ebs_default_kms_key_id(map(), modify_ebs_default_kms_key_id_request(), list()) ::
          {:ok, modify_ebs_default_kms_key_id_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_ebs_default_kms_key_id(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyEbsDefaultKmsKeyId", input, options)
  end

  @doc """
  Modifies the specified EC2 Fleet.

  You can only modify an EC2 Fleet request of type `maintain`.

  While the EC2 Fleet is being modified, it is in the `modifying` state.

  To scale up your EC2 Fleet, increase its target capacity. The EC2 Fleet launches
  the additional
  Spot Instances according to the allocation strategy for the EC2 Fleet request.
  If the allocation
  strategy is `lowest-price`, the EC2 Fleet launches instances using the Spot
  Instance
  pool with the lowest price. If the allocation strategy is `diversified`, the
  EC2 Fleet distributes the instances across the Spot Instance pools. If the
  allocation strategy
  is `capacity-optimized`, EC2 Fleet launches instances from Spot Instance pools
  with optimal
  capacity for the number of instances that are launching.

  To scale down your EC2 Fleet, decrease its target capacity. First, the EC2 Fleet
  cancels any open
  requests that exceed the new target capacity. You can request that the EC2 Fleet
  terminate Spot
  Instances until the size of the fleet no longer exceeds the new target capacity.
  If the
  allocation strategy is `lowest-price`, the EC2 Fleet terminates the instances
  with
  the highest price per unit. If the allocation strategy is `capacity-optimized`,
  the EC2 Fleet terminates the instances in the Spot Instance pools that have the
  least available
  Spot Instance capacity. If the allocation strategy is `diversified`, the EC2
  Fleet terminates
  instances across the Spot Instance pools. Alternatively, you can request that
  the EC2 Fleet keep
  the fleet at its current size, but not replace any Spot Instances that are
  interrupted or
  that you terminate manually.

  If you are finished with your EC2 Fleet for now, but will use it again later,
  you can set the
  target capacity to 0.
  """
  @spec modify_fleet(map(), modify_fleet_request(), list()) ::
          {:ok, modify_fleet_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_fleet(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyFleet", input, options)
  end

  @doc """
  Modifies the specified attribute of the specified Amazon FPGA Image (AFI).
  """
  @spec modify_fpga_image_attribute(map(), modify_fpga_image_attribute_request(), list()) ::
          {:ok, modify_fpga_image_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_fpga_image_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyFpgaImageAttribute", input, options)
  end

  @doc """
  Modify the auto-placement setting of a Dedicated Host.

  When auto-placement is enabled,
  any instances that you launch with a tenancy of `host` but without a specific
  host ID are placed onto any available Dedicated Host in your account that has
  auto-placement enabled. When auto-placement is disabled, you need to provide a
  host ID
  to have the instance launch onto a specific host. If no host ID is provided, the
  instance is launched onto a suitable host with auto-placement enabled.

  You can also use this API action to modify a Dedicated Host to support either
  multiple
  instance types in an instance family, or to support a specific instance type
  only.
  """
  @spec modify_hosts(map(), modify_hosts_request(), list()) ::
          {:ok, modify_hosts_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_hosts(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyHosts", input, options)
  end

  @doc """
  Modifies the ID format for the specified resource on a per-Region basis.

  You can
  specify that resources should receive longer IDs (17-character IDs) when they
  are
  created.

  This request can only be used to modify longer ID settings for resource types
  that
  are within the opt-in period. Resources currently in their opt-in period
  include:
  `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`.

  This setting applies to the IAM user who makes the request; it does not apply to
  the
  entire Amazon Web Services account. By default, an IAM user defaults to the same
  settings as the root user. If
  you're using this action as the root user, then these settings apply to the
  entire account,
  unless an IAM user explicitly overrides these settings for themselves. For more
  information,
  see [Resource IDs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html)
  in the *Amazon Elastic Compute Cloud User Guide*.

  Resources created with longer IDs are visible to all IAM roles and users,
  regardless
  of these settings and provided that they have permission to use the relevant
  `Describe` command for the resource type.
  """
  @spec modify_id_format(map(), modify_id_format_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_id_format(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyIdFormat", input, options)
  end

  @doc """
  Modifies the ID format of a resource for a specified IAM user, IAM role, or the
  root
  user for an account; or all IAM users, IAM roles, and the root user for an
  account.

  You can
  specify that resources should receive longer IDs (17-character IDs) when they
  are created.

  This request can only be used to modify longer ID settings for resource types
  that are
  within the opt-in period. Resources currently in their opt-in period include:
  `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`.

  For more information, see [Resource IDs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html) in
  the
  *Amazon Elastic Compute Cloud User Guide*.

  This setting applies to the principal specified in the request; it does not
  apply to the
  principal that makes the request.

  Resources created with longer IDs are visible to all IAM roles and users,
  regardless of these
  settings and provided that they have permission to use the relevant `Describe`
  command for the resource type.
  """
  @spec modify_identity_id_format(map(), modify_identity_id_format_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_identity_id_format(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyIdentityIdFormat", input, options)
  end

  @doc """
  Modifies the specified attribute of the specified AMI.

  You can specify only one attribute
  at a time.

  To specify the attribute, you can use the `Attribute` parameter, or one of the
  following parameters: `Description`, `ImdsSupport`, or
  `LaunchPermission`.

  Images with an Amazon Web Services Marketplace product code cannot be made
  public.

  To enable the SriovNetSupport enhanced networking attribute of an image, enable
  SriovNetSupport on an instance and create an AMI from the instance.
  """
  @spec modify_image_attribute(map(), modify_image_attribute_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_image_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyImageAttribute", input, options)
  end

  @doc """
  Modifies the specified attribute of the specified instance.

  You can specify only one
  attribute at a time.

  **Note: **Using this action to change the security groups
  associated with an elastic network interface (ENI) attached to an instance can
  result in an error if the instance has more than one ENI. To change the security
  groups
  associated with an ENI attached to an instance that has multiple ENIs, we
  recommend that
  you use the `ModifyNetworkInterfaceAttribute` action.

  To modify some attributes, the instance must be stopped. For more information,
  see
  [Modify a stopped instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingAttributesWhileInstanceStopped.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec modify_instance_attribute(map(), modify_instance_attribute_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceAttribute", input, options)
  end

  @doc """
  Modifies the Capacity Reservation settings for a stopped instance.

  Use this action to
  configure an instance to target a specific Capacity Reservation, run in any
  `open` Capacity Reservation with matching attributes, run in On-Demand
  Instance capacity, or only run in a Capacity Reservation.
  """
  @spec modify_instance_capacity_reservation_attributes(
          map(),
          modify_instance_capacity_reservation_attributes_request(),
          list()
        ) ::
          {:ok, modify_instance_capacity_reservation_attributes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_capacity_reservation_attributes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "ModifyInstanceCapacityReservationAttributes",
      input,
      options
    )
  end

  @doc """
  Modifies the specified EC2 Instance Connect Endpoint.

  For more information, see [Modify an EC2 Instance Connect
  Endpoint](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/modify-ec2-instance-connect-endpoint.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec modify_instance_connect_endpoint(
          map(),
          modify_instance_connect_endpoint_request(),
          list()
        ) ::
          {:ok, modify_instance_connect_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_connect_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceConnectEndpoint", input, options)
  end

  @doc """
  By default, all vCPUs for the instance type are active when you launch an
  instance.

  When you
  configure the number of active vCPUs for the instance, it can help you save on
  licensing costs and
  optimize performance. The base cost of the instance remains unchanged.

  The number of active vCPUs equals the number of threads per CPU core multiplied
  by the number
  of cores. The instance must be in a `Stopped` state before you make changes.

  Some instance type options do not support this capability. For more information,
  see
  [Supported CPU options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cpu-options-supported-instances-values.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec modify_instance_cpu_options(map(), modify_instance_cpu_options_request(), list()) ::
          {:ok, modify_instance_cpu_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_cpu_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceCpuOptions", input, options)
  end

  @doc """
  Modifies the credit option for CPU usage on a running or stopped burstable
  performance
  instance.

  The credit options are `standard` and
  `unlimited`.

  For more information, see [Burstable performance
  instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec modify_instance_credit_specification(
          map(),
          modify_instance_credit_specification_request(),
          list()
        ) ::
          {:ok, modify_instance_credit_specification_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_credit_specification(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceCreditSpecification", input, options)
  end

  @doc """
  Modifies the start time for a scheduled Amazon EC2 instance event.
  """
  @spec modify_instance_event_start_time(
          map(),
          modify_instance_event_start_time_request(),
          list()
        ) ::
          {:ok, modify_instance_event_start_time_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_event_start_time(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceEventStartTime", input, options)
  end

  @doc """
  Modifies the specified event window.

  You can define either a set of time ranges or a cron expression when modifying
  the event
  window, but not both.

  To modify the targets associated with the event window, use the
  `AssociateInstanceEventWindow` and `DisassociateInstanceEventWindow` API.

  If Amazon Web Services has already scheduled an event, modifying an event window
  won't change the time
  of the scheduled event.

  For more information, see [Define event windows for scheduled events](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec modify_instance_event_window(map(), modify_instance_event_window_request(), list()) ::
          {:ok, modify_instance_event_window_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_event_window(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceEventWindow", input, options)
  end

  @doc """
  Modifies the recovery behavior of your instance to disable simplified automatic
  recovery or set the recovery behavior to default.

  The default configuration will not
  enable simplified automatic recovery for an unsupported instance type. For more
  information, see [Simplified automatic recovery](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery).

  Modifies the reboot migration behavior during a user-initiated reboot of an
  instance
  that has a pending `system-reboot` event. For more information, see [Enable or disable reboot
  migration](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/schedevents_actions_reboot.html#reboot-migration).
  """
  @spec modify_instance_maintenance_options(
          map(),
          modify_instance_maintenance_options_request(),
          list()
        ) ::
          {:ok, modify_instance_maintenance_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_maintenance_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceMaintenanceOptions", input, options)
  end

  @doc """
  Modifies the default instance metadata service (IMDS) settings at the account
  level in
  the specified Amazon Web Services Region.

  To remove a parameter's account-level default setting, specify
  `no-preference`. If an account-level setting is cleared with
  `no-preference`, then the instance launch considers the other
  instance metadata settings. For more information, see [Order of precedence for instance metadata
  options](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html#instance-metadata-options-order-of-precedence)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec modify_instance_metadata_defaults(
          map(),
          modify_instance_metadata_defaults_request(),
          list()
        ) ::
          {:ok, modify_instance_metadata_defaults_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_metadata_defaults(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceMetadataDefaults", input, options)
  end

  @doc """
  Modify the instance metadata parameters on a running or stopped instance.

  When you
  modify the parameters on a stopped instance, they are applied when the instance
  is
  started. When you modify the parameters on a running instance, the API responds
  with a
  state of “pending”. After the parameter modifications are successfully applied
  to the
  instance, the state of the modifications changes from “pending” to “applied” in
  subsequent describe-instances API calls. For more information, see [Instance metadata and user
  data](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec modify_instance_metadata_options(
          map(),
          modify_instance_metadata_options_request(),
          list()
        ) ::
          {:ok, modify_instance_metadata_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_metadata_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceMetadataOptions", input, options)
  end

  @doc """
  Change the configuration of the network performance options for an existing
  instance.
  """
  @spec modify_instance_network_performance_options(
          map(),
          modify_instance_network_performance_request(),
          list()
        ) ::
          {:ok, modify_instance_network_performance_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_network_performance_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstanceNetworkPerformanceOptions", input, options)
  end

  @doc """
  Modifies the placement attributes for a specified instance.

  You can do the
  following:

    *
  Modify the affinity between an instance and a [Dedicated Host](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html).
  When affinity is set to `host` and the instance is
  not associated with a specific Dedicated Host, the next time the instance is
  started, it is automatically associated with the host on which it lands. If the
  instance is restarted or rebooted, this relationship persists.

    *
  Change the Dedicated Host with which an instance is associated.

    *
  Change the instance tenancy of an instance.

    *
  Move an instance to or from a [placement group](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html).

  At least one attribute for affinity, host ID, tenancy, or placement group name
  must be
  specified in the request. Affinity and tenancy can be modified in the same
  request.

  To modify the host ID, tenancy, placement group, or partition for an instance,
  the
  instance must be in the `stopped` state.
  """
  @spec modify_instance_placement(map(), modify_instance_placement_request(), list()) ::
          {:ok, modify_instance_placement_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_instance_placement(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyInstancePlacement", input, options)
  end

  @doc """
  Modify the configurations of an IPAM.
  """
  @spec modify_ipam(map(), modify_ipam_request(), list()) ::
          {:ok, modify_ipam_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_ipam(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyIpam", input, options)
  end

  @doc """
  Modify the configurations of an IPAM pool.

  For more information, see [Modify a pool](https://docs.aws.amazon.com/vpc/latest/ipam/mod-pool-ipam.html) in the
  *Amazon VPC IPAM User Guide*.
  """
  @spec modify_ipam_pool(map(), modify_ipam_pool_request(), list()) ::
          {:ok, modify_ipam_pool_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_ipam_pool(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyIpamPool", input, options)
  end

  @doc """
  Modify a resource CIDR.

  You can use this action to transfer resource CIDRs between scopes and ignore
  resource CIDRs that you do not want to manage. If set to false, the resource
  will not be tracked for overlap, it cannot be auto-imported into a pool, and it
  will be removed from any pool it has an allocation in.

  For more information, see [Move resource CIDRs between scopes](https://docs.aws.amazon.com/vpc/latest/ipam/move-resource-ipam.html) and
  [Change the monitoring state of resource CIDRs](https://docs.aws.amazon.com/vpc/latest/ipam/change-monitoring-state-ipam.html)
  in the *Amazon VPC IPAM User Guide*.
  """
  @spec modify_ipam_resource_cidr(map(), modify_ipam_resource_cidr_request(), list()) ::
          {:ok, modify_ipam_resource_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_ipam_resource_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyIpamResourceCidr", input, options)
  end

  @doc """
  Modifies a resource discovery.

  A resource discovery is an IPAM component that enables IPAM to manage and
  monitor resources that belong to the owning account.
  """
  @spec modify_ipam_resource_discovery(map(), modify_ipam_resource_discovery_request(), list()) ::
          {:ok, modify_ipam_resource_discovery_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_ipam_resource_discovery(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyIpamResourceDiscovery", input, options)
  end

  @doc """
  Modify an IPAM scope.
  """
  @spec modify_ipam_scope(map(), modify_ipam_scope_request(), list()) ::
          {:ok, modify_ipam_scope_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_ipam_scope(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyIpamScope", input, options)
  end

  @doc """
  Modifies a launch template.

  You can specify which version of the launch template to
  set as the default version. When launching an instance, the default version
  applies when
  a launch template version is not specified.
  """
  @spec modify_launch_template(map(), modify_launch_template_request(), list()) ::
          {:ok, modify_launch_template_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_launch_template(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyLaunchTemplate", input, options)
  end

  @doc """
  Modifies the specified local gateway route.
  """
  @spec modify_local_gateway_route(map(), modify_local_gateway_route_request(), list()) ::
          {:ok, modify_local_gateway_route_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_local_gateway_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyLocalGatewayRoute", input, options)
  end

  @doc """
  Modifies the specified managed prefix list.

  Adding or removing entries in a prefix list creates a new version of the prefix
  list.
  Changing the name of the prefix list does not affect the version.

  If you specify a current version number that does not match the true current
  version
  number, the request fails.
  """
  @spec modify_managed_prefix_list(map(), modify_managed_prefix_list_request(), list()) ::
          {:ok, modify_managed_prefix_list_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_managed_prefix_list(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyManagedPrefixList", input, options)
  end

  @doc """
  Modifies the specified network interface attribute.

  You can specify only one attribute
  at a time. You can use this action to attach and detach security groups from an
  existing
  EC2 instance.
  """
  @spec modify_network_interface_attribute(
          map(),
          modify_network_interface_attribute_request(),
          list()
        ) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_network_interface_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyNetworkInterfaceAttribute", input, options)
  end

  @doc """
  Modifies the options for instance hostnames for the specified instance.
  """
  @spec modify_private_dns_name_options(map(), modify_private_dns_name_options_request(), list()) ::
          {:ok, modify_private_dns_name_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_private_dns_name_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyPrivateDnsNameOptions", input, options)
  end

  @doc """
  Modify public hostname options for a network interface.

  For more information, see [EC2 instance hostnames, DNS names, and domains](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-naming.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec modify_public_ip_dns_name_options(
          map(),
          modify_public_ip_dns_name_options_request(),
          list()
        ) ::
          {:ok, modify_public_ip_dns_name_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_public_ip_dns_name_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyPublicIpDnsNameOptions", input, options)
  end

  @doc """
  Modifies the configuration of your Reserved Instances, such as the Availability
  Zone,
  instance count, or instance type.

  The Reserved Instances to be modified must be identical,
  except for Availability Zone, network platform, and instance type.

  For more information, see [Modify Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec modify_reserved_instances(map(), modify_reserved_instances_request(), list()) ::
          {:ok, modify_reserved_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_reserved_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyReservedInstances", input, options)
  end

  @doc """
  Modifies the configuration of an existing route server.

  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](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html).

  For more information see [Dynamic routing in your VPC with VPC Route Server](https://docs.aws.amazon.com/vpc/latest/userguide/dynamic-routing-route-server.html)
  in the *Amazon VPC User Guide*.
  """
  @spec modify_route_server(map(), modify_route_server_request(), list()) ::
          {:ok, modify_route_server_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_route_server(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyRouteServer", input, options)
  end

  @doc """
  Modifies the rules of a security group.
  """
  @spec modify_security_group_rules(map(), modify_security_group_rules_request(), list()) ::
          {:ok, modify_security_group_rules_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_security_group_rules(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifySecurityGroupRules", input, options)
  end

  @doc """
  Adds or removes permission settings for the specified snapshot.

  You may add or remove
  specified Amazon Web Services account IDs from a snapshot's list of create
  volume permissions, but you cannot
  do both in a single operation. If you need to both add and remove account IDs
  for a snapshot,
  you must use multiple operations. You can make up to 500 modifications to a
  snapshot in a single operation.

  Encrypted snapshots and snapshots with Amazon Web Services Marketplace product
  codes cannot be made
  public. Snapshots encrypted with your default KMS key cannot be shared with
  other accounts.

  For more information about modifying snapshot permissions, see [Share a snapshot](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modifying-snapshot-permissions.html)
  in the
  *Amazon EBS User Guide*.
  """
  @spec modify_snapshot_attribute(map(), modify_snapshot_attribute_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_snapshot_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifySnapshotAttribute", input, options)
  end

  @doc """
  Archives an Amazon EBS snapshot.

  When you archive a snapshot, it is converted to a full
  snapshot that includes all of the blocks of data that were written to the volume
  at the
  time the snapshot was created, and moved from the standard tier to the archive
  tier. For more information, see [Archive Amazon EBS snapshots](https://docs.aws.amazon.com/ebs/latest/userguide/snapshot-archive.html)
  in the *Amazon EBS User Guide*.
  """
  @spec modify_snapshot_tier(map(), modify_snapshot_tier_request(), list()) ::
          {:ok, modify_snapshot_tier_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_snapshot_tier(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifySnapshotTier", input, options)
  end

  @doc """
  Modifies the specified Spot Fleet request.

  You can only modify a Spot Fleet request of type `maintain`.

  While the Spot Fleet request is being modified, it is in the `modifying`
  state.

  To scale up your Spot Fleet, increase its target capacity. The Spot Fleet
  launches the
  additional Spot Instances according to the allocation strategy for the Spot
  Fleet
  request. If the allocation strategy is `lowestPrice`, the Spot Fleet launches
  instances using the Spot Instance pool with the lowest price. If the allocation
  strategy
  is `diversified`, the Spot Fleet distributes the instances across the Spot
  Instance pools. If the allocation strategy is `capacityOptimized`, Spot Fleet
  launches instances from Spot Instance pools with optimal capacity for the number
  of instances
  that are launching.

  To scale down your Spot Fleet, decrease its target capacity. First, the Spot
  Fleet
  cancels any open requests that exceed the new target capacity. You can request
  that the
  Spot Fleet terminate Spot Instances until the size of the fleet no longer
  exceeds the
  new target capacity. If the allocation strategy is `lowestPrice`, the Spot
  Fleet terminates the instances with the highest price per unit. If the
  allocation
  strategy is `capacityOptimized`, the Spot Fleet terminates the instances in
  the Spot Instance pools that have the least available Spot Instance capacity. If
  the allocation
  strategy is `diversified`, the Spot Fleet terminates instances across the
  Spot Instance pools. Alternatively, you can request that the Spot Fleet keep the
  fleet
  at its current size, but not replace any Spot Instances that are interrupted or
  that you
  terminate manually.

  If you are finished with your Spot Fleet for now, but will use it again later,
  you can
  set the target capacity to 0.
  """
  @spec modify_spot_fleet_request(map(), modify_spot_fleet_request_request(), list()) ::
          {:ok, modify_spot_fleet_request_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_spot_fleet_request(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifySpotFleetRequest", input, options)
  end

  @doc """
  Modifies a subnet attribute.

  You can only modify one attribute at a time.

  Use this action to modify subnets on Amazon Web Services Outposts.

    *
  To modify a subnet on an Outpost rack, set both
  `MapCustomerOwnedIpOnLaunch` and
  `CustomerOwnedIpv4Pool`. These two parameters act as a single
  attribute.

    *
  To modify a subnet on an Outpost server, set either
  `EnableLniAtDeviceIndex` or
  `DisableLniAtDeviceIndex`.

  For more information about Amazon Web Services Outposts, see the following:

    *

  [Outpost servers](https://docs.aws.amazon.com/outposts/latest/userguide/how-servers-work.html)

    *

  [Outpost racks](https://docs.aws.amazon.com/outposts/latest/userguide/how-racks-work.html)
  """
  @spec modify_subnet_attribute(map(), modify_subnet_attribute_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_subnet_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifySubnetAttribute", input, options)
  end

  @doc """
  Allows or restricts mirroring network services.

  By default, Amazon DNS network services are not eligible for Traffic Mirror. Use
  `AddNetworkServices` to add network services to a Traffic Mirror filter. When a
  network service is added to the Traffic Mirror filter, all traffic related to
  that network service will be mirrored.
  When you no longer want to mirror network services, use `RemoveNetworkServices`
  to remove the network services from the Traffic Mirror filter.
  """
  @spec modify_traffic_mirror_filter_network_services(
          map(),
          modify_traffic_mirror_filter_network_services_request(),
          list()
        ) ::
          {:ok, modify_traffic_mirror_filter_network_services_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_traffic_mirror_filter_network_services(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyTrafficMirrorFilterNetworkServices", input, options)
  end

  @doc """
  Modifies the specified Traffic Mirror rule.

  `DestinationCidrBlock` and `SourceCidrBlock` must both be an IPv4
  range or an IPv6 range.
  """
  @spec modify_traffic_mirror_filter_rule(
          map(),
          modify_traffic_mirror_filter_rule_request(),
          list()
        ) ::
          {:ok, modify_traffic_mirror_filter_rule_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_traffic_mirror_filter_rule(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyTrafficMirrorFilterRule", input, options)
  end

  @doc """
  Modifies a Traffic Mirror session.
  """
  @spec modify_traffic_mirror_session(map(), modify_traffic_mirror_session_request(), list()) ::
          {:ok, modify_traffic_mirror_session_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_traffic_mirror_session(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyTrafficMirrorSession", input, options)
  end

  @doc """
  Modifies the specified transit gateway.

  When you modify a transit gateway, the modified options are applied to new
  transit gateway attachments only. Your existing transit gateway attachments are
  not modified.
  """
  @spec modify_transit_gateway(map(), modify_transit_gateway_request(), list()) ::
          {:ok, modify_transit_gateway_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_transit_gateway(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyTransitGateway", input, options)
  end

  @doc """
  Modifies a reference (route) to a prefix list in a specified transit gateway
  route table.
  """
  @spec modify_transit_gateway_prefix_list_reference(
          map(),
          modify_transit_gateway_prefix_list_reference_request(),
          list()
        ) ::
          {:ok, modify_transit_gateway_prefix_list_reference_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_transit_gateway_prefix_list_reference(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyTransitGatewayPrefixListReference", input, options)
  end

  @doc """
  Modifies the specified VPC attachment.
  """
  @spec modify_transit_gateway_vpc_attachment(
          map(),
          modify_transit_gateway_vpc_attachment_request(),
          list()
        ) ::
          {:ok, modify_transit_gateway_vpc_attachment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_transit_gateway_vpc_attachment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyTransitGatewayVpcAttachment", input, options)
  end

  @doc """
  Modifies the configuration of the specified Amazon Web Services Verified Access
  endpoint.
  """
  @spec modify_verified_access_endpoint(map(), modify_verified_access_endpoint_request(), list()) ::
          {:ok, modify_verified_access_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_verified_access_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVerifiedAccessEndpoint", input, options)
  end

  @doc """
  Modifies the specified Amazon Web Services Verified Access endpoint policy.
  """
  @spec modify_verified_access_endpoint_policy(
          map(),
          modify_verified_access_endpoint_policy_request(),
          list()
        ) ::
          {:ok, modify_verified_access_endpoint_policy_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_verified_access_endpoint_policy(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVerifiedAccessEndpointPolicy", input, options)
  end

  @doc """
  Modifies the specified Amazon Web Services Verified Access group configuration.
  """
  @spec modify_verified_access_group(map(), modify_verified_access_group_request(), list()) ::
          {:ok, modify_verified_access_group_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_verified_access_group(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVerifiedAccessGroup", input, options)
  end

  @doc """
  Modifies the specified Amazon Web Services Verified Access group policy.
  """
  @spec modify_verified_access_group_policy(
          map(),
          modify_verified_access_group_policy_request(),
          list()
        ) ::
          {:ok, modify_verified_access_group_policy_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_verified_access_group_policy(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVerifiedAccessGroupPolicy", input, options)
  end

  @doc """
  Modifies the configuration of the specified Amazon Web Services Verified Access
  instance.
  """
  @spec modify_verified_access_instance(map(), modify_verified_access_instance_request(), list()) ::
          {:ok, modify_verified_access_instance_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_verified_access_instance(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVerifiedAccessInstance", input, options)
  end

  @doc """
  Modifies the logging configuration for the specified Amazon Web Services
  Verified Access instance.
  """
  @spec modify_verified_access_instance_logging_configuration(
          map(),
          modify_verified_access_instance_logging_configuration_request(),
          list()
        ) ::
          {:ok, modify_verified_access_instance_logging_configuration_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_verified_access_instance_logging_configuration(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "ModifyVerifiedAccessInstanceLoggingConfiguration",
      input,
      options
    )
  end

  @doc """
  Modifies the configuration of the specified Amazon Web Services Verified Access
  trust provider.
  """
  @spec modify_verified_access_trust_provider(
          map(),
          modify_verified_access_trust_provider_request(),
          list()
        ) ::
          {:ok, modify_verified_access_trust_provider_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_verified_access_trust_provider(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVerifiedAccessTrustProvider", input, options)
  end

  @doc """
  You can modify several parameters of an existing EBS volume, including volume
  size, volume
  type, and IOPS capacity.

  If your EBS volume is attached to a current-generation EC2 instance
  type, you might be able to apply these changes without stopping the instance or
  detaching the
  volume from it. For more information about modifying EBS volumes, see [Amazon EBS Elastic
  Volumes](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html)
  in the *Amazon EBS User Guide*.

  When you complete a resize operation on your volume, you need to extend the
  volume's
  file-system size to take advantage of the new storage capacity. For more
  information, see [Extend the file system](https://docs.aws.amazon.com/ebs/latest/userguide/recognize-expanded-volume-linux.html).

  For more information, see [Monitor the progress of volume modifications](https://docs.aws.amazon.com/ebs/latest/userguide/monitoring-volume-modifications.html)
  in the *Amazon EBS User Guide*.

  With previous-generation instance types, resizing an EBS volume might require
  detaching and
  reattaching the volume or stopping and restarting the instance.

  After modifying a volume, you must wait at least six hours and ensure that the
  volume
  is in the `in-use` or `available` state before you can modify the same
  volume. This is sometimes referred to as a cooldown period.
  """
  @spec modify_volume(map(), modify_volume_request(), list()) ::
          {:ok, modify_volume_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_volume(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVolume", input, options)
  end

  @doc """
  Modifies a volume attribute.

  By default, all I/O operations for the volume are suspended when the data on the
  volume is
  determined to be potentially inconsistent, to prevent undetectable, latent data
  corruption.
  The I/O access to the volume can be resumed by first enabling I/O access and
  then checking the
  data consistency on your volume.

  You can change the default behavior to resume I/O operations. We recommend that
  you change
  this only for boot volumes or for volumes that are stateless or disposable.
  """
  @spec modify_volume_attribute(map(), modify_volume_attribute_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_volume_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVolumeAttribute", input, options)
  end

  @doc """
  Modifies the specified attribute of the specified VPC.
  """
  @spec modify_vpc_attribute(map(), modify_vpc_attribute_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpcAttribute", input, options)
  end

  @doc """
  Modify VPC Block Public Access (BPA) exclusions.

  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.
  """
  @spec modify_vpc_block_public_access_exclusion(
          map(),
          modify_vpc_block_public_access_exclusion_request(),
          list()
        ) ::
          {:ok, modify_vpc_block_public_access_exclusion_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_block_public_access_exclusion(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpcBlockPublicAccessExclusion", input, options)
  end

  @doc """
  Modify VPC Block Public Access (BPA) options.

  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](https://docs.aws.amazon.com/vpc/latest/userguide/security-vpc-bpa.html)
  in the *Amazon VPC User Guide*.
  """
  @spec modify_vpc_block_public_access_options(
          map(),
          modify_vpc_block_public_access_options_request(),
          list()
        ) ::
          {:ok, modify_vpc_block_public_access_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_block_public_access_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpcBlockPublicAccessOptions", input, options)
  end

  @doc """
  Modifies attributes of a specified VPC endpoint.

  The attributes that you can modify
  depend on the type of VPC endpoint (interface, gateway, or Gateway Load
  Balancer). For more information,
  see the [Amazon Web Services PrivateLink Guide](https://docs.aws.amazon.com/vpc/latest/privatelink/).
  """
  @spec modify_vpc_endpoint(map(), modify_vpc_endpoint_request(), list()) ::
          {:ok, modify_vpc_endpoint_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_endpoint(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpcEndpoint", input, options)
  end

  @doc """
  Modifies a connection notification for VPC endpoint or VPC endpoint service.

  You
  can change the SNS topic for the notification, or the events for which to be
  notified.
  """
  @spec modify_vpc_endpoint_connection_notification(
          map(),
          modify_vpc_endpoint_connection_notification_request(),
          list()
        ) ::
          {:ok, modify_vpc_endpoint_connection_notification_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_endpoint_connection_notification(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpcEndpointConnectionNotification", input, options)
  end

  @doc """
  Modifies the attributes of the specified VPC endpoint service configuration.

  If you set or modify the private DNS name, you must prove that you own the
  private DNS
  domain name.
  """
  @spec modify_vpc_endpoint_service_configuration(
          map(),
          modify_vpc_endpoint_service_configuration_request(),
          list()
        ) ::
          {:ok, modify_vpc_endpoint_service_configuration_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_endpoint_service_configuration(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpcEndpointServiceConfiguration", input, options)
  end

  @doc """
  Modifies the payer responsibility for your VPC endpoint service.
  """
  @spec modify_vpc_endpoint_service_payer_responsibility(
          map(),
          modify_vpc_endpoint_service_payer_responsibility_request(),
          list()
        ) ::
          {:ok, modify_vpc_endpoint_service_payer_responsibility_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_endpoint_service_payer_responsibility(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "ModifyVpcEndpointServicePayerResponsibility",
      input,
      options
    )
  end

  @doc """
  Modifies the permissions for your VPC endpoint service.

  You can add or remove permissions
  for service consumers (Amazon Web Services accounts, users, and IAM roles) to
  connect to
  your endpoint service. Principal ARNs with path components aren't supported.

  If you grant permissions to all principals, the service is public. Any users who
  know the name of a
  public service can send a request to attach an endpoint. If the service does not
  require manual approval,
  attachments are automatically approved.
  """
  @spec modify_vpc_endpoint_service_permissions(
          map(),
          modify_vpc_endpoint_service_permissions_request(),
          list()
        ) ::
          {:ok, modify_vpc_endpoint_service_permissions_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_endpoint_service_permissions(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpcEndpointServicePermissions", input, options)
  end

  @doc """
  Modifies the VPC peering connection options on one side of a VPC peering
  connection.

  If the peered VPCs are in the same Amazon Web Services account, you can enable
  DNS
  resolution for queries from the local VPC. This ensures that queries from the
  local VPC
  resolve to private IP addresses in the peer VPC. This option is not available if
  the
  peered VPCs are in different Amazon Web Services accounts or different Regions.
  For
  peered VPCs in different Amazon Web Services accounts, each Amazon Web Services
  account
  owner must initiate a separate request to modify the peering connection options.
  For
  inter-region peering connections, you must use the Region for the requester VPC
  to
  modify the requester VPC peering options and the Region for the accepter VPC to
  modify
  the accepter VPC peering options. To verify which VPCs are the accepter and the
  requester for a VPC peering connection, use the `DescribeVpcPeeringConnections`
  command.
  """
  @spec modify_vpc_peering_connection_options(
          map(),
          modify_vpc_peering_connection_options_request(),
          list()
        ) ::
          {:ok, modify_vpc_peering_connection_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_peering_connection_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpcPeeringConnectionOptions", input, options)
  end

  @doc """
  Modifies the instance tenancy attribute of the specified VPC.

  You can change the
  instance tenancy attribute of a VPC to `default` only. You cannot change the
  instance tenancy attribute to `dedicated`.

  After you modify the tenancy of the VPC, any new instances that you launch into
  the
  VPC have a tenancy of `default`, unless you specify otherwise during launch.
  The tenancy of any existing instances in the VPC is not affected.

  For more information, see [Dedicated Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec modify_vpc_tenancy(map(), modify_vpc_tenancy_request(), list()) ::
          {:ok, modify_vpc_tenancy_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpc_tenancy(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpcTenancy", input, options)
  end

  @doc """
  Modifies the customer gateway or the target gateway of an Amazon Web Services
  Site-to-Site VPN connection.

  To
  modify the target gateway, the following migration options are available:

    *
  An existing virtual private gateway to a new virtual private gateway

    *
  An existing virtual private gateway to a transit gateway

    *
  An existing transit gateway to a new transit gateway

    *
  An existing transit gateway to a virtual private gateway

  Before you perform the migration to the new gateway, you must configure the new
  gateway. Use `CreateVpnGateway` to create a virtual private gateway, or
  `CreateTransitGateway` to create a transit gateway.

  This step is required when you migrate from a virtual private gateway with
  static
  routes to a transit gateway.

  You must delete the static routes before you migrate to the new gateway.

  Keep a copy of the static route before you delete it. You will need to add back
  these
  routes to the transit gateway after the VPN connection migration is complete.

  After you migrate to the new gateway, you might need to modify your VPC route
  table.
  Use `CreateRoute` and `DeleteRoute` to make the changes
  described in [Update VPC route tables](https://docs.aws.amazon.com/vpn/latest/s2svpn/modify-vpn-target.html#step-update-routing)
  in the *Amazon Web Services Site-to-Site VPN User Guide*.

  When the new gateway is a transit gateway, modify the transit gateway route
  table to
  allow traffic between the VPC and the Amazon Web Services Site-to-Site VPN
  connection.
  Use `CreateTransitGatewayRoute` to add the routes.

  If you deleted VPN static routes, you must add the static routes to the transit
  gateway route table.

  After you perform this operation, the VPN endpoint's IP addresses on the Amazon
  Web Services side and the tunnel options remain intact. Your Amazon Web Services
  Site-to-Site VPN connection will
  be temporarily unavailable for a brief period while we provision the new
  endpoints.
  """
  @spec modify_vpn_connection(map(), modify_vpn_connection_request(), list()) ::
          {:ok, modify_vpn_connection_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpn_connection(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpnConnection", input, options)
  end

  @doc """
  Modifies the connection options for your Site-to-Site VPN connection.

  When you modify the VPN connection options, the VPN endpoint IP addresses on the
  Amazon Web Services side do not change, and the tunnel options do not change.
  Your
  VPN connection will be temporarily unavailable for a brief period while the VPN
  connection is updated.
  """
  @spec modify_vpn_connection_options(map(), modify_vpn_connection_options_request(), list()) ::
          {:ok, modify_vpn_connection_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpn_connection_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpnConnectionOptions", input, options)
  end

  @doc """
  Modifies the VPN tunnel endpoint certificate.
  """
  @spec modify_vpn_tunnel_certificate(map(), modify_vpn_tunnel_certificate_request(), list()) ::
          {:ok, modify_vpn_tunnel_certificate_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpn_tunnel_certificate(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpnTunnelCertificate", input, options)
  end

  @doc """
  Modifies the options for a VPN tunnel in an Amazon Web Services Site-to-Site VPN
  connection.

  You can modify
  multiple options for a tunnel in a single request, but you can only modify one
  tunnel at
  a time. For more information, see [Site-to-Site VPN tunnel options for your Site-to-Site VPN
  connection](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPNTunnels.html) in
  the *Amazon Web Services Site-to-Site VPN User Guide*.
  """
  @spec modify_vpn_tunnel_options(map(), modify_vpn_tunnel_options_request(), list()) ::
          {:ok, modify_vpn_tunnel_options_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def modify_vpn_tunnel_options(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ModifyVpnTunnelOptions", input, options)
  end

  @doc """
  Enables detailed monitoring for a running instance.

  Otherwise, basic monitoring is
  enabled. For more information, see [Monitor your instances using CloudWatch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html)
  in the *Amazon EC2 User Guide*.

  To disable detailed monitoring, see
  [UnmonitorInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_UnmonitorInstances.html).
  """
  @spec monitor_instances(map(), monitor_instances_request(), list()) ::
          {:ok, monitor_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def monitor_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "MonitorInstances", input, options)
  end

  @doc """

  This action is deprecated.

  Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC
  platform. The
  Elastic IP address must be allocated to your account for more than 24 hours, and
  it must not
  be associated with an instance. After the Elastic IP address is moved, it is no
  longer
  available for use in the EC2-Classic platform. You cannot move an Elastic IP
  address that was
  originally allocated for use in the EC2-VPC platform to the EC2-Classic
  platform.
  """
  @spec move_address_to_vpc(map(), move_address_to_vpc_request(), list()) ::
          {:ok, move_address_to_vpc_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def move_address_to_vpc(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "MoveAddressToVpc", input, options)
  end

  @doc """
  Move a BYOIPv4 CIDR to IPAM from a public IPv4 pool.

  If you already have a BYOIPv4 CIDR with Amazon Web Services, you can move the
  CIDR to IPAM from a public IPv4 pool. You cannot move an IPv6 CIDR to IPAM. If
  you are bringing a new IP address to Amazon Web Services for the first time,
  complete the steps in [Tutorial: BYOIP address CIDRs to IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoip-ipam.html).
  """
  @spec move_byoip_cidr_to_ipam(map(), move_byoip_cidr_to_ipam_request(), list()) ::
          {:ok, move_byoip_cidr_to_ipam_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def move_byoip_cidr_to_ipam(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "MoveByoipCidrToIpam", input, options)
  end

  @doc """
  Move available capacity from a source Capacity Reservation to a destination
  Capacity
  Reservation.

  The source Capacity Reservation and the destination Capacity Reservation
  must be `active`, owned by your Amazon Web Services account, and share the
  following:

    *
  Instance type

    *
  Platform

    *
  Availability Zone

    *
  Tenancy

    *
  Placement group

    *
  Capacity Reservation end time - `At specific time` or
  `Manually`.
  """
  @spec move_capacity_reservation_instances(
          map(),
          move_capacity_reservation_instances_request(),
          list()
        ) ::
          {:ok, move_capacity_reservation_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def move_capacity_reservation_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "MoveCapacityReservationInstances", input, options)
  end

  @doc """
  Provisions an IPv4 or IPv6 address range for use with your Amazon Web Services
  resources through bring your own IP
  addresses (BYOIP) and creates a corresponding address pool.

  After the address range is
  provisioned, it is ready to be advertised.

  Amazon Web Services verifies that you own the address range and are authorized
  to advertise it.
  You must ensure that the address range is registered to you and that you created
  an
  RPKI ROA to authorize Amazon ASNs 16509 and 14618 to advertise the address
  range.
  For more information, see [Bring your own IP addresses (BYOIP)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html) in
  the *Amazon EC2 User Guide*.

  Provisioning an address range is an asynchronous operation, so the call returns
  immediately,
  but the address range is not ready to use until its status changes from
  `pending-provision`
  to `provisioned`. For more information, see [Onboard your address range](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/byoip-onboard.html).
  """
  @spec provision_byoip_cidr(map(), provision_byoip_cidr_request(), list()) ::
          {:ok, provision_byoip_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def provision_byoip_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ProvisionByoipCidr", input, options)
  end

  @doc """
  Provisions your Autonomous System Number (ASN) for use in your Amazon Web
  Services account.

  This action requires authorization context for Amazon to bring the ASN to an
  Amazon Web Services account. For more information, see [Tutorial: Bring your ASN to IPAM](https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoasn.html) in
  the *Amazon VPC IPAM guide*.
  """
  @spec provision_ipam_byoasn(map(), provision_ipam_byoasn_request(), list()) ::
          {:ok, provision_ipam_byoasn_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def provision_ipam_byoasn(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ProvisionIpamByoasn", input, options)
  end

  @doc """
  Provision a CIDR to an IPAM pool.

  You can use this action to provision new CIDRs to a top-level pool or to
  transfer a CIDR from a top-level pool to a pool within it.

  For more information, see [Provision CIDRs to pools](https://docs.aws.amazon.com/vpc/latest/ipam/prov-cidr-ipam.html) in the
  *Amazon VPC IPAM User Guide*.
  """
  @spec provision_ipam_pool_cidr(map(), provision_ipam_pool_cidr_request(), list()) ::
          {:ok, provision_ipam_pool_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def provision_ipam_pool_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ProvisionIpamPoolCidr", input, options)
  end

  @doc """
  Provision a CIDR to a public IPv4 pool.

  For more information about IPAM, see [What is IPAM?](https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html) in the
  *Amazon VPC IPAM User Guide*.
  """
  @spec provision_public_ipv4_pool_cidr(map(), provision_public_ipv4_pool_cidr_request(), list()) ::
          {:ok, provision_public_ipv4_pool_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def provision_public_ipv4_pool_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ProvisionPublicIpv4PoolCidr", input, options)
  end

  @doc """
  Purchase the Capacity Block for use with your account.

  With Capacity Blocks you ensure
  GPU capacity is available for machine learning (ML) workloads. You must specify
  the ID
  of the Capacity Block offering you are purchasing.
  """
  @spec purchase_capacity_block(map(), purchase_capacity_block_request(), list()) ::
          {:ok, purchase_capacity_block_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def purchase_capacity_block(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "PurchaseCapacityBlock", input, options)
  end

  @doc """
  Purchase the Capacity Block extension for use with your account.

  You must specify the
  ID of the Capacity Block extension offering you are purchasing.
  """
  @spec purchase_capacity_block_extension(
          map(),
          purchase_capacity_block_extension_request(),
          list()
        ) ::
          {:ok, purchase_capacity_block_extension_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def purchase_capacity_block_extension(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "PurchaseCapacityBlockExtension", input, options)
  end

  @doc """
  Purchase a reservation with configurations that match those of your Dedicated
  Host.

  You must have active Dedicated Hosts in your account before you purchase a
  reservation.
  This action results in the specified reservation being purchased and charged to
  your
  account.
  """
  @spec purchase_host_reservation(map(), purchase_host_reservation_request(), list()) ::
          {:ok, purchase_host_reservation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def purchase_host_reservation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "PurchaseHostReservation", input, options)
  end

  @doc """
  Purchases a Reserved Instance for use with your account.

  With Reserved Instances, you pay
  a lower hourly rate compared to On-Demand instance pricing.

  Use `DescribeReservedInstancesOfferings` to get a list of Reserved
  Instance offerings that match your specifications. After you've purchased a
  Reserved Instance,
  you can check for your new Reserved Instance with `DescribeReservedInstances`.

  To queue a purchase for a future date and time, specify a purchase time. If you
  do not
  specify a purchase time, the default is the current time.

  For more information, see [Reserved Instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html)
  and [Sell in the Reserved Instance Marketplace](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec purchase_reserved_instances_offering(
          map(),
          purchase_reserved_instances_offering_request(),
          list()
        ) ::
          {:ok, purchase_reserved_instances_offering_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def purchase_reserved_instances_offering(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "PurchaseReservedInstancesOffering", input, options)
  end

  @doc """

  You can no longer purchase Scheduled Instances.

  Purchases the Scheduled Instances with the specified schedule.

  Scheduled Instances enable you to purchase Amazon EC2 compute capacity by the
  hour for a one-year term.
  Before you can purchase a Scheduled Instance, you must call
  `DescribeScheduledInstanceAvailability`
  to check for available schedules and obtain a purchase token. After you purchase
  a Scheduled Instance,
  you must call `RunScheduledInstances` during each scheduled time period.

  After you purchase a Scheduled Instance, you can't cancel, modify, or resell
  your purchase.
  """
  @spec purchase_scheduled_instances(map(), purchase_scheduled_instances_request(), list()) ::
          {:ok, purchase_scheduled_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def purchase_scheduled_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "PurchaseScheduledInstances", input, options)
  end

  @doc """
  Requests a reboot of the specified instances.

  This operation is asynchronous; it only
  queues a request to reboot the specified instances. The operation succeeds if
  the
  instances are valid and belong to you. Requests to reboot terminated instances
  are
  ignored.

  If an instance does not cleanly shut down within a few minutes, Amazon EC2
  performs a
  hard reboot.

  For more information about troubleshooting, see [Troubleshoot an unreachable instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec reboot_instances(map(), reboot_instances_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reboot_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RebootInstances", input, options)
  end

  @doc """
  Registers an AMI.

  When you're creating an instance-store backed AMI, registering the AMI
  is the final step in the creation process. For more information about creating
  AMIs, see
  [Create an AMI from a snapshot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#creating-launching-ami-from-snapshot)
  and [Create an instance-store backed
  AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-instance-store.html)
  in the *Amazon EC2 User Guide*.

  If needed, you can deregister an AMI at any time. Any modifications you make to
  an AMI
  backed by an instance store volume invalidates its registration. If you make
  changes to an
  image, deregister the previous image and register the new image.

  ## Register a snapshot of a root device volume

  You can use `RegisterImage` to create an Amazon EBS-backed Linux AMI from a
  snapshot
  of a root device volume. You specify the snapshot using a block device mapping.
  You can't set
  the encryption state of the volume using the block device mapping. If the
  snapshot is
  encrypted, or encryption by default is enabled, the root volume of an instance
  launched from
  the AMI is encrypted.

  For more information, see [Create an AMI from a snapshot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#creating-launching-ami-from-snapshot)
  and [Use encryption with EBS-backed AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIEncryption.html)
  in the *Amazon EC2 User Guide*.

  ## Amazon Web Services Marketplace product codes

  If any snapshots have Amazon Web Services Marketplace product codes, they are
  copied to the new AMI.

  In most cases, AMIs for Windows, RedHat, SUSE, and SQL Server require correct
  licensing
  information to be present on the AMI. For more information, see [Understand AMI billing
  information](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html)
  in the *Amazon EC2 User Guide*. When creating an AMI from
  a snapshot, the `RegisterImage` operation derives the correct billing
  information
  from the snapshot's metadata, but this requires the appropriate metadata to be
  present. To
  verify if the correct billing information was applied, check the
  `PlatformDetails`
  field on the new AMI. If the field is empty or doesn't match the expected
  operating system
  code (for example, Windows, RedHat, SUSE, or SQL), the AMI creation was
  unsuccessful, and you
  should discard the AMI and instead create the AMI from an instance.
  For more information, see [Create an AMI from an instance
  ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#how-to-create-ebs-ami)
  in the *Amazon EC2 User Guide*.

  If you purchase a Reserved Instance to apply to an On-Demand Instance that was
  launched
  from an AMI with a billing product code, make sure that the Reserved Instance
  has the matching
  billing product code. If you purchase a Reserved Instance without the matching
  billing product
  code, the Reserved Instance is not applied to the On-Demand Instance. For
  information
  about how to obtain the platform details and billing information of an AMI, see
  [Understand AMI billing
  information](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec register_image(map(), register_image_request(), list()) ::
          {:ok, register_image_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def register_image(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RegisterImage", input, options)
  end

  @doc """
  Registers a set of tag keys to include in scheduled event notifications for your
  resources.

  To remove tags, use
  [DeregisterInstanceEventNotificationAttributes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeregisterInstanceEventNotificationAttributes.html).
  """
  @spec register_instance_event_notification_attributes(
          map(),
          register_instance_event_notification_attributes_request(),
          list()
        ) ::
          {:ok, register_instance_event_notification_attributes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def register_instance_event_notification_attributes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "RegisterInstanceEventNotificationAttributes",
      input,
      options
    )
  end

  @doc """
  Registers members (network interfaces) with the transit gateway multicast group.

  A member is a network interface associated
  with a supported EC2 instance that receives multicast traffic. For more
  information, see
  [Multicast on transit
  gateways](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-multicast-overview.html)
  in the *Amazon Web Services Transit Gateways Guide*.

  After you add the members, use
  [SearchTransitGatewayMulticastGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html)
  to verify that the members were added
  to the transit gateway multicast group.
  """
  @spec register_transit_gateway_multicast_group_members(
          map(),
          register_transit_gateway_multicast_group_members_request(),
          list()
        ) ::
          {:ok, register_transit_gateway_multicast_group_members_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def register_transit_gateway_multicast_group_members(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "RegisterTransitGatewayMulticastGroupMembers",
      input,
      options
    )
  end

  @doc """
  Registers sources (network interfaces) with the specified transit gateway
  multicast group.

  A multicast source is a network interface attached to a supported instance that
  sends
  multicast traffic. For more information about supported instances, see
  [Multicast on transit
  gateways](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-multicast-overview.html)
  in the *Amazon Web Services Transit Gateways Guide*.

  After you add the source, use
  [SearchTransitGatewayMulticastGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html)
  to verify that the source was added to the multicast
  group.
  """
  @spec register_transit_gateway_multicast_group_sources(
          map(),
          register_transit_gateway_multicast_group_sources_request(),
          list()
        ) ::
          {:ok, register_transit_gateway_multicast_group_sources_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def register_transit_gateway_multicast_group_sources(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "RegisterTransitGatewayMulticastGroupSources",
      input,
      options
    )
  end

  @doc """
  Rejects a request to assign billing of the available capacity of a shared
  Capacity
  Reservation to your account.

  For more information, see [ Billing assignment for shared Amazon EC2 Capacity
  Reservations](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/assign-billing.html).
  """
  @spec reject_capacity_reservation_billing_ownership(
          map(),
          reject_capacity_reservation_billing_ownership_request(),
          list()
        ) ::
          {:ok, reject_capacity_reservation_billing_ownership_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reject_capacity_reservation_billing_ownership(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "RejectCapacityReservationBillingOwnership",
      input,
      options
    )
  end

  @doc """
  Rejects a request to associate cross-account subnets with a transit gateway
  multicast domain.
  """
  @spec reject_transit_gateway_multicast_domain_associations(
          map(),
          reject_transit_gateway_multicast_domain_associations_request(),
          list()
        ) ::
          {:ok, reject_transit_gateway_multicast_domain_associations_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reject_transit_gateway_multicast_domain_associations(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "RejectTransitGatewayMulticastDomainAssociations",
      input,
      options
    )
  end

  @doc """
  Rejects a transit gateway peering attachment request.
  """
  @spec reject_transit_gateway_peering_attachment(
          map(),
          reject_transit_gateway_peering_attachment_request(),
          list()
        ) ::
          {:ok, reject_transit_gateway_peering_attachment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reject_transit_gateway_peering_attachment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RejectTransitGatewayPeeringAttachment", input, options)
  end

  @doc """
  Rejects a request to attach a VPC to a transit gateway.

  The VPC attachment must be in the `pendingAcceptance` state.
  Use `DescribeTransitGatewayVpcAttachments` to view your pending VPC attachment
  requests.
  Use `AcceptTransitGatewayVpcAttachment` to accept a VPC attachment request.
  """
  @spec reject_transit_gateway_vpc_attachment(
          map(),
          reject_transit_gateway_vpc_attachment_request(),
          list()
        ) ::
          {:ok, reject_transit_gateway_vpc_attachment_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reject_transit_gateway_vpc_attachment(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RejectTransitGatewayVpcAttachment", input, options)
  end

  @doc """
  Rejects VPC endpoint connection requests to your VPC endpoint service.
  """
  @spec reject_vpc_endpoint_connections(map(), reject_vpc_endpoint_connections_request(), list()) ::
          {:ok, reject_vpc_endpoint_connections_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reject_vpc_endpoint_connections(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RejectVpcEndpointConnections", input, options)
  end

  @doc """
  Rejects a VPC peering connection request.

  The VPC peering connection must be in the
  `pending-acceptance` state. Use the `DescribeVpcPeeringConnections` request
  to view your outstanding VPC peering connection requests. To delete an active
  VPC peering
  connection, or to delete a VPC peering connection request that you initiated,
  use `DeleteVpcPeeringConnection`.
  """
  @spec reject_vpc_peering_connection(map(), reject_vpc_peering_connection_request(), list()) ::
          {:ok, reject_vpc_peering_connection_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reject_vpc_peering_connection(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RejectVpcPeeringConnection", input, options)
  end

  @doc """
  Releases the specified Elastic IP address.

  [Default VPC] Releasing an Elastic IP address automatically disassociates it from any instance that it's associated with. Alternatively, you can disassociate
  an Elastic IP address without
  releasing it.

  [Nondefault VPC] You must disassociate the Elastic IP address
  before you can release it. Otherwise, Amazon EC2 returns an error
  (`InvalidIPAddress.InUse`).

  After releasing an Elastic IP address, it is released to the IP address pool.
  Be sure to update your DNS records and any servers or devices that communicate
  with the address.
  If you attempt to release an Elastic IP address that you already released,
  you'll get an
  `AuthFailure` error if the address is already allocated to another Amazon Web
  Services account.

  After you release an Elastic IP address, you might be able to recover it.
  For more information, see [Release an Elastic IP address](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing-eips-releasing.html).
  """
  @spec release_address(map(), release_address_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def release_address(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReleaseAddress", input, options)
  end

  @doc """
  When you no longer want to use an On-Demand Dedicated Host it can be released.

  On-Demand billing is stopped and the host goes into `released` state. The
  host ID of Dedicated Hosts that have been released can no longer be specified in
  another
  request, for example, to modify the host. You must stop or terminate all
  instances on a
  host before it can be released.

  When Dedicated Hosts are released, it may take some time for them to stop
  counting
  toward your limit and you may receive capacity errors when trying to allocate
  new
  Dedicated Hosts. Wait a few minutes and then try again.

  Released hosts still appear in a `DescribeHosts` response.
  """
  @spec release_hosts(map(), release_hosts_request(), list()) ::
          {:ok, release_hosts_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def release_hosts(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReleaseHosts", input, options)
  end

  @doc """
  Release an allocation within an IPAM pool.

  The Region you use should be the IPAM pool locale. The locale is the Amazon Web
  Services Region where this IPAM pool is available for allocations. You can only
  use this action to release manual allocations. To remove an allocation for a
  resource without deleting the resource, set its monitored state to false using
  [ModifyIpamResourceCidr](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyIpamResourceCidr.html). For more information, see [Release an
  allocation](https://docs.aws.amazon.com/vpc/latest/ipam/release-alloc-ipam.html)
  in the *Amazon VPC IPAM User Guide*.

  All EC2 API actions follow an [eventual consistency](https://docs.aws.amazon.com/ec2/latest/devguide/eventual-consistency.html)
  model.
  """
  @spec release_ipam_pool_allocation(map(), release_ipam_pool_allocation_request(), list()) ::
          {:ok, release_ipam_pool_allocation_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def release_ipam_pool_allocation(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReleaseIpamPoolAllocation", input, options)
  end

  @doc """
  Replaces an IAM instance profile for the specified running instance.

  You can use
  this action to change the IAM instance profile that's associated with an
  instance
  without having to disassociate the existing IAM instance profile first.

  Use `DescribeIamInstanceProfileAssociations` to get the association
  ID.
  """
  @spec replace_iam_instance_profile_association(
          map(),
          replace_iam_instance_profile_association_request(),
          list()
        ) ::
          {:ok, replace_iam_instance_profile_association_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def replace_iam_instance_profile_association(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReplaceIamInstanceProfileAssociation", input, options)
  end

  @doc """
  Sets or replaces the criteria for Allowed AMIs.

  The Allowed AMIs feature does not restrict the AMIs owned by your account.
  Regardless of
  the criteria you set, the AMIs created by your account will always be
  discoverable and
  usable by users in your account.

  For more information, see [Control the discovery and use of AMIs in Amazon EC2 with Allowed
  AMIs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-allowed-amis.html)
  in
  *Amazon EC2 User Guide*.
  """
  @spec replace_image_criteria_in_allowed_images_settings(
          map(),
          replace_image_criteria_in_allowed_images_settings_request(),
          list()
        ) ::
          {:ok, replace_image_criteria_in_allowed_images_settings_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def replace_image_criteria_in_allowed_images_settings(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "ReplaceImageCriteriaInAllowedImagesSettings",
      input,
      options
    )
  end

  @doc """
  Changes which network ACL a subnet is associated with.

  By default when you create a
  subnet, it's automatically associated with the default network ACL. For more
  information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in
  the *Amazon VPC User Guide*.

  This is an idempotent operation.
  """
  @spec replace_network_acl_association(map(), replace_network_acl_association_request(), list()) ::
          {:ok, replace_network_acl_association_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def replace_network_acl_association(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReplaceNetworkAclAssociation", input, options)
  end

  @doc """
  Replaces an entry (rule) in a network ACL.

  For more information, see [Network ACLs](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html) in
  the
  *Amazon VPC User Guide*.
  """
  @spec replace_network_acl_entry(map(), replace_network_acl_entry_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def replace_network_acl_entry(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReplaceNetworkAclEntry", input, options)
  end

  @doc """
  Replaces an existing route within a route table in a VPC.

  You must specify either a destination CIDR block or a prefix list ID. You must
  also specify
  exactly one of the resources from the parameter list, or reset the local route
  to its default
  target.

  For more information, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)
  in the
  *Amazon VPC User Guide*.
  """
  @spec replace_route(map(), replace_route_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def replace_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReplaceRoute", input, options)
  end

  @doc """
  Changes the route table associated with a given subnet, internet gateway, or
  virtual private gateway in a VPC.

  After the operation
  completes, the subnet or gateway uses the routes in the new route table. For
  more
  information about route tables, see [Route tables](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)
  in the *Amazon VPC User Guide*.

  You can also use this operation to change which table is the main route table in
  the VPC. Specify the main route table's association ID and the route table ID of
  the new main route table.
  """
  @spec replace_route_table_association(map(), replace_route_table_association_request(), list()) ::
          {:ok, replace_route_table_association_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def replace_route_table_association(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReplaceRouteTableAssociation", input, options)
  end

  @doc """
  Replaces the specified route in the specified transit gateway route table.
  """
  @spec replace_transit_gateway_route(map(), replace_transit_gateway_route_request(), list()) ::
          {:ok, replace_transit_gateway_route_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def replace_transit_gateway_route(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReplaceTransitGatewayRoute", input, options)
  end

  @doc """
  Trigger replacement of specified VPN tunnel.
  """
  @spec replace_vpn_tunnel(map(), replace_vpn_tunnel_request(), list()) ::
          {:ok, replace_vpn_tunnel_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def replace_vpn_tunnel(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReplaceVpnTunnel", input, options)
  end

  @doc """
  Submits feedback about the status of an instance.

  The instance must be in the
  `running` state. If your experience with the instance differs from the
  instance status returned by `DescribeInstanceStatus`, use `ReportInstanceStatus`
  to report your experience with the instance. Amazon
  EC2 collects this information to improve the accuracy of status checks.

  Use of this action does not change the value returned by
  `DescribeInstanceStatus`.
  """
  @spec report_instance_status(map(), report_instance_status_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def report_instance_status(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ReportInstanceStatus", input, options)
  end

  @doc """
  Creates a Spot Fleet request.

  The Spot Fleet request specifies the total target capacity and the On-Demand
  target
  capacity. Amazon EC2 calculates the difference between the total capacity and
  On-Demand
  capacity, and launches the difference as Spot capacity.

  You can submit a single request that includes multiple launch specifications
  that vary
  by instance type, AMI, Availability Zone, or subnet.

  By default, the Spot Fleet requests Spot Instances in the Spot Instance pool
  where the
  price per unit is the lowest. Each launch specification can include its own
  instance
  weighting that reflects the value of the instance type to your application
  workload.

  Alternatively, you can specify that the Spot Fleet distribute the target
  capacity
  across the Spot pools included in its launch specifications. By ensuring that
  the Spot
  Instances in your Spot Fleet are in different Spot pools, you can improve the
  availability of your fleet.

  You can specify tags for the Spot Fleet request and instances launched by the
  fleet.
  You cannot tag other resource types in a Spot Fleet request because only the
  `spot-fleet-request` and `instance` resource types are
  supported.

  For more information, see [Spot Fleet requests](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html)
  in the *Amazon EC2 User Guide*.

  We strongly discourage using the RequestSpotFleet API because it is a legacy
  API with no planned investment. For options for requesting Spot Instances, see
  [Which is the best Spot request method to
  use?](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#which-spot-request-method-to-use)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec request_spot_fleet(map(), request_spot_fleet_request(), list()) ::
          {:ok, request_spot_fleet_response(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def request_spot_fleet(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RequestSpotFleet", input, options)
  end

  @doc """
  Creates a Spot Instance request.

  For more information, see [Work with Spot Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html)
  in
  the *Amazon EC2 User Guide*.

  We strongly discourage using the RequestSpotInstances API because it is a legacy
  API with no planned investment. For options for requesting Spot Instances, see
  [Which is the best Spot request method to
  use?](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#which-spot-request-method-to-use)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec request_spot_instances(map(), request_spot_instances_request(), list()) ::
          {:ok, request_spot_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def request_spot_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RequestSpotInstances", input, options)
  end

  @doc """
  Resets the attribute of the specified IP address.

  For requirements, see [Using reverse DNS for email applications](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS).
  """
  @spec reset_address_attribute(map(), reset_address_attribute_request(), list()) ::
          {:ok, reset_address_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reset_address_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ResetAddressAttribute", input, options)
  end

  @doc """
  Resets the default KMS key for EBS encryption for your account in this Region
  to the Amazon Web Services managed KMS key for EBS.

  After resetting the default KMS key to the Amazon Web Services managed KMS key,
  you can continue to encrypt by a
  customer managed KMS key by specifying it when you create the volume. For more
  information, see
  [Amazon EBS encryption](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-encryption.html)
  in the *Amazon EBS User Guide*.
  """
  @spec reset_ebs_default_kms_key_id(map(), reset_ebs_default_kms_key_id_request(), list()) ::
          {:ok, reset_ebs_default_kms_key_id_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reset_ebs_default_kms_key_id(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ResetEbsDefaultKmsKeyId", input, options)
  end

  @doc """
  Resets the specified attribute of the specified Amazon FPGA Image (AFI) to its
  default value.

  You can only reset the load permission attribute.
  """
  @spec reset_fpga_image_attribute(map(), reset_fpga_image_attribute_request(), list()) ::
          {:ok, reset_fpga_image_attribute_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reset_fpga_image_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ResetFpgaImageAttribute", input, options)
  end

  @doc """
  Resets an attribute of an AMI to its default value.
  """
  @spec reset_image_attribute(map(), reset_image_attribute_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reset_image_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ResetImageAttribute", input, options)
  end

  @doc """
  Resets an attribute of an instance to its default value.

  To reset the
  `kernel` or `ramdisk`, the instance must be in a stopped
  state. To reset the `sourceDestCheck`, the instance can be either running or
  stopped.

  The `sourceDestCheck` attribute controls whether source/destination
  checking is enabled. The default value is `true`, which means checking is
  enabled. This value must be `false` for a NAT instance to perform NAT. For
  more information, see [NAT instances](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html)
  in the
  *Amazon VPC User Guide*.
  """
  @spec reset_instance_attribute(map(), reset_instance_attribute_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reset_instance_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ResetInstanceAttribute", input, options)
  end

  @doc """
  Resets a network interface attribute.

  You can specify only one attribute at a
  time.
  """
  @spec reset_network_interface_attribute(
          map(),
          reset_network_interface_attribute_request(),
          list()
        ) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reset_network_interface_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ResetNetworkInterfaceAttribute", input, options)
  end

  @doc """
  Resets permission settings for the specified snapshot.

  For more information about modifying snapshot permissions, see [Share a snapshot](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modifying-snapshot-permissions.html)
  in the
  *Amazon EBS User Guide*.
  """
  @spec reset_snapshot_attribute(map(), reset_snapshot_attribute_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def reset_snapshot_attribute(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "ResetSnapshotAttribute", input, options)
  end

  @doc """

  This action is deprecated.

  Restores an Elastic IP address that was previously moved to the EC2-VPC platform
  back to the EC2-Classic platform. You cannot move an Elastic IP address that was
  originally allocated for use in EC2-VPC. The Elastic IP address must not be
  associated with an instance or network interface.
  """
  @spec restore_address_to_classic(map(), restore_address_to_classic_request(), list()) ::
          {:ok, restore_address_to_classic_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def restore_address_to_classic(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RestoreAddressToClassic", input, options)
  end

  @doc """
  Restores an AMI from the Recycle Bin.

  For more information, see [Recover deleted Amazon EBS snapshots and EBS-back AMIs with Recycle
  Bin](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html) in
  the
  *Amazon EC2 User Guide*.
  """
  @spec restore_image_from_recycle_bin(map(), restore_image_from_recycle_bin_request(), list()) ::
          {:ok, restore_image_from_recycle_bin_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def restore_image_from_recycle_bin(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RestoreImageFromRecycleBin", input, options)
  end

  @doc """
  Restores the entries from a previous version of a managed prefix list to a new
  version of the prefix list.
  """
  @spec restore_managed_prefix_list_version(
          map(),
          restore_managed_prefix_list_version_request(),
          list()
        ) ::
          {:ok, restore_managed_prefix_list_version_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def restore_managed_prefix_list_version(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RestoreManagedPrefixListVersion", input, options)
  end

  @doc """
  Restores a snapshot from the Recycle Bin.

  For more information, see [Restore snapshots from the Recycle
  Bin](https://docs.aws.amazon.com/ebs/latest/userguide/recycle-bin-working-with-snaps.html#recycle-bin-restore-snaps)
  in the *Amazon EBS User Guide*.
  """
  @spec restore_snapshot_from_recycle_bin(
          map(),
          restore_snapshot_from_recycle_bin_request(),
          list()
        ) ::
          {:ok, restore_snapshot_from_recycle_bin_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def restore_snapshot_from_recycle_bin(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RestoreSnapshotFromRecycleBin", input, options)
  end

  @doc """
  Restores an archived Amazon EBS snapshot for use temporarily or permanently, or
  modifies the restore
  period or restore type for a snapshot that was previously temporarily restored.

  For more information see [
  Restore an archived
  snapshot](https://docs.aws.amazon.com/ebs/latest/userguide/working-with-snapshot-archiving.html#restore-archived-snapshot)
  and [
  modify the restore period or restore type for a temporarily restored
  snapshot](https://docs.aws.amazon.com/ebs/latest/userguide/working-with-snapshot-archiving.html#modify-temp-restore-period)
  in the *Amazon EBS User Guide*.
  """
  @spec restore_snapshot_tier(map(), restore_snapshot_tier_request(), list()) ::
          {:ok, restore_snapshot_tier_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def restore_snapshot_tier(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RestoreSnapshotTier", input, options)
  end

  @doc """
  Removes an ingress authorization rule from a Client VPN endpoint.
  """
  @spec revoke_client_vpn_ingress(map(), revoke_client_vpn_ingress_request(), list()) ::
          {:ok, revoke_client_vpn_ingress_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def revoke_client_vpn_ingress(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RevokeClientVpnIngress", input, options)
  end

  @doc """
  Removes the specified outbound (egress) rules from the specified security group.

  You can specify rules using either rule IDs or security group rule properties.
  If you use
  rule properties, the values that you specify (for example, ports) must match the
  existing rule's
  values exactly. Each rule has a protocol, from and to ports, and destination
  (CIDR range,
  security group, or prefix list). For the TCP and UDP protocols, you must also
  specify the
  destination port or range of ports. For the ICMP protocol, you must also specify
  the ICMP type
  and code. If the security group rule has a description, you do not need to
  specify the description
  to revoke the rule.

  For a default VPC, if the values you specify do not match the existing rule's
  values, no error is
  returned, and the output describes the security group rules that were not
  revoked.

  Amazon Web Services recommends that you describe the security group to verify
  that the rules were removed.

  Rule changes are propagated to instances within the security group as quickly as
  possible. However,
  a small delay might occur.
  """
  @spec revoke_security_group_egress(map(), revoke_security_group_egress_request(), list()) ::
          {:ok, revoke_security_group_egress_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def revoke_security_group_egress(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RevokeSecurityGroupEgress", input, options)
  end

  @doc """
  Removes the specified inbound (ingress) rules from a security group.

  You can specify rules using either rule IDs or security group rule properties.
  If you use
  rule properties, the values that you specify (for example, ports) must match the
  existing rule's
  values exactly. Each rule has a protocol, from and to ports, and source (CIDR
  range,
  security group, or prefix list). For the TCP and UDP protocols, you must also
  specify the
  destination port or range of ports. For the ICMP protocol, you must also specify
  the ICMP type
  and code. If the security group rule has a description, you do not need to
  specify the description
  to revoke the rule.

  For a default VPC, if the values you specify do not match the existing rule's
  values,
  no error is returned, and the output describes the security group rules that
  were not
  revoked.

  For a non-default VPC, if the values you specify do not match the existing
  rule's
  values, an `InvalidPermission.NotFound` client error is returned, and no
  rules are revoked.

  Amazon Web Services recommends that you describe the security group to verify
  that the rules were removed.

  Rule changes are propagated to instances within the security group as quickly as
  possible.
  However, a small delay might occur.
  """
  @spec revoke_security_group_ingress(map(), revoke_security_group_ingress_request(), list()) ::
          {:ok, revoke_security_group_ingress_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def revoke_security_group_ingress(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RevokeSecurityGroupIngress", input, options)
  end

  @doc """
  Launches the specified number of instances using an AMI for which you have
  permissions.

  You can specify a number of options, or leave the default options. The following
  rules
  apply:

    *
  If you don't specify a subnet ID, we choose a default subnet from
  your default VPC for you. If you don't have a default VPC, you must specify a
  subnet ID in the request.

    *
  All instances have a network interface with a primary private IPv4
  address. If you don't specify this address, we choose one from the IPv4 range of
  your subnet.

    *
  Not all instance types support IPv6 addresses. For more information, see
  [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html).

    *
  If you don't specify a security group ID, we use the default security group
  for the VPC. For more information, see [Security groups](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html).

    *
  If any of the AMIs have a product code attached for which the user has not
  subscribed, the request fails.

  You can create a [launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html),
  which is a resource that contains the parameters to launch an instance. When you
  launch
  an instance using `RunInstances`, you can specify the launch template
  instead of specifying the launch parameters.

  To ensure faster instance launches, break up large requests into smaller
  batches. For
  example, create five separate launch requests for 100 instances each instead of
  one
  launch request for 500 instances.

  `RunInstances` is subject to both request rate limiting and resource rate
  limiting. For more information, see [Request throttling](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-throttling.html).

  An instance is ready for you to use when it's in the `running` state. You
  can check the state of your instance using `DescribeInstances`. You can
  tag instances and EBS volumes during launch, after launch, or both. For more
  information, see `CreateTags` and [Tagging your Amazon EC2 resources](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html).

  Linux instances have access to the public key of the key pair at boot. You can
  use
  this key to provide secure access to the instance. Amazon EC2 public images use
  this
  feature to provide secure access without passwords. For more information, see
  [Key pairs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html).

  For troubleshooting, see [What to do if an instance immediately
  terminates](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html),
  and [Troubleshooting connecting to your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html).
  """
  @spec run_instances(map(), run_instances_request(), list()) ::
          {:ok, reservation(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def run_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RunInstances", input, options)
  end

  @doc """
  Launches the specified Scheduled Instances.

  Before you can launch a Scheduled Instance, you must purchase it and obtain an
  identifier using `PurchaseScheduledInstances`.

  You must launch a Scheduled Instance during its scheduled time period. You can't
  stop or
  reboot a Scheduled Instance, but you can terminate it as needed. If you
  terminate a
  Scheduled Instance before the current scheduled time period ends, you can launch
  it again
  after a few minutes.
  """
  @spec run_scheduled_instances(map(), run_scheduled_instances_request(), list()) ::
          {:ok, run_scheduled_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def run_scheduled_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "RunScheduledInstances", input, options)
  end

  @doc """
  Searches for routes in the specified local gateway route table.
  """
  @spec search_local_gateway_routes(map(), search_local_gateway_routes_request(), list()) ::
          {:ok, search_local_gateway_routes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def search_local_gateway_routes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "SearchLocalGatewayRoutes", input, options)
  end

  @doc """
  Searches one or more transit gateway multicast groups and returns the group
  membership information.
  """
  @spec search_transit_gateway_multicast_groups(
          map(),
          search_transit_gateway_multicast_groups_request(),
          list()
        ) ::
          {:ok, search_transit_gateway_multicast_groups_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def search_transit_gateway_multicast_groups(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "SearchTransitGatewayMulticastGroups", input, options)
  end

  @doc """
  Searches for routes in the specified transit gateway route table.
  """
  @spec search_transit_gateway_routes(map(), search_transit_gateway_routes_request(), list()) ::
          {:ok, search_transit_gateway_routes_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def search_transit_gateway_routes(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "SearchTransitGatewayRoutes", input, options)
  end

  @doc """
  Sends a diagnostic interrupt to the specified Amazon EC2 instance to trigger a
  *kernel panic* (on Linux instances), or a *blue
  screen*/*stop error* (on Windows instances).

  For
  instances based on Intel and AMD processors, the interrupt is received as a
  *non-maskable interrupt* (NMI).

  In general, the operating system crashes and reboots when a kernel panic or stop
  error
  is triggered. The operating system can also be configured to perform diagnostic
  tasks,
  such as generating a memory dump file, loading a secondary kernel, or obtaining
  a call
  trace.

  Before sending a diagnostic interrupt to your instance, ensure that its
  operating
  system is configured to perform the required diagnostic tasks.

  For more information about configuring your operating system to generate a crash
  dump
  when a kernel panic or stop error occurs, see [Send a diagnostic interrupt (for advanced
  users)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/diagnostic-interrupt.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec send_diagnostic_interrupt(map(), send_diagnostic_interrupt_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def send_diagnostic_interrupt(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "SendDiagnosticInterrupt", input, options)
  end

  @doc """
  Generates an account status report.

  The report is generated asynchronously, and can
  take several hours to complete.

  The report provides the current status of all attributes supported by
  declarative
  policies for the accounts within the specified scope. The scope is determined by
  the
  specified `TargetId`, which can represent an individual account, or all the
  accounts that fall under the specified organizational unit (OU) or root (the
  entire
  Amazon Web Services Organization).

  The report is saved to your specified S3 bucket, using the following path
  structure
  (with the capitalized placeholders representing your specific values):

  `s3://AMZN-S3-DEMO-BUCKET/YOUR-OPTIONAL-S3-PREFIX/ec2_TARGETID_REPORTID_YYYYMMDDTHHMMZ.csv`

  ## Prerequisites for generating a report

    *
  The `StartDeclarativePoliciesReport` API can only be called by the
  management account or delegated administrators for the organization.

    *
  An S3 bucket must be available before generating the report (you can create a
  new one or use an existing one), it must be in the same Region where the report
  generation request is made, and it must have an appropriate bucket policy. For a
  sample S3 policy, see *Sample Amazon S3 policy* under
  [Examples](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StartDeclarativePoliciesReport.html#API_StartDeclarativePoliciesReport_Examples). 

    *
  Trusted access must be enabled for the service for which the declarative
  policy will enforce a baseline configuration. If you use the Amazon Web Services
  Organizations
  console, this is done automatically when you enable declarative policies. The
  API uses the following service principal to identify the EC2 service:
  `ec2.amazonaws.com`. For more information on how to enable
  trusted access with the Amazon Web Services CLI and Amazon Web Services SDKs,
  see [Using
  Organizations with other Amazon Web Services
  services](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html)
  in the
  *Amazon Web Services Organizations User Guide*.

    *
  Only one report per organization can be generated at a time. Attempting to
  generate a report while another is in progress will result in an error.

  For more information, including the required IAM permissions to run this API,
  see
  [Generating the account status report for declarative policies](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative_status-report.html)
  in the
  *Amazon Web Services Organizations User Guide*.
  """
  @spec start_declarative_policies_report(
          map(),
          start_declarative_policies_report_request(),
          list()
        ) ::
          {:ok, start_declarative_policies_report_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def start_declarative_policies_report(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "StartDeclarativePoliciesReport", input, options)
  end

  @doc """
  Starts an Amazon EBS-backed instance that you've previously stopped.

  Instances that use Amazon EBS volumes as their root devices can be quickly
  stopped and
  started. When an instance is stopped, the compute resources are released and you
  are not
  billed for instance usage. However, your root partition Amazon EBS volume
  remains and
  continues to persist your data, and you are charged for Amazon EBS volume usage.
  You can
  restart your instance at any time. Every time you start your instance, Amazon
  EC2
  charges a one-minute minimum for instance usage, and thereafter charges per
  second for
  instance usage.

  Before stopping an instance, make sure it is in a state from which it can be
  restarted. Stopping an instance does not preserve data stored in RAM.

  Performing this operation on an instance that uses an instance store as its root
  device returns an error.

  If you attempt to start a T3 instance with `host` tenancy and the
  `unlimited` CPU credit option, the request fails. The
  `unlimited` CPU credit option is not supported on Dedicated Hosts. Before
  you start the instance, either change its CPU credit option to `standard`, or
  change its tenancy to `default` or `dedicated`.

  For more information, see [Stop and start Amazon EC2 instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)
  in the *Amazon EC2 User Guide*.
  """
  @spec start_instances(map(), start_instances_request(), list()) ::
          {:ok, start_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def start_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "StartInstances", input, options)
  end

  @doc """
  Starts analyzing the specified Network Access Scope.
  """
  @spec start_network_insights_access_scope_analysis(
          map(),
          start_network_insights_access_scope_analysis_request(),
          list()
        ) ::
          {:ok, start_network_insights_access_scope_analysis_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def start_network_insights_access_scope_analysis(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "StartNetworkInsightsAccessScopeAnalysis", input, options)
  end

  @doc """
  Starts analyzing the specified path.

  If the path is reachable, the
  operation returns the shortest feasible path.
  """
  @spec start_network_insights_analysis(map(), start_network_insights_analysis_request(), list()) ::
          {:ok, start_network_insights_analysis_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def start_network_insights_analysis(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "StartNetworkInsightsAnalysis", input, options)
  end

  @doc """
  Initiates the verification process to prove that the service provider owns the
  private
  DNS name domain for the endpoint service.

  The service provider must successfully perform the verification before the
  consumer can use the name to access the service.

  Before the service provider runs this command, they must add a record to the DNS
  server.
  """
  @spec start_vpc_endpoint_service_private_dns_verification(
          map(),
          start_vpc_endpoint_service_private_dns_verification_request(),
          list()
        ) ::
          {:ok, start_vpc_endpoint_service_private_dns_verification_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def start_vpc_endpoint_service_private_dns_verification(
        %Client{} = client,
        input,
        options \\ []
      ) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "StartVpcEndpointServicePrivateDnsVerification",
      input,
      options
    )
  end

  @doc """
  Stops an Amazon EBS-backed instance.

  You can restart your instance at any time using
  the
  [StartInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_StartInstances.html) API. For more information, see [Stop and start Amazon EC2
  instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)
  in the *Amazon EC2 User Guide*.

  When you stop or hibernate an instance, we shut it down. By default, this
  includes a
  graceful operating system (OS) shutdown. To bypass the graceful shutdown, use
  the
  `skipOsShutdown` parameter; however, this might risk data
  integrity.

  You can use the StopInstances operation together with the `Hibernate`
  parameter to hibernate an instance if the instance is [enabled for hibernation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enabling-hibernation.html)
  and meets the [hibernation prerequisites](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html).
  Stopping an instance doesn't preserve data stored in RAM,
  while hibernation does. If hibernation fails, a normal shutdown occurs. For more
  information, see [Hibernate your Amazon EC2 instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html) in
  the *Amazon EC2 User Guide*.

  If your instance appears stuck in the `stopping` state, there might be an
  issue with the underlying host computer. You can use the StopInstances operation
  together with the Force parameter to force stop your instance. For more
  information, see
  [Troubleshoot Amazon EC2 instance stop
  issues](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html)
  in the
  *Amazon EC2 User Guide*.

  Stopping and hibernating an instance differs from rebooting or terminating it.
  For
  example, a stopped or hibernated instance retains its root volume and any data
  volumes,
  unlike terminated instances where these volumes are automatically deleted. For
  more
  information about the differences between stopping, hibernating, rebooting, and
  terminating instances, see [Amazon EC2 instance state
  changes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html)
  in the *Amazon EC2 User Guide*.

  We don't charge for instance usage or data transfer fees when an instance is
  stopped.
  However, the root volume and any data volumes remain and continue to persist
  your data,
  and you're charged for volume usage. Every time you start your instance, Amazon
  EC2 charges a one-minute minimum for instance usage, followed by per-second
  billing.

  You can't stop or hibernate instance store-backed instances.
  """
  @spec stop_instances(map(), stop_instances_request(), list()) ::
          {:ok, stop_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def stop_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "StopInstances", input, options)
  end

  @doc """
  Terminates active Client VPN endpoint connections.

  This action can be used to terminate a specific client connection, or up to five
  connections established by a specific user.
  """
  @spec terminate_client_vpn_connections(
          map(),
          terminate_client_vpn_connections_request(),
          list()
        ) ::
          {:ok, terminate_client_vpn_connections_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def terminate_client_vpn_connections(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "TerminateClientVpnConnections", input, options)
  end

  @doc """
  Shuts down the specified instances.

  This operation is
  [idempotent](https://docs.aws.amazon.com/ec2/latest/devguide/ec2-api-idempotency.html); if you
  terminate an instance more than once, each call succeeds.

  If you specify multiple instances and the request fails (for example, because of
  a
  single incorrect instance ID), none of the instances are terminated.

  If you terminate multiple instances across multiple Availability Zones, and one
  or
  more of the specified instances are enabled for termination protection, the
  request
  fails with the following results:

    *
  The specified instances that are in the same Availability Zone as the
  protected instance are not terminated.

    *
  The specified instances that are in different Availability Zones, where no
  other specified instances are protected, are successfully terminated.

  For example, say you have the following instances:

    *
  Instance A: `us-east-1a`; Not protected

    *
  Instance B: `us-east-1a`; Not protected

    *
  Instance C: `us-east-1b`; Protected

    *
  Instance D: `us-east-1b`; not protected

  If you attempt to terminate all of these instances in the same request, the
  request
  reports failure with the following results:

    *
  Instance A and Instance B are successfully terminated because none of the
  specified instances in `us-east-1a` are enabled for termination
  protection.

    *
  Instance C and Instance D fail to terminate because at least one of the
  specified instances in `us-east-1b` (Instance C) is enabled for
  termination protection.

  Terminated instances remain visible after termination (for approximately one
  hour).

  By default, Amazon EC2 deletes all EBS volumes that were attached when the
  instance
  launched. Volumes attached after instance launch continue running.

  By default, the TerminateInstances operation includes a graceful operating
  system (OS)
  shutdown. To bypass the graceful shutdown, use the `skipOsShutdown`
  parameter; however, this might risk data integrity.

  You can stop, start, and terminate EBS-backed instances. You can only terminate
  instance store-backed instances. What happens to an instance differs if you stop
  or
  terminate it. For example, when you stop an instance, the root device and any
  other
  devices attached to the instance persist. When you terminate an instance, any
  attached
  EBS volumes with the `DeleteOnTermination` block device mapping parameter set
  to `true` are automatically deleted. For more information about the
  differences between stopping and terminating instances, see [Amazon EC2
  instance state
  changes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html)
  in the *Amazon EC2 User Guide*.

  When you terminate an instance, we attempt to terminate it forcibly after a
  short
  while. If your instance appears stuck in the shutting-down state after a period
  of time,
  there might be an issue with the underlying host computer. For more information
  about
  terminating and troubleshooting terminating your instances, see [Terminate Amazon EC2 instances](https://docs.aws.amazon.com/) and
  [Troubleshooting terminating your instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec terminate_instances(map(), terminate_instances_request(), list()) ::
          {:ok, terminate_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def terminate_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "TerminateInstances", input, options)
  end

  @doc """
  Unassigns the specified IPv6 addresses or Prefix Delegation prefixes from a
  network
  interface.
  """
  @spec unassign_ipv6_addresses(map(), unassign_ipv6_addresses_request(), list()) ::
          {:ok, unassign_ipv6_addresses_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def unassign_ipv6_addresses(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "UnassignIpv6Addresses", input, options)
  end

  @doc """
  Unassigns the specified secondary private IP addresses or IPv4 Prefix Delegation
  prefixes from a network interface.
  """
  @spec unassign_private_ip_addresses(map(), unassign_private_ip_addresses_request(), list()) ::
          {:ok, nil, any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def unassign_private_ip_addresses(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "UnassignPrivateIpAddresses", input, options)
  end

  @doc """
  Unassigns secondary private IPv4 addresses from a private NAT gateway.

  You cannot unassign your primary private IP. For more information,
  see [Edit secondary IP address associations](https://docs.aws.amazon.com/vpc/latest/userguide/nat-gateway-working-with.html#nat-gateway-edit-secondary)
  in the *Amazon VPC User Guide*.

  While unassigning is in progress, you cannot assign/unassign additional IP
  addresses while the connections are being drained. You are, however, allowed to
  delete the NAT gateway.

  A private IP address will only be released at the end of
  MaxDrainDurationSeconds. The
  private IP addresses stay associated and support the existing connections, but
  do not
  support any new connections (new connections are distributed across the
  remaining
  assigned private IP address). After the existing connections drain out, the
  private IP
  addresses are released.
  """
  @spec unassign_private_nat_gateway_address(
          map(),
          unassign_private_nat_gateway_address_request(),
          list()
        ) ::
          {:ok, unassign_private_nat_gateway_address_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def unassign_private_nat_gateway_address(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "UnassignPrivateNatGatewayAddress", input, options)
  end

  @doc """
  Unlocks a snapshot that is locked in governance mode or that is locked in
  compliance mode
  but still in the cooling-off period.

  You can't unlock a snapshot that is locked in compliance
  mode after the cooling-off period has expired.
  """
  @spec unlock_snapshot(map(), unlock_snapshot_request(), list()) ::
          {:ok, unlock_snapshot_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def unlock_snapshot(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "UnlockSnapshot", input, options)
  end

  @doc """
  Disables detailed monitoring for a running instance.

  For more information, see [Monitoring your instances and
  volumes](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html)
  in the
  *Amazon EC2 User Guide*.
  """
  @spec unmonitor_instances(map(), unmonitor_instances_request(), list()) ::
          {:ok, unmonitor_instances_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def unmonitor_instances(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "UnmonitorInstances", input, options)
  end

  @doc """
  Updates the description of an egress (outbound) security group rule.

  You
  can replace an existing description, or add a description to a rule that did not
  have one
  previously. You can remove a description for a security group rule by omitting
  the
  description parameter in the request.
  """
  @spec update_security_group_rule_descriptions_egress(
          map(),
          update_security_group_rule_descriptions_egress_request(),
          list()
        ) ::
          {:ok, update_security_group_rule_descriptions_egress_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def update_security_group_rule_descriptions_egress(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "UpdateSecurityGroupRuleDescriptionsEgress",
      input,
      options
    )
  end

  @doc """
  Updates the description of an ingress (inbound) security group rule.

  You can replace an
  existing description, or add a description to a rule that did not have one
  previously.
  You can remove a description for a security group rule by omitting the
  description
  parameter in the request.
  """
  @spec update_security_group_rule_descriptions_ingress(
          map(),
          update_security_group_rule_descriptions_ingress_request(),
          list()
        ) ::
          {:ok, update_security_group_rule_descriptions_ingress_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def update_security_group_rule_descriptions_ingress(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(
      client,
      meta,
      "UpdateSecurityGroupRuleDescriptionsIngress",
      input,
      options
    )
  end

  @doc """
  Stops advertising an address range that is provisioned as an address pool.

  You can perform this operation at most once every 10 seconds, even if you
  specify different
  address ranges each time.

  It can take a few minutes before traffic to the specified addresses stops
  routing to Amazon Web Services
  because of BGP propagation delays.
  """
  @spec withdraw_byoip_cidr(map(), withdraw_byoip_cidr_request(), list()) ::
          {:ok, withdraw_byoip_cidr_result(), any()}
          | {:error, {:unexpected_response, any()}}
          | {:error, term()}
  def withdraw_byoip_cidr(%Client{} = client, input, options \\ []) do
    meta = metadata()

    Request.request_post(client, meta, "WithdrawByoipCidr", input, options)
  end
end
